EKS上にデプロイしたWebアプリケーションを外部に公開するために、ALB Ingress Controllerを使ってALBを作成していた。 とある理由で新しくリスナールールを追加する必要があったので、やり方について調べてみた。
要約
alb.ingress.kubernetes.io/actions.${action-name}
というannotationを用いることで、custom actionを設定することができる。- これを利用することで、ALB ingress-controller管理のもと、Serviceにルーティングするターゲットグループとは異なるターゲットグループに転送するリスナールールを新しく作成することができる。
- 利用用途としては、静的ページを返すLambdaをターゲットグループとしたルールを作成しておき、メンテナンス時にPriorityを入れ替えることで静的ページを返すようにする、など。
設定方法
具体的な設定方法は以下のとおり。
- 任意のターゲットグループを作成する
- annotationを対象のIngressリソースに付与する
- IngressリソースのRuleを変更する
任意のターゲットグループを作成する
- コンソールなりTerraformなりで、任意のターゲットグループを作成する。詳細は割愛。
annotationを対象のIngressリソースに付与する
- 以下のannotationを対象のIngressリソースに付与する。
TargetGroupArn
は、転送したいターゲットグループのARNを指定する。
alb.ingress.kubernetes.io/actions.sample-action: '{"Type": "forward", "TargetGroupArn": "arn:aws:elasticloadbalancing:ap-northeast-1:<ACCOUNT_ID>:targetgroup/<TARGET_GROUP_NAME>/・・・"'
IngressリソースのRuleを変更する。
- 以下のとおり、IngressリソースのRuleを追加する。
- serviceNameを2で作成したannotationの
action-name
に設定する - servicePortを
use-annotation
にセットする
- serviceNameを2で作成したannotationの
- path: /
backend:
serviceName: sample-action
servicePort: use-annotation