我正在尝试在谷歌云上做一个简单的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分。 我试过使用regex,但根本没用
后端只是回音服务器,它们总是在任何路径上回复。
此定义与路径的确切字符串匹配。如果要包括子目录,可以使用通配符 * . 修改后的定义应如下所示:
*
- path: /one/* backend: serviceName: test-one-backend servicePort: 80
我不确定是否 http://server/one (结尾没有斜线)仍然有效。在这种情况下,你必须保留原来的定义,并添加另一个像上面那样的定义。
http://server/one
你需要使用 /* 在路径的末尾:
/*
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
不是真的 documented widely as of today 但本质上 path 翻译成 location {} 在nginx.conf中阻塞
path
location {}