【问题标题】:Kubernetes LoadBalancer type service's external IP is unreachable from pods within the cluster when externalTrafficPolicy is set to Local in GCE当在 GCE 中将 externalTrafficPolicy 设置为 Local 时,Kubernetes LoadBalancer 类型的服务外部 IP 无法从集群内的 pod 访问
【发布时间】:2021-04-12 18:43:08
【问题描述】:

外部 IP 完全可以从集群外部访问。集群内的所有节点都可以完全访问它。但是,当我尝试从集群中的 pod 远程登录到 URL 时,该 pod 与作为服务后端一部分的 pod 不在同一节点上,连接总是超时。

外部 IP 可由与作为服务后端一部分的 pod 在同一节点上运行的 pod 访问。

所有 pod 都可以完美到达服务的集群 IP。

当我将 externalTrafficPolicy 设置为 Cluster 时,Pod 能够访问外部 URL,无论它们位于哪个节点上。

我正在使用 iptables 代理和 kubernetes 1.16

我完全不知道为什么会这样。有人能对此有所了解吗?

【问题讨论】:

  • 这与GKE无关,是配置问题,您目前有任何网络策略设置吗?我假设您正在尝试从 pod 内部访问外部 IP,这不起作用,但从节点工作,如果我误解了,请纠正我。?
  • 是的。除了自动创建的防火墙(由 k8s 创建)之外,我没有任何其他网络策略。

标签: kubernetes google-kubernetes-engine kubernetes-service gke-networking


【解决方案1】:

来自官方文档here

service.spec.externalTrafficPolicy - 表示此服务是否希望将外部流量路由到节点本地或集群范围的端点。有两个可用选项:集群(默认)和本地。集群掩盖了客户端源 IP,可能会导致第二次跳转到另一个节点,但应该具有良好的整体负载分布。 Local 保留客户端源 IP 并避免 LoadBalancer 和 NodePort 类型服务的第二个跃点,但可能存在流量传播不平衡的风险。

服务可以是 node-localcluster-wide 端点。当您将externalTrafficPolicy 定义为Local 时,它表示节点本地。因此,其他节点无法到达。

因此,您需要将externalTrafficPolicy 设置为Cluster

【讨论】:

    猜你喜欢
    • 2018-04-30
    • 2021-03-21
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 2021-06-19
    • 1970-01-01
    • 2020-09-10
    • 2019-03-19
    相关资源
    最近更新 更多