我创建了一个 k8s 服务(type=loadbalancer),后面有许多 pod。据我了解,从 Pod 发起的所有数据包都将源 ip 作为 PodIP,而那些响应入站流量的数据包将源 ip 作为 LoadBalancer IP。所以我的问题是:
- 我的说法是真的,还是有时源 IP 将是节点 IP?
- k8s有什么技巧可以把第一个场景的源IP从PodIP改成LB IP??
- 有什么方法可以指定指定的 pod IP?
我创建了一个 k8s 服务(type=loadbalancer),后面有许多 pod。据我了解,从 Pod 发起的所有数据包都将源 ip 作为 PodIP,而那些响应入站流量的数据包将源 ip 作为 LoadBalancer IP。所以我的问题是:
Pod 运行在内部网络中,而负载均衡器暴露在 Internet 上,因此数据包的地址或多或少如下所示:
[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 负载均衡器向 Internet 公开服务。
通过 Azure 容器服务部署的 Kubernetes 架构图:
我的说法是真的,还是有时源 IP 将是节点 IP?
如果我们将服务公开到互联网,我认为源 IP 将是负载均衡器的公共 IP 地址。在 ACS 中,如果我们向 Internet 公开多个服务,Azure LB 将添加多个公共 IP 地址。
k8s有什么技巧可以把第一个场景的源IP从PodIP改成LB IP??
您的意思是要使用节点公共 IP 地址将服务公开到互联网吗?如果是,我认为我们不能使用节点 IP 将服务公开给互联网。在 Azure 中,我们必须使用 LB 将服务公开到 Internet。