如果没有明确设置主机 header,Kubernetes HAProxy Ingress 将无法工作
Kubernetes HAProxy Ingress doesn't work without explicitly setting host header
我按照 https://www.haproxy.com/documentation/hapee/1-9r1/traffic-management/kubernetes-ingress-controller/ 中的教程设置了 haproxy 控制器(社区版)和应该访问的 "Echo Server" 应用程序。
当我 运行 curl -L -H 'Host: echo.example.com' localhost:30884
我得到了想要的回应
Request served by app-58f7d69f54-p2kq8
HTTP/1.1 GET /
Host: echo.example.com
User-Agent: curl/7.61.1
Accept: */*
X-Forwarded-For: 10.42.0.0
但是,如果我只使用 curl -L echo.example.com:30884
,我会得到响应 default backend - 404
所以显然请求到达了入口控制器,但是入口控制器不知道应该使用哪个主机。
运行 kubectl get ing
给我
eignungstest eignungstest.example.com 10.43.173.120 80 17h
kube-web-view dashboard.example.com 80 16h
web-ingress echo.example.com 80 16h
似乎没有分配地址,但是运行用主机执行上面相同的命令eignungstest.example.com
我得到相同的结果,所以这应该没有关系。
是否有我缺少的设置阻止主机 header 在我未明确指定时被传递?
入口控制器和入口看起来不错。
正如您在 kubectl
响应中看到的那样,入口指向该服务的端口 80,它将接收 echo.example.com
。
所以它只知道 echo.example.com 的端口 80,但是当您尝试 curl -L echo.example.com:30884
时,它会检查该特定端口并将所有流量路由到默认后端。
确保您可以直接 curl -L echo.example.com
,如果它不起作用,请检查该服务是否有类似的服务。
spec:
ports:
- port: 80
targetPort: 3001
您可能也正确完成了服务部分。希望这有帮助。
我按照 https://www.haproxy.com/documentation/hapee/1-9r1/traffic-management/kubernetes-ingress-controller/ 中的教程设置了 haproxy 控制器(社区版)和应该访问的 "Echo Server" 应用程序。
当我 运行 curl -L -H 'Host: echo.example.com' localhost:30884
我得到了想要的回应
Request served by app-58f7d69f54-p2kq8
HTTP/1.1 GET /
Host: echo.example.com
User-Agent: curl/7.61.1
Accept: */*
X-Forwarded-For: 10.42.0.0
但是,如果我只使用 curl -L echo.example.com:30884
,我会得到响应 default backend - 404
所以显然请求到达了入口控制器,但是入口控制器不知道应该使用哪个主机。
运行 kubectl get ing
给我
eignungstest eignungstest.example.com 10.43.173.120 80 17h
kube-web-view dashboard.example.com 80 16h
web-ingress echo.example.com 80 16h
似乎没有分配地址,但是运行用主机执行上面相同的命令eignungstest.example.com
我得到相同的结果,所以这应该没有关系。
是否有我缺少的设置阻止主机 header 在我未明确指定时被传递?
入口控制器和入口看起来不错。
正如您在 kubectl
响应中看到的那样,入口指向该服务的端口 80,它将接收 echo.example.com
。
所以它只知道 echo.example.com 的端口 80,但是当您尝试 curl -L echo.example.com:30884
时,它会检查该特定端口并将所有流量路由到默认后端。
确保您可以直接 curl -L echo.example.com
,如果它不起作用,请检查该服务是否有类似的服务。
spec:
ports:
- port: 80
targetPort: 3001
您可能也正确完成了服务部分。希望这有帮助。