一 、 两种外部流量策略的说明
K8s的网络都是通过service进行监听,转发到对应的 deployment 或者statefulSet ,
但service中有2种网络模式,会影响到ip的获取。
在页面种配置网络服务时有一个外部流量策略:有2种选项,【Cluster】 和 【Local】
在yaml 中类似下面这样。
externalTrafficPolicy: Cluster
在页面是这样的
以下是我测试出的两种网络模式的特性
Cluster 特性(nodePort网络 和 clb均如下):
1.可以转发到别的机器下。
2.获取client_ip 拿不到公网ip,会拿到转发主机的内网ip,如果没有转发则会获取到主网卡的ip
例如 1.1.1.1 1.1.1.2 1.1.1.3 为三台机器的私网ip
3.3.3.1 3.3.3.2 3.3.3.3是三台机器的公网ip
, 2.2.2.2 是 1.1.1.2 的主网卡ip ,
节点pod在 1.1.1.2 上,则从 第一台 和第三台 的机器访问会获取到1.1.1.1 和 1.1.1.3
而在第二台机器访问会获取到2.2.2.2
Local 特性
Nodeport网络模式:
1.不可以转发到别的机器下(换句话说如果要使用此模式需要配置负载只部署在对应的机器下,少量负载可以这么玩,大量负载会出大问题)。
2.能够正常拿到client_ip了。
Clb模式:
1.不管pod在哪台机器上生成都可以正常访问。
2.能够正常拿到client_ip了。
二、测试获取server_ip 的结论
Server_ip 会获取到对应的pod的ip(也就是对应docker 容器的ip),并且在同一个页面反复刷新一段时间内 pod ip不变,。