概要
OpenShift Service Mesh(2.5)環境下、Istio Ingress Gateway Podを3台で構成していたが、トラフィックが分散せず特定のPodに集中していたので調査。
結論
Gatewayで以下を仕込み、手前のRouterの負荷分散ロジックを指定して解消。
annotations:
haproxy.router.openshift.io/balance: roundrobin
詳細
構成
外部LBからpassthroughのrouter経由でIngress Gatewayに流している。
ここで、ingressのトラフィックが全てPod1に集中していたので、つまりは手前のrouterの負荷分散設定の問題。
原因
router(haproxy)の負荷分散設定を確認するとsourceになっている。
$ cat /var/lib/haproxy/conf/haproxy.config
...
backend be_http:istio-system:istio-ingressgateway
...
balance source
これだと、source IP毎に振り分ける挙動となり、LBのIPで判定して同じpodに振り続けてしまう。
対応
上述の通り、Gatewayリソースのannotationでrouterの負荷分散方法を指定することができる。
annotations:
haproxy.router.openshift.io/balance: roundrobin
尚、デフォルトはrouterがpassthorughだとsourceで他はrandomの模様。
補足:DestinationRuleの流量制限への影響
追記予定