Kubernetes集群中访问LoadBalancer暴露出去的SLB地址不通

本文探讨了在Kubernetes中,当Service的externalTrafficPolicy设置为Local时,集群内部节点间访问问题。提供了解决方案,即通过改集群内部路由转发策略,将Service设置为Cluster模式,以及可能遇到的问题和应对措施。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、参考文档

1)阿里云解决方案
https://help.aliyun.com/knowledge_detail/171437.html?spm=5176.2020520152.help.dexternal.3a0e16ddzsTXw2
2)深入了解 Kubernetes 外部流量策略
https://www.asykim.com/blog/deep-dive-into-kubernetes-external-traffic-policies

2、遇见问题

集群名称:clusterName
集群内Node节点 -> skywalking SVC -> skywalking POD -> 访问失败
同一个集群的node访问通过这个集群的 svc,当外部流量策略(externalTrafficPolicy)为Local时,访问异常,请求不会被转发到对应的pod上面

3、解决方案

k8s集群内部访问走集群内部路由转发 规避方案如下:
1)内部请求走clusterip,headless,svcname,外部请求正常走slb
2)更改svc流量策略为cluster,因为会经过多次转发,请求会丢失请求源ip

4、策略配置

1)通过容器服务控制台修改
ack控制台 -> 选择对应集群 -> 左侧导航栏 -> 网络 -> 服务 -> 找到svcname,右侧点击更新,将svc的externalTrafficPolicy类别从Local改为Cluster
在这里插入图片描述

2)直接修改
kubectl edit svc skywalking-oap -n default
externalTrafficPolicy类别从Local改为Cluster
在这里插入图片描述

5、模式说明

当externalTrafficPolicy的类别为Local时: 流量只发给本机的Pod
当externalTrafficPolicy的类别为Cluster时: 流量可以转发到其他节点上的Pod

externalTrafficPolicy表示此服务是否希望将外部流量路由到节点本地或群集范围的端点。“Local”保留了客户端源IP,避免了LoadBalancer和NodePort类型服务的第二跳,但存在潜在的不平衡流量传播风险。“Cluster”隐藏了客户端源IP,可能会导致第二次跳到另一个节点,但总体负载分布应良好。

1)Cluster模式
在这里插入图片描述

2)Local模式
在这里插入图片描述

6、可能会遇见的问题

现象当externalTrafficPolicy的类别为Cluster时,并且pod部署在节点A,请求方也在节点A的时候可能会出现负载均衡的后端节点 不能同时作为客户端和服务端的问题这时候考虑选择用node反亲和性或者pod反亲和性,或者将服务pod通过单独的标签进行部署

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值