ALB が作成されない問題
このトラブルシューティングシナリオでは、AWS Load Balancer Controller が Ingress リソース用に Application Load Balancer(ALB)を作成しない理由を調査します。この演習の最後には、以下の画像のように ALB Ingress を通じて UI アプリケーションにアクセスできるようになります。

トラブルシューティングを始めましょう
ステップ 1:アプリケーションのス テータスを確認する
まず、UI アプリケーションのステータスを確認しましょう:
NAME READY STATUS RESTARTS AGE
ui-68495c748c-jkh2z 1/1 Running 0 85s
ステップ 2:Ingress ステータスを確認する
Ingress リソースを調べてみましょう。ADDRESS フィールドが空であることに注目してください - これは ALB が作成されていないことを示しています:
NAME CLASS HOSTS ADDRESS PORTS AGE
ui alb * 80 105s
正常にデプロイされ た場合、ADDRESS フィールドには次のような ALB DNS 名が表示されます:
NAME CLASS HOSTS ADDRESS PORTS AGE
ui alb * k8s-ui-ingress-xxxxxxxxxx-yyyyyyyyyy.region.elb.amazonaws.com 80 2m32s
ステップ 3:Ingress イベントを調査する
ALB 作成が失敗した理由を理解するために、Ingress に関連するイベントを見てみましょう:
Name: ui
Labels: <none>
Namespace: ui
Address:
Ingress Class: alb
Default backend: <default>
Rules:
Host Path Backends
---- ---- --------
*
/ service-ui:80 (<error: endpoints "service-ui" not found>)
Annotations: alb.ingress.kubernetes.io/healthcheck-path: /actuator/health/liveness
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedBuildModel 2m23s (x16 over 5m9s) ingress Failed build model due to couldn't auto-discover subnets: unable to resolve at least one subnet (0 match VPC and tags: [kubernetes.io/role/elb])
このエラーは、AWS Load Balancer Controller がロードバランサーで使用するためにタグ付けされたサブネットを見つけることができないことを示しています。ALB を EKS で正しく設定するためのドキュメントがあります。
ステップ 4:サブネットタグを修正する
Load Balancer Controller は、パブリックサブネットに kubernetes.io/role/elb=1 というタグが必要です。正しいサブネットを特定してタグ付けしましょう:
4.1 クラスターのサブネットを見つける
[
"subnet-xxxxxxxxxxxxxxxxx",
"subnet-xxxxxxxxxxxxxxxxx",
"subnet-xxxxxxxxxxxxxxxxx",
"subnet-xxxxxxxxxxxxxxxxx",
"subnet-xxxxxxxxxxxxxxxxx",
"subnet-xxxxxxxxxxxxxxxxx"
]
4.2. ルートテーブルを確認してどのサブネットがパブリックかを識別する
サブネット ID を CLI フィルターに一度に 1 つずつ追加することで、どのサブネットがパブリックかを識別できます:--filters 'Name=association.subnet-id,Values=subnet-xxxxxxxxxxxxxxxxx'
aws ec2 describe-route-tables --filters 'Name=association.subnet-id,Values=<ここにサブネット ID を入力>' --query 'RouteTables[].Routes[].[DestinationCidrBlock,GatewayId]'
Subnet: subnet-xxxxxxxxxxxxxxxxx
10.42.0.0/16 local
0.0.0.0/0 igw-xxxxxxxxxxxxxxxxx
Subnet: subnet-xxxxxxxxxxxxxxxxx
10.42.0.0/16 local
0.0.0.0/0 igw-xxxxxxxxxxxxxxxxx
...
パブリックサブネットは、Internet Gateway(igw-xxx)を指す 0.0.0.0/0 のルートを持っています。
4.3. 現在 の ELB タグのステータスを確認する
[]
4.4. パブリックサブネットにタグ付けする(便宜上、環境変数に格納しています)
4.5. タグが適用されたことを確認する
4.6. 新しいサブネット設定を取得するために Load Balancer Controller を再起動する
deployment.apps/aws-load-balancer-controller restarted