Setting Node affinity for istio helm install

Hello all,

I am deploying istio using helm. For ingressgateway and egressgateway, I have a couple of affinity constraints:

  1. prefer not to run two of ingress/egress gateway on the same node.
  2. prefer to deploy ingress/egress gateways on edge nodes (labeled edge).

Note that I use the term “prefer” rather than “require” meaning that if, for example, there are no available edge nodes for scheduling, we still want to schedule them anyway.

So for number 1, I am able to do this using podAntiAffinityTermLabelSelector in the values.yaml file. But for number 2, I cannot find a way to do this. From the affinity template it appears that nodeAffinityPreferredDuringScheduling is autogenerated using values from global.arch. I would be able to add to nodeAffinityRequiredDuringScheduling by using the nodeSelector, but as I said before, I want to prefer edge nodes, not require them.

Is there any way to do this from helm using values overrides? Or can I only do it using a kubernetes operator? It seems like node preferences is the only thing I am not able to configure in a helm install.