出于测试目的,我在同一台机器上部署了两个版本的应用程序。在生产中,只有一个应用程序实例在一个云Kubernetes集群中运行,并使用ingress-nginx控制器公开其API。
我使用kind在本地运行Kubernetes集群,并将应用程序版本部署到两个不同的命名空间中。我根据种类和ingress nginx多控制器文档配置ingress控制器。我的应用程序的第一个实例按预期工作,但当我部署第二个实例时,控制器pod无法启动,并显示以下消息:
0/6 nodes are available: 1 node(s) didn't have free ports for the requested pod ports, 5 node(s) didn't match Pod's node affinity/selector
据我所知,两个入口控制器pod被安排在同一个节点上,不能共享同一个端口。请建议如何进一步操作。是否应该将第二个控制器吊舱调度到不同的节点?由于种类将节点端口映射到主机,是否可以将多个节点的相同端口映射到该主机?
不确定这是否能满足您的用例,但您可以将nginx入口控制器的范围限定为一个命名空间:https://github.com/kubernetes/ingress-nginx/blob/main/charts/ingress-nginx/values.yaml#L150
通过这种方式,您可以在不同的名称空间中拥有多个nginx控制器,它们不会发生冲突。看起来您还可以让它们通过选择器而不仅仅是自己的选择器来监视特定的命名空间。
我在用我的同类集群安装ingress时也遇到了同样的问题。为我的控制平面节点添加标签解决了这个问题。您可以尝试:kubectl label nodes <name of your control plane node> ingress-ready=true