出站数据包上的 Kubernetes 网络

Kubernetes Networking on Outbound Packet

我创建了一个k8s服务(type=loadbalancer),后面有pods个数。据我了解,从 pods 发起的所有数据包都将源 IP 作为 PodIP,而那些响应入站流量的数据包将把源 IP 作为 LoadBalancer IP。所以我的问题是:

  1. 我的说法是正确的,还是有时源 IP 将是节点 IP?
  2. k8s有什么技巧可以把第一个场景的源IP从PodIP改成LB IP吗??
  3. 有什么方法可以指定指定的 pod IP??

Pods在内部网络中运行,而负载均衡器暴露在互联网上,因此数据包的地址大致如下所示:

  [pod1]    <----->       [load balancer]           <----->    [browser]
10.1.0.123           10.1.0.234    201.123.41.53              217.123.41.53

要指定 pod IP,请查看 SessionAffinity

正如 user315902 所说,Azure ACS k8s 通过 Azure 负载均衡器将服务暴露给互联网。

通过Azure容器服务部署的Kubernetes架构图:

Is my claim true, or there are times the source IP will be the node IP instead?

如果我们将服务公开到互联网,我认为源 IP 将是负载均衡器 public IP 地址。在 ACS 中,如果我们向 Internet 公开多个服务,Azure LB 将添加多个 public IP 地址。

Are there any tricks in k8s, which I can change the source IP in the first scenario from PodIP to LB IP??

您是说要使用节点 public IP 地址将服务公开到互联网吗?如果是,我认为我们不能使用节点 IP 向互联网公开服务。在 Azure 中,我们必须使用 LB 将服务公开到互联网。