【问题标题】:rewrites path on ingress kubernetes重写入口 kubernetes 上的路径
【发布时间】:2021-10-25 04:33:05
【问题描述】:

我有在 kubernetes 集群上运行的 tomcat 后端服务尝试使用带有路径的入口重写 /blob/api/v1/test-backend > /api/v1/test-backend 所以 配置现在正在运行,因此可以访问 xx.somedomain.com/blob/api/v1/test-backend,我想通过重写更改为 xx.somedomain.com/api/v1/test-backend

我的基本入口

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress-blob
  namespace: blob-test
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/proxy-body-size: 50m
spec:
  tls:
  - hosts:
    - xx.somedomain.com
    secretName: cert-key
  rules:
  - host: xx.somedomain.com
    http:
      paths:
      - path: /blob/
        backend:
          serviceName: blob-service
          servicePort: 8080
      - path: /
        backend:
          serviceName: web-service
          servicePort: 80

这是用于重写/blob/的yaml

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress-blob
  namespace: blob-test
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/proxy-body-size: 50m
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  tls:
  - hosts:
    - xx.somedomain.com
    secretName: cert-key
  rules:
  - host: xx.somedomain.com
    http:
      paths:
      - path: /blob/api/v1/some-backend
        backend:
          serviceName: blob-service
          servicePort: 8080

当我使用 talend 之类的 api 测试器进行测试时,出现 405 错误

【问题讨论】:

    标签: kubernetes google-cloud-platform url-rewriting kubernetes-ingress nginx-ingress


    【解决方案1】:

    试试这个

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      annotations:
        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(/|$)(.*)
    

    例如,上面的入口定义将导致以下重写:

    rewrite.bar.com/something rewrites to rewrite.bar.com/
    rewrite.bar.com/something/ rewrites to rewrite.bar.com/
    rewrite.bar.com/something/new rewrites to rewrite.bar.com/new
    

    参考:https://kubernetes.github.io/ingress-nginx/examples/rewrite/

    【讨论】:

    • 如果我这样做,所有后端都是 404
    • 希望您已根据您的用例更新了主机路径名称服务名称。如果您可以共享您应用的yaml文件。
    • 我编辑了我的问题先生是我用于测试的 yaml
    • 405 是不允许的方法。您的域在 DNS 中注册?
    • 我的子域在 aws route53 中注册,我在 gcp 上使用入口 nginx 作为 LB,然后在 route53 上我将 ip 从入口-nginx 放入
    【解决方案2】:

    尝试像这样添加注释 nginx.ingress.kubernetes.io/rewrite-target: "/$1"

    【讨论】:

    • 你可以通过点击网址分享错误
    • [25/Aug/2021:05:55:15 +0000] "POST /api/v1/test-backend HTTP/2.0" 404
    猜你喜欢
    • 2021-05-23
    • 2019-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-14
    相关资源
    最近更新 更多