【发布时间】:2019-10-09 23:24:18
【问题描述】:
我正在开发 GKE 集群。我有一个简单的服务器正在运行。服务器上有三个路由。
route 1 - /
route 2 - /ping
route 3 - /health
这些路径返回 200 响应,其中包含通用但不同的“ok”消息。
这就是我的入口 yaml 的样子 -
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: basic-ingress
spec:
tls:
- hosts:
- www.simple.com
secretName: simple-server-tls
rules:
- host: www.simple.com
http:
paths:
- path: /ping
backend:
serviceName: simple-server
servicePort: 8080
我将我的服务器公开为负载平衡器。我可以使用负载均衡器访问所有三个路由
https://<loadbalancer_ip>:8080/
https://<loadbalancer_ip>:8080/ping
https://<loadbalancer_ip>:8080/health
但是,在尝试使用入口时,我在 https://www.simple.com/ping 上只收到 200 响应
其他两条路线,即https://www.simple.com/health 和https://www.simple.com/ 返回default backend - 404 error。
我可以确认服务器正在运行并且正在完美地处理请求,并且我已经给了 ingress 足够的时间(超过 30 分钟)来完成设置。 https://www.simple.com/healthz returns "OK".
我认为我在正确配置入口时犯了一个错误。感谢您提供任何帮助/建议。
我无法提供入口日志,因为我注意到 kubectl describe ingress/basic-ingress 返回错误 Error from server (NotFound): the server could not find the requested resource 但是,kubectl get ingress 返回 basic-ingress www.simple.com <ingress_ip> 80, 443 31m
【问题讨论】:
-
您将所有 URL 重写为 /。删除 rewrite-target 注释,它应该可以工作。
-
我确实尝试过。我的入口配置了
path /health。如果我正在重写 URL,我应该会收到path /的响应。但是在这种情况下,我在path /和path /ping上收到了 404。只有path /health在工作。 -
如果您为
/health配置了入口,则所有其他 url 都将被取消映射,因此预计会得到 404。路径是前缀,以该路径开头的任何内容都将被代理。使用/,您将发送所有内容,但将它们重写为/。尝试不使用重写注释。 -
我刚才确实试过了。这个解决方案没有奏效。我在
https://www.simple.com上收到了 200 个,在https://www.simple.com/ping上收到了 404 个 -
我跟踪了我传出的 HTTP 请求,我可以确认我的请求是以
GET https://www.simple.com/和GET https://www.simple.com/ping发出的
标签: kubernetes server routes google-kubernetes-engine kubernetes-ingress