【问题标题】:Kubernetes Ingress PathKubernetes 入口路径
【发布时间】:2021-05-23 17:59:36
【问题描述】:

我使用下面的 yaml 文件为前端和后端设置了 nginx-ingress。

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: polls-ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/rewrite-target: /$1
    nginx.ingress.kubernetes.io/service-upstream: "true"
    cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
  tls:
  - hosts:
    - example.com
    secretName: polls-tls
  rules:
  - host: example.com
    http:
      paths:
      - path: /(.*)
        backend:
          serviceName: frontend
          servicePort: 3000
      - path: /graphql/(.*)
        backend:
          serviceName: polls
          servicePort: 8000

目前,我的重写目标重新路由如下

example.com  => / of frontend app
example.com/ => / of frontend app
example.com/graphql => / of frontend app
example.com/graphql/post => / of frontend app

example.com/graphql/ => / of backend app
example.com/graphql/post/ => /post of backend app

但我希望后端应用同时用于 graphql/post 和 graphql/post/,如下所示。

example.com => / of frontend app
example.com/ => / of frontend app
example.com/hello => /hello of frontend app
example.com/test => /test of frontend app

example.com/graphql => / of backend app
example.com/graphql/ => / of backend app
example.com/grpahql/post => /post of backend app
example.com/graphql/post/ => /post of backend app

谁能告诉我如何实现它?

【问题讨论】:

标签: nginx kubernetes kubernetes-ingress nginx-ingress


【解决方案1】:

您需要更改 graphql 路径的正则表达式,如下所示:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: polls-ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/rewrite-target: /$1
    nginx.ingress.kubernetes.io/service-upstream: "true"
    cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
  tls:
  - hosts:
    - example.com
    secretName: polls-tls
  rules:
  - host: example.com
    http:
      paths:
      - path: /(.*)
        backend:
          serviceName: frontend
          servicePort: 3000
      - path: /graphql/?(.*)   # <- HERE add "?"
        backend:
          serviceName: polls
          servicePort: 8000

来自正则表达式的文档:

问号表示前面的元素出现零次或一次。例如,colou?r 同时匹配“color”和“color”。

【讨论】:

  • 感谢马特的回答。我会试试这个,看看路径是否按预期工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-29
  • 2020-03-14
  • 1970-01-01
相关资源
最近更新 更多