微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在具有多个节点的 EKS 集群中部署 Ingress Nginx 控制器 ELB

如何解决在具有多个节点的 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 的节点。

enter image description here

我的 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 举报,一经查实,本站将立刻删除。