首页 > 解决方案 > 带有 NGINX 入口控制器的 REST URI

问题描述

我正在尝试将 NGINX Ingress 控制器配置为我的 Kubernetes 集群的正确入口点。在集群内部,我创建了两个 REST Web 服务以及前端应用程序。我正在尝试实现以下场景。


我可以正确访问前端应用程序,但是在尝试访问任何 REST 服务时,我收到 404 错误或根本没有响应。First-rest、Second-rest 和 frontend 运行正常,并且在配置为 LoadBalancer 服务时可以访问。使用 Nginx,它们被配置为 ClusterIp 服务。
我的入口配置------------------------
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: main-routes
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/use-regex: "true"
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  rules:
  - http:
      paths:
      - path: /first-rest(/|$)(.*)
        backend:
          serviceName: first-rest
          servicePort: 8090
      - path: /second-rest(/|$)(.*)
        backend:
          serviceName: second-rest
          servicePort: 9000
      - path: /(.*)
        backend:
          serviceName: frontend
          servicePort: 80

似乎 NGINX 正在缩短我的 REST API 所需的 URL 参数。
有什么方法可以传递正确的 URL 路径,以便 `192.168.1.20/first-rest/api/flower?id=1` 被路由到 `[first-rest add and port]/api/flower?id=1 ` ?

标签: restnginxkubernetesnginx-ingress

解决方案


否则,您需要指定入口路径类型,具体取决于入口类的特定实现,它将默认为精确或前缀(我假设在您的情况下它默认为精确)

所以,你需要做类似的事情

spec:
  rules:
  - http:
      paths:
      - path: /first-rest
        pathType: Prefix
        backend:
          serviceName: first-rest
          servicePort: 8090

在此处查看有关入口路径的文档


推荐阅读