【问题标题】:Kubernetes Ingress path priority (ingress-nginx)Kubernetes Ingress 路径优先级(ingress-nginx)
【发布时间】:2021-05-15 03:04:04
【问题描述】:

我部署了 2 个基于 Angular 的前端应用程序。我使用带有以下配置的 ingress-nginx (k8s.gcr.io/ingress-nginx/controller:v0.44.0) 将请求路由到这些应用程序:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: portal-ingress
  namespace: default
  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: /?(.*)
        backend:
          serviceName: app1
          servicePort: 80
      - path: /app2
        backend:
          serviceName: app2
          servicePort: 80

当我点击 <ip-address>/ 时,它会路由到 app1,但是当我点击 <ip-address>/app2 时,它会路由回 app1。

【问题讨论】:

    标签: nginx kubernetes kubernetes-ingress azure-aks nginx-ingress


    【解决方案1】:

    根据ingress-nginx documentation,它遵循的第一步是将路径按降序排列,然后将这些路径转换为nginxlocation blocks。 nginx 遵循对这些块的首次匹配策略。

    在您的情况下,您可以提供两个路径,并且由于/app2/ 长,它将首先写入 nginx 配置中。这意味着/app2 将有机会首先被匹配(并将流量发送到 app2),而其他一切都将转到 app1。你不需要正则表达式来实现这一点。

    代码:

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    metadata:
      name: portal-ingress
      namespace: default
      annotations:
        kubernetes.io/ingress.class: nginx
        nginx.ingress.kubernetes.io/ssl-redirect: "false"
    spec:
      rules:
      - http:
          paths:
          - path: /
            backend:
              serviceName: app1
              servicePort: 80
          - path: /app2
            backend:
              serviceName: app2
              servicePort: 80
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-03
      • 1970-01-01
      • 1970-01-01
      • 2022-12-17
      • 2020-06-30
      • 2018-12-12
      • 1970-01-01
      相关资源
      最近更新 更多