ALB 作成の問題
このトラブルシューティングシナリオでは、AWS Load Balancer ControllerがApplication Load Balancer(ALB)をIngressリソース用に作成しない理由を調査します。この演習の最後には、以下の画像のように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のルートを持っています。