K8S svc暴露的服务内部调用方法
k8s集群访问内部业务暴露的域名和端口
现象:在Kubernetes集群内业务是通过ClusterIP或者服务名访问。k8s 的ingress nginx controller存在缺陷,只有Ingress的Pod所在节点上,Pod才能访问通过Ingress或SLB暴露出去的服务。如果要访问集群暴露的服务,需要调整,适用于业务配置文件里配了域名和端口的情况。
针对阿里云的ACK集群处理方法:若是SVC为Load Balancer,修改svc为Cluster类型,集群会进行SNAT,Ingress的Pod不在的节点上也可以访问Ingress或SLB暴露出去的服务,后端应用无法获取客户端真实IP地址。

K8S原理说明
Flannel网络插件下,流量经由节点的NodePort转发到Pod中。
Local:流量只转发给本机的Pod。
Cluster:流量可以转发到集群中其他节点上的Pod。

Local和Cluster两种外部流量策略详细的区别如下表所示。
比较项 | Local | Cluster |
负载均衡后端挂载行为 | 仅Pod所在的节点会挂载到负载均衡后端。 | 所有集群内的节点都将挂载到负载均衡后端。 |
负载均衡配额 | 负载均衡配额消耗较少。关于负载均衡配额的详细介绍,请参见配额限制。 | 由于集群内所有节点都挂载到负载均衡后端,因此会大量消耗负载均衡配额。关于负载均衡配额的详细介绍,请参见配额限制。 |
访问负载均衡地址 | 仅Pod所在节点可以访问负载均衡地址。 | 集群内任意节点均可访问负载均衡地址。 |
Pod负载均衡 | 默认Pod之间负载不均衡。 如果您想要实现Pod之间负载均衡,需要指定策略为wrr,即为Service添加service.beta.kubernetes.io/alibaba-cloud-loadbalancer-scheduler:"wrr" annotation。 | 默认Pod之间负载均衡。 |
保留来源IP | 支持。 | 不支持。 |
会话保持 | 支持。 | 不支持。 |
Terway-Eniip网络插件
Terway-Eniip网络插件下,无论是Local和Cluster,流量直接转发到Pod中。

Local和Cluster两种外部流量策略详细的区别如下表所示。
比较项 | Local | Cluster |
负载均衡后端挂载行为 | Pod直接挂载到负载均衡后端。 | |
负载均衡配额 | 仅挂载业务Pod,负载均衡配额消耗较少。关于负载均衡配额的详细介绍,请参见配额限制。 | |
访问负载均衡地址 | 仅Pod所在节点可以访问负载均衡地址。 | 集群内任意节点均可访问负载均衡地址。 |
Pod负载均衡 | 默认Pod之间负载均衡。 | |
保留来源IP | 支持。 | |
会话保持 | 支持。 |
更多推荐
所有评论(0)