我目前正在尝试在我的AWS eks集群上部署NGINX Ingress Controller。我有4个节点在运行:
NAME STATUS ROLES AGE VERSION
ip-10-230-35-48.ec2.internal Ready <none> 7h44m v1.19.6-eks-49a6c0
ip-10-230-39-9.ec2.internal Ready <none> 7h42m v1.19.6-eks-49a6c0
ip-10-230-42-241.ec2.internal Ready <none> 7h49m v1.19.6-eks-49a6c0
ip-10-230-49-228.ec2.internal Ready <none> 7h46m v1.19.6-eks-49a6c0我正在使用NGINX Ingress Controller Installation guide和deploy-tls-termination.yaml部署我的ingress-nginx-controller
由于某些原因,亚马逊网络服务ELB没有将所有节点标记为健康状态,并给出了以下错误:
Instance has failed at least the UnhealthyThreshold number of health checks consecutively.唯一标记为健康的节点是部署ingress-nginx-controller的节点。

我的yaml配置文件中是否遗漏了什么?或者我应该为每个Availibity Zone部署一个ingress-nginx-controller?如果是这样的话,是怎么做的?
谢谢
发布于 2021-03-17 03:24:40
实际上是根据入口控制器和ELB的实现。ELB是运行入口控制器pod唯一被识别的节点。其余的节点是OutOfService。如果入口控制器pod将被移至另一个节点,则ELB会将该节点识别为InService实例。您可以通过删除控制器pod进行尝试。
建议将NLB或ALB负载均衡器与入口控制器一起使用。从k8s 1.18版本开始,NLB将默认用于入口负载均衡器。尝试使用此tutorial更改负载均衡器类型。
发布于 2021-03-17 09:49:15
当服务中的externalTrafficPolicy设置为Local时,这是预期的行为(这就是您所拥有的)。使用externalTrafficPolicy: Local,您不会获得任何额外的跳数--一旦流量到达节点,它就不会离开节点。负载均衡器将仅将流量发送到正在运行入口控制器pod的节点。在其他节点上,健康检查将返回503,并将被视为不健康。
如果希望所有节点都正常运行,请将externalTrafficPolicy更改为Cluster。
通常不建议这样做,因为这样做不会将客户端的IP地址传播到end Pod。但这只适用于NLB,而不适用于Classic Elastic负载均衡器。所以,最好使用NLB和nginx入口控制器。如果您仍然希望所有节点都处于健康状态,请坚持使用Local策略&使用守护进程集。
官方documentation对此进行了讨论。
https://stackoverflow.com/questions/66648243
复制相似问题