Kubernetes Service 只转发到当前 Node 上的 Pod - NodeSelector 和 NodeAffinity 使用指南
在 Kubernetes 中,可以使用 NodeSelector 和 NodeAffinity 来指定 Service 只转发到当前 Node 上的 Pod。\n\n1. 使用 NodeSelector:\n - 创建一个带有 nodeSelector 字段的 Service,该字段指定了 Pod 必须在具有特定标签的 Node 上运行。\n - 在 Pod 的定义中,为 Pod 添加与 Service 中指定的标签相匹配的标签。\n\n 示例 Service 定义:\n yaml\n apiVersion: v1\n kind: Service\n metadata:\n name: my-service\n spec:\n selector:\n app: my-app\n ports:\n - protocol: TCP\n port: 80\n targetPort: 8080\n type: ClusterIP\n externalTrafficPolicy: Local\n nodeSelector:\n my-label-key: my-label-value\n \n\n 示例 Pod 定义:\n yaml\n apiVersion: v1\n kind: Pod\n metadata:\n name: my-pod\n labels:\n app: my-app\n my-label-key: my-label-value\n spec:\n containers:\n - name: my-container\n image: nginx\n \n\n 通过以上配置,Service 将只会将流量转发到带有 my-label-key=my-label-value 标签的 Node 上的 Pod。\n\n2. 使用 NodeAffinity:\n - 创建一个带有 nodeAffinity 字段的 Service,该字段使用 Node 亲和性规则来指定 Pod 必须在满足指定条件的 Node 上运行。\n - 在 Pod 的定义中,为 Pod 添加与 Service 中指定的亲和性规则相匹配的规则。\n\n 示例 Service 定义:\n yaml\n apiVersion: v1\n kind: Service\n metadata:\n name: my-service\n spec:\n selector:\n app: my-app\n ports:\n - protocol: TCP\n port: 80\n targetPort: 8080\n type: ClusterIP\n externalTrafficPolicy: Local\n nodeAffinity:\n requiredDuringSchedulingIgnoredDuringExecution:\n nodeSelectorTerms:\n - matchExpressions:\n - key: my-label-key\n operator: In\n values:\n - my-label-value\n \n\n 示例 Pod 定义:\n yaml\n apiVersion: v1\n kind: Pod\n metadata:\n name: my-pod\n labels:\n app: my-app\n spec:\n affinity:\n nodeAffinity:\n requiredDuringSchedulingIgnoredDuringExecution:\n nodeSelectorTerms:\n - matchExpressions:\n - key: my-label-key\n operator: In\n values:\n - my-label-value\n containers:\n - name: my-container\n image: nginx\n \n\n 通过以上配置,Service 将只会将流量转发到满足 my-label-key=my-label-value 的 Pod 所在的 Node 上。
原文地址: https://www.cveoy.top/t/topic/ptbl 著作权归作者所有。请勿转载和采集!