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

时间:2019-03-27 08:32:21

标签: nginx kubernetes traefik kubernetes-ingress kong

我在本地集群(使用Kubespray创建,运行MetalLB创建LoadBalancer)中安装Ingress控制器时遇到了一些麻烦。

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

我正在使用以下values.yaml安装nginx掌舵图:

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掌舵图的其余部分)时,一切正常,而Ingress正常工作。我还尝试在服务上使用NodePorts或外部IP在没有LoadBalancer的情况下安装nginx / traefik / kong,但是得到的结果是相同的。

有人认识到这种行为吗? 为什么即使我删除了nginx-ingress-controller服务,入口仍能正常工作?

1 个答案:

答案 0 :(得分: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响应,并且流量将路由到该节点。