• Ukieweb

    佳的博客

    曾梦想仗剑天涯,后来工作忙没去。

k8s svc的externalTrafficPolicy属性 跨node不通 保留客户端源IP

起因

k8s上面的一个 pod 调用一个  slb 的 service,时通时不通,

现象为:当 pod 调用 svc 的 endpoint 和他同一个 node 就通,不同 node 就超时不通。

后来发现是 svc 的属性 externalTrafficPolicy 设置为 local 引起的

externalTrafficPolicy  查看帮助

这个 属性的目的是 保留 客户单 源 IP 的。详见【官网介绍

[root@tmp opt]# kubectl explain svc.spec.externalTrafficPolicy
KIND:     Service
VERSION:  v1
FIELD:    externalTrafficPolicy <string>
DESCRIPTION:
     externalTrafficPolicy denotes if this Service desires to route external
     traffic to node-local or cluster-wide endpoints. "Local" preserves the
     client source IP and avoids a second hop for LoadBalancer and Nodeport type
     services, but risks potentially imbalanced traffic spreading. "Cluster"
     obscures the client source IP and may cause a second hop to another node,
     but should have good overall load-spreading.

在容器中看到的源IP可能不是客户端的原始源IP。要启用客户端IP保留, 可以在 service 的 spec 中配置下面的字段

service.spec.externalTrafficPolicy 

是否保留源IP

  • cluster :默认  将外部流量路由到 cluster 范围。

当时当外部流量留到 node1 时候,发现 endpoint 在node2 上,那么他会发生第二跳,此时源IP就变成了 node1

  • local:将外部流量仅路由到 node本机的endpoint,而不会被转发到其他节点,本机没有直接丢弃

Local保留了客户端源IP,并避免了LoadBalancer和NodePort类型服务的第二跳,但是弊端也是显而易见的。

service.spec.healthCheckNodePort 

指定服务的运行状况检查的nodePort

  • 默认 healthCheckNodePort 由服务API自动随机创建。

  • 手动指定healthCheckNodePort:则type必须为LoadBalancer且externalTrafficPolicy设置为Local时,它才有效


相关文章:


0
0
下一篇:【装备】牧高笛 冷山系列 冷山3 帐篷 搭建 视频

0 条评论

老佳啊

85后,大专学历,中原人士,家里没矿。

由于年轻时长的比较帅气,导致在别人眼里,我一直不谈恋爱的原因是清高,实则是自己的小自卑。最大的人生目标就是找一个相知相爱相容的人,共度余生。

和人相处时如果能感受到真诚,会非常注重彼此的关系,对别人没有什么心机,即使有利益冲突,一般也会以和为贵,因为在这个世界上,物质的东西,从来不会吸引到我。

特别迷恋那些大山大水,如果现在还能隐居,可能早就去了。对那些宏伟的有底蕴的人文景观比较不感冒。

从事于IT行业,却一直对厨房念念不忘,由于身材魁梧,总觉得自己上辈子是个将军,可惜这辈子没当兵,也不会打架。