【发布时间】:2020-05-20 20:37:47
【问题描述】:
对于 NodePort 服务如何路由流量,似乎有两种相互矛盾的解释。服务可以将流量路由到两者之一,而不是两者:
-
节点(通过 kube-proxy) 根据
kubectl explain Service.spec.externalTrafficPolicy和 this article 添加更多详细信息,传入带有Service.spec.externalTrafficPolicy=Local设置的 NodePort 服务的数据包被路由到 kube-proxy,然后路由将数据包发送到其运行的相应 pod。- kube-proxy networking documentation 进一步支持这一理论,即端点在服务的 IPtable 中添加一条规则,通过 kube-proxy 将流量转发到节点。
-
Pods:服务从
endpoints更新其 IPtables,其中包含它们可以路由到的 pods 的 IP 地址。此外,如果您删除服务的标签选择器和 edit endpoints,您可以更改流量路由到的位置。
如果其中一个是正确的,那么我一定是误会了。
- 如果服务路由到节点,那么为什么我可以编辑
endpoints而不会破坏IPtables? - 如果服务路由到pods,那么为什么设置
Service.spec.externalTrafficPolicy时服务会遇到路由到节点的麻烦?
【问题讨论】:
标签: kubernetes kubernetes-service