Help us understand the problem. What is going on with this article?

GCPのHTTP(S)ロードバランサでセッションアフィニティを設定する

More than 1 year has passed since last update.

問題

GKEのIngressで作成したHTTP(S)ロードバランサについて、Ingressコントローラからはセッションアフィニティが設定できません。
このページのaffinityの欄を確認すると、2017/12/28現在はnginxコントローラのみ対応しており、GCPのロードバランサは対応していないことがわかります。

つまり、以下のようにgceコントローラを使用している場合は、セッションアフィニティのannotationsは使用できません。

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を設定しています。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away