EKS上にデプロイしたWebアプリケーションを外部に公開するために、ALB Ingress Controllerを使ってALBを作成していた。 とある理由で新しくリスナールールを追加する必要があったので、やり方について調べてみた。

要約

  • alb.ingress.kubernetes.io/actions.${action-name}というannotationを用いることで、custom actionを設定することができる。
  • これを利用することで、ALB ingress-controller管理のもと、Serviceにルーティングするターゲットグループとは異なるターゲットグループに転送するリスナールールを新しく作成することができる。
  • 利用用途としては、静的ページを返すLambdaをターゲットグループとしたルールを作成しておき、メンテナンス時にPriorityを入れ替えることで静的ページを返すようにする、など。

設定方法

具体的な設定方法は以下のとおり。

  1. 任意のターゲットグループを作成する
  2. annotationを対象のIngressリソースに付与する
  3. IngressリソースのRuleを変更する

任意のターゲットグループを作成する

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にセットする
          - path: /
            backend:
              serviceName: sample-action
              servicePort: use-annotation

参考文献