重写目标不起作用

时间:2018-03-30 15:21:31

标签: kubernetes google-cloud-platform kubernetes-ingress

我尝试使用kubernetes和gcloud重写目标,但似乎并没有得到尊重。我的代码如下。也许还有一些我没见过的东西:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: demo-ingress
  annotations:
    ingress.kubernetes.io/rewrite-target: /
    kubernetes.io/ingress.global-static-ip-name: projectip
spec:

  rules:
  - host: mycustomdomain.com
    http:
      paths:
      - path: /*
        backend:
          serviceName: frontend
          servicePort: 80
      - path: /api/*
        backend:
          serviceName: backend
          servicePort: 80

当我curl mycustomdomain.com/api/something时,我的后端总是收到backend/api/something而不是backend/something。我真的没有想法,我可以使用一些帮助。

3 个答案:

答案 0 :(得分:1)

我假设你正在使用kubernetes ingress-nginx。

查看您的入口清单,似乎重写注释是错误的。

根据文件,我应该: nginx.ingress.kubernetes.io/rewrite-target

这是指向文档的链接:

https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/annotations.md#rewrite

答案 1 :(得分:1)

术语rewrite-target具有误导性:它与传入请求的路径有关。

这可能有效:只使用一个入口rewrite-target: /path: /作为前端,一个入口仅使用rewrite-target: /apipath: /作为后端。

答案 2 :(得分:1)

如果您已经使用helm安装了nginx ingress,则还可以查看helm chart目录中的重写示例。可以在<helm-chart-directory>/examples/rewrite上找到。应该有一个README.md会有所帮助。

在我的情况下,必需的注释为nginx.org\rewrite:"<service-name-1>:<rewrite-target-1>;<service-name-2>:<rewrite-target-2>"