如何通过一个Ingress在同一服务上管理多个路径?

时间:2019-10-09 23:24:18

标签: kubernetes server routes google-kubernetes-engine kubernetes-ingress

我正在GKE集群上工作。我有一个运行的简单服务器。服务器上有三条路由。

route 1 - / 
route 2 - /ping
route 3 - /health 

这些路径返回200条响应,其中包含通用但不同的“确定”消息。

这就是我的入口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

我将服务器暴露为负载平衡器。我可以使用loadbalancer作为 https://<loadbalancer_ip>:8080/ https://<loadbalancer_ip>:8080/ping https://<loadbalancer_ip>:8080/health

访问所有三个路由

但是,当尝试使用入口时,我在https://www.simple.com/ping上仅收到200条响应 其他两条路线,即https://www.simple.com/healthhttps://www.simple.com/返回default backend - 404 error

我可以确认服务器正在运行并且可以完美地处理请求,并且我已经为入口分配了足够的时间(最多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

1 个答案:

答案 0 :(得分:0)

找出问题所在。您需要在路径中添加通配符。我的路径中只有/,因此它拒绝了我所有其他网址(读取抛出404错误)。我添加了/*,并删除了the rewrite-target annotation,因为@bserdar正确建议了,它可以工作。链接到github上的问题很有帮助-https://github.com/kubernetes/ingress-nginx/issues/1120