我使用以下链接安装了入口控制器: https://cloud.google.com/community/tutorials/nginx-ingress-gke
已启动并正在运行
NAME TYPE CLUSTER-I EXTERNAL-IP PORT(S)
nginx-ingress-controller LoadBalancer X.X.X.X X.X.X.X1 80:123 / TCP,443:456 / TCP
之后我安装了应用程序并将其暴露为nodePort,bot app up并运行。
入口规则的定义如附件中所述:
我非常喜欢inginx-controller pod并测试以下内容:
测试:1
输入:curl localhost
输出:默认后端 - 404
测试:2
输入:curl localhost -H'Host:foo.com'
输出:app正常工作
测试:3
输入:curl localhost -H'主持人:faa.com'
输出:app正常工作
测试:浏览器Chrome上的4
输入:foo.com
输入:faa.com
输出:默认后端 - 404
我无法弄清楚我在哪里重新检查
请支持我。
答案 0 :(得分:0)
查看您的YAML文件后,我发现您在Ingress服务中没有“默认后端”。 “默认后端”将定义如果页面导致错误404时要采取的规则。
“默认后端”与backend
下的path
不同。
默认后端必须在spec
下。
有关默认后端的更多信息,您可以阅读k8s documentation
这是在YAML文件中定义默认后端的方法。
spec:
backend:
出于相同的原因,它无法在chrome浏览器上运行。没有“默认后端”。
答案 1 :(得分:0)
我知道已经晚了,但是有人可能也有类似的情况。
就我而言,下一个问题是
执行curl命令时:
curl http://<ip-address>:<k8s-svc-port> -H 'Host:foo.com'
HTTP请求类似于:
GET / HTTP/1.1
Host: foo.com
User-Agent: curl/7.64.0
Accept: */*
在浏览器中执行时,http请求如下所示: firefox http request example
Host: foo.com:32009
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
...
这就是区别,因为haproxy入口控制器将查找http请求的主机字段。在这种情况下,
-curl设置标头 Host:foo.com
-浏览器设置标头 Host:foo.com:32009 ,而haproxy无法识别该标头
(haproxy期望 foo.com 并获得 foo.com:32009 )
因此,入口控制器工作正常,这是浏览器的http请求造成了问题。
我希望这会有所帮助。