当前位置: 首页 > 知识库问答 >
问题:

如何修复Kubernetes入口控制器切断集群节点的问题

司徒经纶
2023-03-14

我在我的本地集群中安装入口控制器时遇到了一些问题(使用Kubes祈祷创建,运行MetalLB创建LoadBalancer。)。

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

我正在使用以下值安装nginx helm图表。yaml:

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-控制器)。此服务属于LoadBalancer类型并获取外部IP。

当分配此外部IP时,链接到此外部IP的节点将丢失(状态未准备好)。但是,当我检查此节点时,它仍在运行,它只是与其他节点断开,它甚至无法ping它们(未找到路由)。当我删除服务(不是nginx helm图表的其余部分)时,一切正常,入口正常工作。我还尝试在服务上使用NodePorts或外部IP在没有LoadBalancer的情况下安装nginx/traefik/Kong,但我得到了相同的结果。

有人认识到这种行为吗?为什么即使我删除了nginx入口控制器服务,入口仍能工作?

共有1个答案

高明辉
2023-03-14

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

正如@A\u 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将路由到此节点。

 类似资料:
  • 我们正在GKE(谷歌kubernetes引擎)上运行一个API服务器。我们使用Google云endpoint和API密钥处理授权。我们将每个API密钥上的某些IP地址列为白名单。为了做到这一点,我们必须将负载平衡器转换为入口控制器,以公开我们的API服务器。IP白名单不适用于loadbalancer服务。现在,我们有一个类似以下内容的入口设置:

  • 上节课我们和大家学习了怎样用 Promethues 来监控 Kubernetes 集群中的应用,但是对于 Kubernetes 集群本身的监控也是非常重要的,我们需要时时刻刻了解集群的运行状态。 对于集群的监控一般我们需要考虑以下几个方面: Kubernetes 节点的监控:比如节点的 cpu、load、disk、memory 等指标 内部系统组件的状态:比如 kube-scheduler、kub

  • 我不知道如何在Kubernetes集群(不是minikube)上设置入口控制器。我遵循的每一个nginx入口设置都产生了一个错误,控制器设置不正确。基本上,我想要一个与minikube插件等效的命令来启用入口。谢谢 编辑1- 我正在遵循中提到的安装步骤https://kubernetes.github.io/ingress-nginx/deploy/我已经尝试了baremetal、cloud和其他

  • 我在Hetzner Cloud上安装了一个带有“kubeadm”的库伯内特斯集群。 安装成功后,我安装了带有Helm的入口控制器。 入口控制器服务的EXTERNAL-IP处于挂起状态。默认类型是LoadBalancer,据我所知,只有AWS、Google等云提供商才支持这种类型。。。 所以我将服务类型更改为NodePort。 我应该如何将外部DNS配置到我的服务? 我不想附加3。。。。端口,但让入

  • 我正在云中的AWS EKS服务上运行我的工作负载。我可以看到没有默认的入口控制器可用(因为它可用于GKE),我们必须选择第三方。 我决定使用Traefik。在跟踪文档和其他资源(像这样)之后,我觉得使用Traefik作为IngresController不会自动在云中创建LoadBalancer。我们必须手动完成它来设置所有内容。 如何使用Traefik作为Kubernetes入口,就像其他入口控制

  • 我有一个运行在minikube(已启用加载项)中的nginx ingress,它有几个吊舱和服务,ingress具有以下配置: 当我在集群之外时,以下各项工作正常: 但是,当我在集群内时,我希望容器能够使用我的入口模板中列出的主机名相互通信。例如,我希望以下方法可以工作,但事实并非如此: 相反,它返回实际api的结果。信息网站,我没有隶属关系。首先,有人能确认这是可行的吗? 非常感谢。