AWS Amazon Elastic Kubernetes Service (Amazon EKS) のポッドに障害が発生しており、Amazon Elastic Kubernetes サービス (Amazon EKS) から「Forbidden」エラーが返されたり、ロードバランサーのコントローラーポッドログに「problem running manager: error leader election lost」というメッセージが表示されたりします。
解決策
AWS Load Balancer Controller ポッドで障害が発生すると、「Forbidden」エラーが発生します。
Forbidden エラーは、Amazon EKS クラスターのロールである aws-load-balancer-controller-role に coordination.k8s.io apiGroups からリソースをリースするためのアクセス許可が欠けている場合に発生します。新しいインバウンドリソースは期待通りに機能せず、既存の Ingress リソースへの変更は反映されません。
次のエラーが発生します。
「E0830 08:37:41.717952 1 leaderelection.go:330] error retrieving resource lock kube-system/aws-load-balancer-controller-leader: leases.coordination.k8s.io "aws-load-balancer-controller-leader" is forbidden: User "system:serviceaccount:kube-system:aws-load-balancer-controller" cannot get resource "leases" in API group "coordination.k8s.io" in the namespace "kube-system"」
エラーはコントローラーポッドのログに継続的に書き込まれ、他のエラーは存在しません。コントローラーポッドを再起動しても、この問題は解決しません。
注: AWS Load Balancer Controller をバージョン 2.5.x に更新します。また、コントローラーポッドが Active 状態であることを確認してください。
問題を解決するには、次の手順を実行します。
-
aws-load-balancer-controller-role に次のエントリを追加します。
...
...
- apiGroups: ["coordination.k8s.io"]
resources: [leases]
verbs: [get, list, watch, create, patch, update]
-
コントローラーポッドを再起動します。
リソースを追加するには、次のコマンドを実行します。
kubectl edit clusterrole aws-load-balancer-controller-role
デプロイを再起動するには、次のコマンドを実行します。
kubectl rollout restart deployment -n
コントローラーポッドのログに「problem running manager: error leader election lost」というメッセージが表示される
クラスター内で同じコントローラーの複数のインスタンスがアクティブな場合、「problem running manager」というエラーメッセージが表示されます。リーダー選出プロセスにより、いずれかのインスタンスがリーダーのステータスを失いました。複数のインスタンスがアクティブな場合は、いずれかのインスタンスがリーダーステータスを失うことが予想されます。リーダー選出メカニズムにより、単一のインスタンスのみが特定の重要な操作を実行するようになっています。ユーザー側の対応は必要ありません。
選出されたリーダーポッドを常に確保するには、レプリカ数を 2 から 3 などの奇数に変更します。