コンテンツにスキップ

リソース定義@AWS Load Balancer Controller

はじめに

本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。


01. Ingressの .metadata.annotations キー

Ingressの .metadata.annotations キーとは

特定の Nginx のルーティングルールを決める。

Ingress で alb の IngressClass を指定する必要がある。

AWS Load Balancer Controller は、Ingress の .metadata.annotations キーと .spec.rules キーの設定に応じて、AWS ALB を自動的にプロビジョニングする。


alb.ingress.kubernetes.io/certificate-arn キー

alb.ingress.kubernetes.io/certificate-arn キーとは

AWS ALB で HTTPS プロトコルを受け付ける場合、事前に作成した AWS Certificate Manager のサーバー証明書の ARN を設定する。

AWS Load Balancer Controller は、プロビジョニングした ALB に AWS Certificate Manager のサーバー証明書を自動的に紐づける。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: foo-alb-ingress
  annotations:
    alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:ap-northeast-1:<AWSアカウントID>:certificate/*****

▼ オートディスカバリー

AWS Certificate Manager のサーバー証明書の ARN を指定せずとも、オートディスカバリーを使用して、AWS Certificate Manager のサーバー証明書を紐づけられる。

aws-load-balancer-controller は、Ingress の .spec.tls キーや .spec.rules[*].host キーに基づいて、適切な AWS Certificate Manager のサーバー証明書を AWS ALB に自動的に紐づける。

例えば Ingress で .spec.rules[*].hosts キーに foo.example.com を設定していた場合、aws-load-balancer-controller は *.example.com で認証されたサーバー証明書を AWS Certificate Manager から探す。


alb.ingress.kubernetes.io/healthcheck-path キー

ヘルスチェック対象として Pod のコンテナのパスを設定する。

alb.ingress.kubernetes.io/target-type キー値が instance でも ip でも、ヘルスチェック対象は Pod である。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: foo-alb-http-ingress
  annotations:
    # HTTPヘルスチェックのパス
    # HTTPヘルスチェックのパスはPodの種類によって異なる
    alb.ingress.kubernetes.io/healthcheck-path: /healthz/ready
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: foo-alb-grpc-ingress
  annotations:
    # gRPCのヘルスチェックパス
    # gRPCのヘルスチェックパスはPodの種類によらず同じ
    alb.ingress.kubernetes.io/healthcheck-path: /grpc.health.v1.Health/Check


alb.ingress.kubernetes.io/healthcheck-port キー

ヘルスチェック対象として、Pod のコンテナのポート番号を設定する。

alb.ingress.kubernetes.io/target-type キー値が instance でも ip でも、ヘルスチェック対象は Pod である。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: foo-alb-ingress
  annotations:
    alb.ingress.kubernetes.io/healthcheck-port: 80


alb.ingress.kubernetes.io/inbound-cidrs キー

インバウンド通信で許可する CIDR を設定する。

alb.ingress.kubernetes.io/wafv2-acl-arn キーを使用して、同じルールを持った AWS WAF を紐づけてもよい。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: foo-alb-ingress
  annotations:
    alb.ingress.kubernetes.io/inbound-cidrs: *.*.*.*


alb.ingress.kubernetes.io/listen-ports キー

AWS ALB でインバウンド通信を受け付けるポート番号を設定する。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: foo-alb-ingress
  annotations:
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}]'


alb.ingress.kubernetes.io/load-balancer-attributes キー

AWS ALB の属性を設定する。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: foo-alb-ingress
  annotations:
    alb.ingress.kubernetes.io/load-balancer-attributes: access_logs.s3.enabled=true,access_logs.s3.bucket=foo-alb-ingress-backet,access_logs.s3.prefix=foo


alb.ingress.kubernetes.io/group.name キー

Ingress のグループ名を設定する。

同じ alb.ingress.kubernetes.io/group.name キーの Ingress を作成した場合、新しく ALB を作成するのではなく、既存の ALB にインバウンドルールのみを追加する。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: foo-alb-ingress
  annotations:
    alb.ingress.kubernetes.io/group.name: foo-common-alb


alb.ingress.kubernetes.io/scheme キー

AWS ALB のスキームを設定する。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: foo-alb-ingress
  annotations:
    alb.ingress.kubernetes.io/scheme: internet-facing


alb.ingress.kubernetes.io/success-codes キー

成功した場合のステータスコードを設定する。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: foo-alb-ingress
  annotations:
    alb.ingress.kubernetes.io/success-codes: "200"


alb.ingress.kubernetes.io/subnets キー

AWS ALB のルーティング先のサブネットを設定する。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: foo-alb-ingress
  annotations:
    alb.ingress.kubernetes.io/subnets: ["subnet-*****", "subnet-*****"]


alb.ingress.kubernetes.io/target-type キー

alb.ingress.kubernetes.io/target-type キーとは

ルーティング先のターゲットタイプを設定する。

instance の場合

instance ターゲットタイプを設定する。

インスタンスターゲットタイプの場合、宛先 Pod の送信元の Service は NodePort Service とする。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: foo-alb-ingress
  annotations:
    # Ingressに紐づけるServiceはNodePort Serviceとする
    alb.ingress.kubernetes.io/target-type: instance

ip の場合

IP ターゲットタイプを設定する。

IP ターゲットタイプの場合、宛先 Pod の送信元の Service は ClusterIP Service とする。

AWS Fargate の場合は、ip を設定する必要がある。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: foo-alb-ingress
  annotations:
    # Ingressに紐づけるServiceはClusterIP Serviceとする
    alb.ingress.kubernetes.io/target-type: ip


alb.ingress.kubernetes.io/waf-acl-id キー

LB に紐付ける AWS WAF v1 の ID を設定する。ALB と同じリージョンで、AWS WAF v1 を作成する必要がある。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: foo-alb-ingress
  annotations:
    alb.ingress.kubernetes.io/waf-acl-id: *****


alb.ingress.kubernetes.io/wafv2-acl-arn キー

LB に紐付ける AWS WAF v2 の ARN を設定する。ALB と同じリージョンで、AWS WAF v2 を作成する必要がある。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: foo-alb-ingress
  annotations:
    alb.ingress.kubernetes.io/wafv2-acl-arn: arn:aws:wafv2:ap-northeast-1:<AWSアカウントID>:regional/webacl/<WAFのACL名>/<ID>


02. Ingressの .spec.rules キー

AWS ALB のリスナールールを定義するために、Ingress の .spec.rules キーを設定する。