Kubernetes 如何通过一个入口为同一服务上的多个路径提供服务器?

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

我正在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.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入口。