【问题标题】:REST URI with NGINX Ingress Controller带有 NGINX 入口控制器的 REST URI
【发布时间】:2021-03-02 13:20:21
【问题描述】:

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

  • 当入口 IP 在没有任何参数的情况下被命中时,它应该被路由 到前端应用程序。示例:192.168.1.20 应该指向前端 在 80 端口提供服务。
  • 当给定参数时,请求应该是 路由到正确的 REST 服务。例子: 192.168.1.20/first-rest/api/flower?id=1 应该将请求路由到 first-rest 服务,以便它可以返回带有 id = 的花 1.

我可以正确访问前端应用程序,但是在尝试访问任何 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` 吗?

【问题讨论】:

    标签: rest nginx kubernetes nginx-ingress


    【解决方案1】:

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

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

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

    请参阅入口路径上的文档here

    【讨论】:

    • 不幸的是,这并没有解决问题。似乎我的 ?id 等 REST 参数没有传递给正确的控制器。我能够访问正确的服务,但无论 URI 是什么,它总是将我重定向到基本路径。示例:[addr]/first-rest/api/flowers?id=1 和 [addr]/first-rest/api/baskets?id=1 都表现得像 url 是 [addr]/first-rest。当服务类型为 LoadBalancer 并且一切正常时,我已经测试了我的 rest API。
    猜你喜欢
    • 2021-01-10
    • 2020-02-24
    • 2022-08-02
    • 1970-01-01
    • 2021-05-12
    • 1970-01-01
    • 2022-06-29
    • 2021-07-28
    • 2019-04-17
    相关资源
    最近更新 更多