【问题标题】:Rewrite rule for nginx-ingress in Kubernetes重写 Kubernetes 中 nginx-ingress 的规则
【发布时间】:2021-08-20 15:18:27
【问题描述】:

我正在努力为 Kubernetes 上的 nginx-ingress 制定重写/重定向规则。

根据文档https://kubernetes.github.io/ingress-nginx/examples/rewrite/,它说可以使用注释“nginx.ingress.kubernetes.io/rewrite-target”,但无法在我的入口上实现。也许我做错了。

一个例子,nginx-ingress yaml 文件的一部分。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    example.com/deployment-name: frontend-page
    example.com/ingress-hostnames: www.example.com
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  rules:
  - host: www.example.com
    http:
      paths:
      - backend:
          serviceName: frontend-page
          servicePort: 8080
        path: /front(/|$)(.*)

也尝试了另一种方法,但没有成功:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    example.com/deployment-name: frontend-page
    example.com/ingress-hostnames: www.example.com
    nginx.ingress.kubernetes.io/rewrite-target: /shop
spec:
  rules:
  - host: www.example.com
    http:
      paths:
      - backend:
          serviceName: frontend-page
          servicePort: 8080
        path: /

我想将任何流量重定向到页面www.example.com/front/checkdomain 到www.example.com/checkdomain。我想删除介于两者之间的“前”路径。

【问题讨论】:

    标签: kubernetes nginx-ingress


    【解决方案1】:

    用更新的 API 版本试试这个,希望你的入口支持networking.k8s.io/v1beta1

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    metadata:
      annotations:
        kubernetes.io/ingress.class: nginx
        nginx.ingress.kubernetes.io/rewrite-target: /$2
      name: rewrite
      namespace: default
    spec:
      rules:
      - host: rewrite.bar.com
        http:
          paths:
          - backend:
              serviceName: http-svc
              servicePort: 80
            path: /something(/|$)(.*)
    

    例如:https://kubernetes.github.io/ingress-nginx/examples/rewrite/#examples

    【讨论】:

    • 当我尝试更改 apiVersion 行,保存并退出并应用时,它显示错误。这是否意味着正在运行的 nginx-ingress 不支持 apiVersion?
    • 您可能会犯其他错误,您可以尝试应用 yaml 并且不要忘记删除该域的旧测试入口。如果 API 版本不支持,请保留此选项 k8s 在应用 yaml 时会出错。你用的是哪个k8s版本?
    • 我认为可以尝试应用 yaml
    • ok 苛刻,到目前为止我一直在尝试使用编辑命令kubectl edit ingress frontend-page -n app -o yaml。您的意思是删除此文件并应用一个新的并进行更改吗?
    • 是的,尝试使用新鲜的而不是编辑它,这样如果不支持,也可以验证 API 版本问题。
    【解决方案2】:

    解决办法是

    更改自:

    nginx.ingress.kubernetes.io/rewrite-target: /$2
    

    收件人:

    nginx.ingress.kubernetes.io/rewrite-target: /$2/
    

    所以 yaml 看起来像:

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      annotations:
        kubernetes.io/ingress.class: nginx
        example.com/deployment-name: frontend-page
        example.com/ingress-hostnames: www.example.com
        nginx.ingress.kubernetes.io/rewrite-target: /$2/
    spec:
      rules:
      - host: www.example.com
        http:
          paths:
          - backend:
              serviceName: frontend-page
              servicePort: 8080
            path: /front(/|$)(.*)
    

    【讨论】:

      猜你喜欢
      • 2019-01-15
      • 1970-01-01
      • 1970-01-01
      • 2010-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-05
      相关资源
      最近更新 更多