問題
GKEのIngressで作成したHTTP(S)ロードバランサについて、Ingressコントローラからはセッションアフィニティが設定できません。
このページのaffinityの欄を確認すると、2017/12/28現在はnginxコントローラのみ対応しており、GCPのロードバランサは対応していないことがわかります。
つまり、以下のようにgceコントローラを使用している場合は、セッションアフィニティのannotationsは使用できません。
.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: eccube-ingress
namespace:
annotations:
kubernetes.io/ingress.class: "gce"
.
.
.
解決策
gcloudコマンドを使ってセッションアフィニティを設定できます。
Ingressがデプロイされ、HTTP(S)ロードバランサが立ち上がった後、以下のようなスクリプトを実行します。
enable-affinity.sh
backend_list=(`gcloud compute backend-services list | awk -v ORS=" " '!/NAME/{gsub("\n"," ",$1); print $1 }'`)
for v in "${backend_list[@]}"
do
gcloud compute backend-services update "$v" --session-affinity client_ip --global
done
上記のスクリプトでは現存するバックエンドサービス全てに対して、セッションアフィニティClientIP
を設定しています。