现象:在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

支持。

会话保持

支持。

点击阅读全文
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐