Kubernetes 如何通过一个入口为同一服务上的多个路径提供服务器?
我正在GKE集群上工作。我有一个简单的服务器正在运行。服务器上有三条路由Kubernetes 如何通过一个入口为同一服务上的多个路径提供服务器?,kubernetes,server,routes,google-kubernetes-engine,kubernetes-ingress,Kubernetes,Server,Routes,Google Kubernetes Engine,Kubernetes Ingress,我正在GKE集群上工作。我有一个简单的服务器正在运行。服务器上有三条路由 route 1 - / route 2 - /ping route 3 - /health 这些路径返回200个带有通用但不同的“ok”消息的响应 这就是我的安格尔·亚马尔的样子- apiVersion: extensions/v1beta1 kind: Ingress metadata: name: basic-ingress spec: tls: - hosts: - www.simple.c
route 1 - /
route 2 - /ping
route 3 - /health
这些路径返回200个带有通用但不同的“ok”消息的响应
这就是我的安格尔·亚马尔的样子-
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
我将我的服务器公开为负载平衡器。我可以使用loadbalancer作为
https://:8080/
https://:8080/ping
https://:8080/健康
然而,当尝试使用入口时,我在https://www.simple.com/ping
其他两条路线,即https://www.simple.com/health
和https://www.simple.com/
返回默认后端-404错误
我可以确认服务器正在运行并完美地服务于请求,并且我已经给了入口足够的时间(最多30分钟)来完成设置<代码>https://www.simple.com/healthz 返回“确定”
我认为我在正确配置入口时犯了一个错误。欢迎提供任何帮助/建议
我无法提供入口日志,因为我注意到
kubectl Descripte ingress/basic ingress
从服务器返回错误错误(NotFound):服务器无法找到请求的资源
,但是,kubectl get ingress返回basic ingress www.simple.com 80,44331M
解决了这个问题。您需要向路径添加通配符。我的路径中只有/
,因此它拒绝了所有其他URL(读取时抛出404错误)。我添加了/*
,并删除了@bserdar正确建议的重写目标注释,效果良好。链接到github上帮助很大的问题-https://github.com/kubernetes/ingress-nginx/issues/1120
您正在将所有URL重写为/。删除重写目标注释,它应该可以工作。我确实尝试过。我的入口配置了path/health
。如果我正在重写URL,我应该收到path/
的响应。然而,在这种情况下,我在path/
和path/ping
上收到了404。只有path/health
在工作。如果您为/health
配置入口,则所有其他URL都将被取消映射,因此需要404。路径是一个前缀,以该路径开头的任何内容都将被代理。使用/
,您将发送所有内容,但将它们重写为/
。试着不用重写注释。我刚才确实试过了。这个解决方案不起作用。我在https://www.simple.com
和404打开https://www.simple.com/ping
我跟踪了我发出的HTTP请求,我可以确认我的请求是以GET的形式发出的https://www.simple.com/
和获取https://www.simple.com/ping
您的入口是GKE入口。这不是nginx入口。每个入口实现的规则都不同。因为它不是nginx,所以重写目标也应该是不必要的,因为afaik不适用于GKE入口。