是否需要使用DaemonSet部署Ingress Controller?

Is it necessary to deploy the Ingress Controller using DaemonSet?

这是我目前的解决方案:

带云的 LoadBalancer 实例 -> 集群 NodePort 服务 -> 入口控制器服务 -> 入口控制器 Pod。

是否有必要使用DaemonSet部署Ingress Controller?

在一个相当大的集群中,部署 ingress 作为具有多个副本的部署比 daemonset 更合适。当您使用部署时,只需确保副本部署在不同 nodes.You 不需要大量 NGINX 实例来处理大量流量,最重要的是,您需要记住每个实例入口控制器需要到达 kubernetes API 服务器。这意味着如果你有很多副本,你就会施加(不必要的)压力。在大多数情况下,使用具有反亲和性规则的部署来避免同一节点中的多个副本就足够了

根据我的经验,Deamonset 更适合入口控制器而不是部署。我们最近遇到一个问题,入口控制器通过部署 运行 并且其中一个节点没有分配此 pod。由于同样的原因,该节点在负载均衡器目标组健康检查中被列为“不健康”。

即使是 Nginx 也推荐 Daemonset,尽管适当管理的部署也能完成同样的工作。

A DaemonSet schedules exactly one type of Pod per cluster node, masters included unless a node is configured to repel those Pods.

https://kubernetes.github.io/ingress-nginx/deploy/baremetal/

您可能需要添加污点和容忍度以从守护进程中排除主节点,因为只有工作节点需要此 pod 运行。