如何解决在具有多个节点的 EKS 集群中部署 Ingress Nginx 控制器 ELB
我目前正在尝试在我的 AWS eks 集群上部署 Nginx 入口控制器。 我有 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 部署我的 ingress-Nginx-controller
并使用 deploy-tls-termination.yaml
出于某些原因,AWS ELB
没有将所有节点都标记为健康并给出以下错误:
Instance has Failed at least the UnhealthyThreshold number of health checks consecutively.
唯一标记为健康的节点是部署 ingress-Nginx-controller
的节点。
我的 yaml 配置文件中是否缺少某些内容?或者我应该为每个 ingress-Nginx-controller
部署一个 Availibity Zone
?如果是这样,如何?
谢谢
解决方法
其实是根据入口控制器和ELB的实现。 ELB 仅识别运行入口控制器 pod 的节点。其余节点为 OutOfService。如果入口控制器 pod 将被移除到另一个节点,则 ELB 将此节点识别为 InService 实例。您可以通过删除控制器 Pod 来尝试此操作。
建议使用带有入口控制器的 NLB 或 ALB 负载均衡器。 从 k8s NLB 1.18 版开始,入口负载均衡器将默认使用。 试试这个 tutorial 以更改负载均衡器类型。
,这是在服务中将 externalTrafficPolicy
设置为 Local
时的预期行为(这就是您所拥有的)。使用 externalTrafficPolicy: Local
,您不会获得任何额外的跃点 - 一旦流量到达节点,它就不会离开节点。
负载均衡器只会将流量发送到运行入口控制器 pod 的节点。在其他节点上,健康检查将返回 503,并将被视为不健康。
如果您希望所有节点都健康,请将 externalTrafficPolicy
更改为 Cluster
。
通常不建议这样做,因为这样做不会将客户端的 IP 地址传播到终端 Pod。但这仅适用于 NLB,而不适用于 Classic Elastic Load Balancer。因此,最好将 NLB 与 nginx 入口控制器一起使用。如果您仍然希望所有节点都运行良好,请坚持使用本地策略并使用守护进程集。
官方 documentation。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。