我的 AWS 负载均衡器控制器容器组 (pod) 出现故障,且我在 Amazon Elastic Kubernetes Service (Amazon EKS) 中收到“Forbidden”(禁止访问)错误。或者,我在负载均衡器控制器容器组 (pod) 日志中收到“problem running manager: error leader election lost”(运行管理器时出现问题:领导者选举失败错误)错误。
解决方法
当 AWS 负载均衡器控制器容器组 (pod) 出现故障时,您会收到“Forbidden”(禁止访问)错误
当 Amazon EKS 集群角色 aws-load-balancer-controller-role 无权从 coordination.k8s.io apiGroups 租用资源时,将会出现 Forbidden(禁止访问)错误。新的入站资源未按预期运行,且对现有入口资源的修改未生效。
您会收到以下错误:
“E0830 08:37:41.717952 1 leaderelection.go:330] 检索资源锁 kube-system/aws-load-balancer-controller-leader 时出错:leases.coordination.k8s.io "aws-load-balancer-controller-leader" 被禁止访问: 用户 "system:serviceaccount:kube-system:aws-load-balancer-controller" 无法在命名空间 "kube-system" 的 API 组 "coordination.k8s.io" 中获取资源 "leases"”
此错误持续写入控制器容器组 (pod) 日志中,且不存在其他错误。重启控制器容器组 (pod) 并不能解决问题。
**注意:**请将 AWS 负载均衡器控制器更新到版本 2.5.x。此外,请确保控制器容器组 (pod) 处于 Active(活动)状态。
要解决此问题,请完成以下步骤:
-
将以下条目添加到 aws-load-balancer-controller-role 中:
...
...
- apiGroups: ["coordination.k8s.io"]
resources: [leases]
verbs: [get, list, watch, create, patch, update]
-
重启控制器容器组 (pod)。
要添加资源,请运行以下命令:
kubectl edit clusterrole aws-load-balancer-controller-role
要重启部署,请运行以下命令:
kubectl rollout restart deployment -n
您在控制器容器组 (pod) 日志中收到“problem running manager: error leader election lost”(运行管理器时出现问题:领导者选举失败错误)
当集群中同一控制器的多个实例处于活动状态时,您会收到 problem running manager(运行管理器时出现问题)错误消息。领导者选举流程确定其中一个实例失去了其领导者状态。当多个实例处于活动状态时,预期会有一个实例失去其领导者状态。领导者选举机制可确保只有一个实例执行特定的关键操作。您无需采取操作。
要确保始终有一个选定的领导者容器组 (pod),请将副本数从 2 更改为 3 或其他奇数。