ingress 在K8S集群外访问报404错误
因此如果K8S集群外想要访问到集群内的应用,就需要把URL中的host字段传过来,但是在使用nginx配置时,如果没有特别设置,在进行负载或是反向代理时,会把源IP或是源请求中的host字段屏蔽掉,导致访问失败,匹配不到对应的host。ingress在配置时,使用了通过监听K8S集群内节点指定端口的域名访问,将匹配的域名转发到对应的service,然后实现正常的访问。理解了原理,那么接下来就简单了
·
ingress 在K8S集群外访问报404错误
一、环境
1、ingress-nginx已经安装好,并且通过修改访问电脑的hosts配置是可以正常访问ingress的。
2、K8S集群外使用nginx 作为负载。
3、本文所使用环境配置皆为测试环境,是研究ingress入门使用。
二、具体配置
1、原理
ingress在配置时,使用了通过监听K8S集群内节点指定端口的域名访问,将匹配的域名转发到对应的service,然后实现正常的访问。下图中的的ingress对象配置host即为匹配的域名。
因此如果K8S集群外想要访问到集群内的应用,就需要把URL中的host字段传过来,但是在使用nginx配置时,如果没有特别设置,在进行负载或是反向代理时,会把源IP或是源请求中的host字段屏蔽掉,导致访问失败,匹配不到对应的host
2、解决办法
理解了原理,那么接下来就简单了,只要将源IP和host原封不动的转发到后端就行,因此在nginx配置中加上两个参数就行
proxy_set_header Host $http_host;
proxy_set_header X-Forward-For $remote_addr;
具体位置在server模块中
另外出于安全考虑,也可以不配置这个:proxy_set_header X-Forward-For $remote_addr; 不转发源IP,因为ingress只需要Host就行。
更多推荐
已为社区贡献1条内容
所有评论(0)