リソース定義@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キーを設定する。