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

Posted 亦非我所愿丶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kubernetes集群中访问LoadBalancer暴露出去的SLB地址不通相关的知识,希望对你有一定的参考价值。

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通过单独的标签进行部署

以上是关于Kubernetes集群中访问LoadBalancer暴露出去的SLB地址不通的主要内容,如果未能解决你的问题,请参考以下文章

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

大使pod在kubernetes中失败,因为kubernetes api服务器集群IP无法访问 - [Errno 113]主机无法访问',)

当 vault 部署在专用集群上时,如何从另一个 kubernetes 集群访问 vault secret?

关于Kubernetes中如何优雅的访问集群外服务的一些笔记

关于Kubernetes中如何优雅的访问集群外服务的一些笔记

Kubernetes 跨集群流量调度实战 :访问控制