Karpenter Controller を Fargate で動かしているけど Pod が起動しない EC2MetadataRequestError
事象
Karpenter Controller Pod を Fargate で起動しようとしたら失敗。以下のエラーが出力された。
$ kubectl logs -n karpenter karpenter-db9c68466-8jzjj
panic: failed to get region from metadata server: EC2MetadataRequestError: failed to get EC2 instance identity document
caused by: RequestError: send request failed
caused by: Get "http://169.254.169.254/latest/dynamic/instance-identity/document": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
goroutine 1 [running]:
github.com/samber/lo.must({0x296ac40, 0xc000942dc0}, {0xc000a1fbf8, 0x1, 0x1})
github.com/samber/lo@v1.46.0/errors.go:51 +0x1bb
github.com/samber/lo.Must[...](...)
github.com/samber/lo@v1.46.0/errors.go:65
github.com/aws/karpenter-provider-aws/pkg/operator.NewOperator({0x347c438, 0xc000706f00}, 0xc000653980)
github.com/aws/karpenter-provider-aws/pkg/operator/operator.go:110 +0x213
main.main()
github.com/aws/karpenter-provider-aws/cmd/controller/main.go:32 +0x2a
原因(と思われるところ)
アカウントレベルでIMDS(インスタンスメタデータサービス)を有効化していなかった。
対処方法
AWS コンソールの [EC2]-[ダッシュボード]-[アカウントの属性]-[データ保護とセキュリティ]-[IMDS デフォルト]-[管理]からインスタンスメタデータサービスを有効化した。
※メタデータのバージョンは「V2のみ(トークンは必須)」
Pod を削除して再起動したところ、無事 Fargate 上で Pod が起動した。
$ kubectl get pod -n karpenter -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES karpenter-db9c68466-h844g 1/1 Running 0 4m21s 192.168.106.138 fargate-ip-192-168-106-138.ec2.internal <none> <none> karpenter-db9c68466-jr8kt 1/1 Running 0 4m22s 192.168.76.92 fargate-ip-192-168-76-92.ec2.internal <none> <none>