NodePort类型的服务默认执行源地址,这意味着从Nginx的角度来看,HTTP请求的源IP始终是接受请求的Kubernetes节点的IP地址。
在NodePort设置中保留源IP的推荐方法是将ingress-nginx服务规范的externalTraffixPolicy字段设置为Local。
警告:此设置有效地丢弃发送到未运行任何NGINX Ingress控制器实例的Kubernetes节点的数据包。考虑将NGINX Pod分配给特定节点,以控制NGINX Ingress控制器应该在哪些节点上被调度或不被调度。
(我对这个配置的理解是这样的:externalTraffixPolicy设置为Local后,请求到了某个节点,这个节点上的LVPS就会将数据包路由到本机的POD上,所以,如果本机没有运行POD,则将会丢弃这个POD。从这个角度来看,我似乎不需要这个技术)
生产中可能存在的问题
可能我们是需要记录源IP地址的,在这个问题下该如何处理呢?生产中IngressService的类型肯定不是NodePort,而负载均衡器方面的细节我还不是太了解,需要再继续研究下。即使是使用了NodePort,我觉得我们还是可以Http头中带一些信息过来,应该不是太严重,这个问题。