3

我正在尝试在谷歌云上制作一个简单的 ingress-nginx 示例,但它与子路径不匹配:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
    - http:
        paths:
        - path: /one
          backend:
            serviceName: test-one-backend
            servicePort: 80
        - path: /two
          backend:
            serviceName: test-two-backend
            servicePort: 80

当我打电话时,http://server/one有效,但是当我调用 http://server/one/path时,我得到一个 404。我尝试了几件事,比如使用正则表达式,但根本不起作用

后端只是总是在任何路径上回复的回显服务器。

4

3 回答 3

4

您需要/*在路径末尾使用 a :

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
    - http:
        paths:
        - path: /one/*
          backend:
            serviceName: test-one-backend
            servicePort: 80
        - path: /two
          backend:
            serviceName: test-two-backend
            servicePort: 80

截至今天,它并没有真正被广泛记录,但本质上它path转化为location {}nginx.conf 中的一个块

于 2018-10-19T15:06:49.457 回答
3

注意它在 ingress-nginx 的 0.22.0 版本中发生了变化。https://github.com/kubernetes/ingress-nginx/blob/master/docs/examples/rewrite/README.md的结帐示例 现在您必须使用捕获的组将子路径传递给重写目标。

apiVersion: extensions/v1beta1
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(/|$)(.*)
于 2019-06-28T12:30:49.433 回答
0

此定义与路径的确切字符串匹配。如果要包含子目录,可以使用通配符*。您修改后的定义应如下所示:

- path: /one/*
  backend:
    serviceName: test-one-backend
    servicePort: 80

我不确定http://server/one(最后没有斜线)是否仍然有效。在这种情况下,您必须保留旧定义并添加另一个类似上面的定义。

于 2018-10-19T14:59:54.920 回答