暴露端口

spec:
clusterIP: 10.11.0.180
ports:
- port: 80
protocol: TCP
targetPort: 80

name

nodePort
节点上启用的端口
type=NodePort or LoadBalancer

port -required-
svc 发布的端口

targetPort
pod 端口

protocol
TCP(默认)
UDP

外部流量策略

spec:
externalTrafficPolicy: Local

对于 NodePort ,通过 nodeIP:Port 访问, 节点上并没有对应的 Pod,需要额外的网络跳转才能到达其他节点上 Pod,在跳转过程中由于对数据包进行了 SNAT,所以看到的是 node 的 IP
image.png
默认 Cluster, 访问此 svc 的轮询后面 pod ,隐藏客户端 ip
client -> 192.168.80.201:30080 pod 的 客户端ip 为 node01 上的 隧道 ip
client -> 192.168.80.202:30080 pod 的 客户端ip 为 192.168.80.202

设为 Local ,只会代理到本地运行的 Pod,如果本地没有连接失败,需要确保负载均衡器将连接转发给至少具有一个 Pod 的 node
image.png
client -> 192.168.80.201:30080 pod 的 客户端ip 为 192.168.80.111
client -> 192.168.80.202:30080 失败,ipvs 没有 pod 的指向

seesion亲和

spec:
sessionAffinity:
sessionAffinityConfig.clientIP.timeoutSeconds:

sessionAffinity
ClientIP
None 默认
sessionAffinityConfig.clientIP.timeoutSeconds
设置最大会话停留时间
默认值为 10800 秒,即 3 小时