<p>Regarding the current installation options for <code>Istio 1.1.4</code> it should be possible to <a href="https://istio.io/docs/reference/config/installation-options/#global-options" rel="nofollow noreferrer">define a default node selector which gets added to all Istio deployments</a></p>

<p>The documentation does not show a dedicated sample how the selector has to be defined, only <code>{}</code> as value.</p>

<p>Currently I was not able to find a working format to pass the values to the helm charts by using <code>--set</code>, e.g:</p>

<pre><code> --set global.defaultNodeSelector="{cloud.google.com/gke-nodepool:istio-pool}"
</code></pre>

<p>I tried several variations, with and without escapes, JSON map, ... But currently everything results into the same Helm error message:</p>

<pre><code>2019/05/06 15:58:10 Warning: Merging destination map for chart 'istio'. Cannot overwrite table item 'defaultNodeSelector', with non table value: map[]

Istio version 1.1.4

Helm 2.13.1
</code></pre>

<p>The expectation would be to have a more detailed documentation, giving some samples on Istio side.</p>

Peter
<p>After searching for some hours I found a solution right after posting the question by digging in the Istio commits.</p>

<p>I'll leave my findings as a reference, maybe someone can safe some time that way.</p>

<p>Setting a default node selector works, at least for me, by separating the key by dots and escaping additional ones with \ (if there are dots in the label of interest)</p>

<pre><code>--set global.defaultNodeSelector.cloud\\.google\\.com/gke-nodepool=istio-pool
</code></pre>

<p>To create a defaultNodeSelector for a node pool labeled with</p>

<pre><code>cloud.google.com/gke-nodepool: istio-pool
</code></pre>

<p>I was not able to add multiple values that way the {} notation for adding lists in Helm doesn't seem to get respected.</p>
