如何修复Kubernetes Ingress Controller切断集群中的节点

问题描述 投票:0回答:1

我在我的本地群集中安装Ingress Controller时遇到了一些问题(使用Kubespray创建,运行MetalLB来创建LoadBalancer。)。

我尝试使用nginx,traefik和kong,但都得到了相同的结果。

我正在使用以下values.yaml安装我的nginx helm图表:

controller:
  kind: DaemonSet
  nodeSelector:
    node-role.kubernetes.io/master: ""
  image:
    tag: 0.23.0
rbac:
  create: true

用命令:

helm install --name nginx stable/nginx-ingress --values values.yaml --namespace ingress-nginx

当我在集群中部署入口控制器时,会创建一个服务(例如nginx的nginx-ingress-controller)。此服务属于LoadBalancer类型并获取外部IP。

分配此外部IP后,链接到此外部IP的节点将丢失(状态未就绪)。但是,当我检查这个节点时,它仍在运行,它只是从其他节点切断,它甚至无法ping它们(找不到路由)。当我删除服务(而不是nginx helm图表的其余部分)时,一切正常并且Ingress正常工作。我还尝试在服务上使用NodePorts或外部IP安装nginx / traefik / kong而没有LoadBalancer,但我得到了相同的结果。

有没有人认识到这种行为?为什么入口仍然有效,即使我删除了nginx-ingress-controller服务?

nginx kubernetes traefik kubernetes-ingress kong
1个回答
1
投票

经过长时间的搜索,我们终于找到了解决这个问题的有效方法。

正如@A_Suh所提到的,metallb使用的IP池应该包含当前集群中某个节点未使用的IP。通过添加也在DHCP服务器中配置的新IP范围,metallb可以使用ARP将其中一个IP链接到其中一个节点。

例如,在我的5节点集群(kube11-15)中:当metallb获得10.4.5.200/31的范围并为我的nginx-ingress-controller分配10.4.5.200时,10.4.5.200链接到kube12。在10.4.5.200的ARP请求中,所有5个节点都响应kube12,并且trafic将路由到此节点。

© www.soinside.com 2019 - 2024. All rights reserved.