我已经设置了ingress nginx-Hem图表来在集群上设置ingress控制器,但默认情况下它只运行一个pod实例。
由于我们在Digital Ocean的k8s集群上运行,我们使用externalTrafficPolicy: Local
运行,以允许证书管理器在内部访问其他pod,因此我们的请求网络跳数更少。
为了提高弹性,我们已将后端服务配置为至少在2个节点上运行,因此,我们在每个节点上都有入口控制器,这些控制器上运行有一个后端pod,以避免不必要的节点间流量。
我们将如何配置入口控制器设置,以确保在后端pod运行的每个节点上都有一个控制器pod?
如果要在每个节点上运行POD,可以使用守护程序集。
精灵套装:https://github.com/nginxinc/kubernetes-ingress/blob/master/deployments/helm-chart/templates/controller-daemonset.yaml
现在,如果你想确保Nginx入口控制器POD只在运行后端服务的节点上运行,你可以使用亲和性和反亲和性。
亲和性示例:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: role
operator: In
values:
- app-1
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: component
operator: In
values:
- nginx-ms
topologyKey: "kubernetes.io/1-hostname"
您可以在以下位置阅读更多内容并找到示例:https://github.com/infracloudio/kubernetes-scheduling-examples/blob/master/podAffinity/README.md