【发布时间】:2019-03-27 08:32:20
【问题描述】:
我在我的本地集群(使用 Kubespray 创建,运行 MetalLB 以创建 LoadBalancer)中安装 Ingress Controller 时遇到了一些问题。
我尝试使用 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 正常工作。我还尝试在没有 LoadBalancer 的情况下使用 NodePorts 或服务上的外部 IP 安装 nginx/traefik/kong,但我得到了相同的结果。
有人认识这种行为吗? 为什么即使我删除了 nginx-ingress-controller 服务,入口仍然有效?
【问题讨论】:
-
您能否详细说明一下 - “链接到此外部 IP 的节点已丢失”您的意思是,该节点和入口服务试图分配相同的公共 IP?
-
嗨@A_Suh,感谢您的回复!服务的外部 IP 是我集群中 5 个节点之一的 IP。我们称该节点为 X。当服务创建并获得外部 IP 时,X 的状态为“未就绪”。但是,X 并没有关闭,因为我仍然可以登录它并且 kubelet 仍在运行。服务安装在我的集群中的那一刻,X 无法再访问主节点,因此它的运行状况 ping 无法再到达主节点。当我从 X ping 到主节点(或任何其他节点)时,我得到“目标主机无法访问”。
-
这很奇怪,您的 DHCP 服务器正在为已分配给节点的服务分配 IP。您会尝试手动为您的入口服务设置静态 IP 地址吗?即
apiVersion: v1 kind: Service spec: type: LoadBalancer loadBalancerIP: 10.10.10.10 -
哦,你是对的,对于 MetalLB,你必须提供节点的 IP 地址。你设法解决了这个问题吗?
-
嗨@A_Suh,我刚刚设法解决了这个问题。事实证明你是对的,我确实需要指定集群外部的 IP 来解决这个问题。起初这不起作用的原因是因为我的网络中没有配置 DHCP。感谢您的帮助!
标签: nginx kubernetes traefik kubernetes-ingress kong