入口中的 / 和 /* 有什么区别 spec/rules/http/paths/path
what is the difference between / and /* in ingress spec/rules/http/paths/path
我有以下入口资源
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: kubernetes-demo-ing
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: \"false\"
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: test.my-docker-kubernetes-demo.com
http:
paths:
- path: /*
backend:
serviceName: my-demo-service
servicePort: 3000
我的应用无法在此处访问 test.my-docker-kubernetes-demo.com
我正在访问 too many redirects error
但是当我在 path: /* to path: /
的路径下替换时,它起作用了。
但我找不到它是如何解决问题的,如果能帮助理解或解释这个问题,那就太好了。
您可以在 k8s.io/api/extensions/v1beta1 中找到 spec.rules[].http.paths[].path
的简短说明。
你应该检查 NGINX Ingress Controller - Rewrite。
Starting in Version 0.22.0, ingress definitions using the annotation nginx.ingress.kubernetes.io/rewrite-target
are not backwards compatible with previous versions. In Version 0.22.0 and beyond, any substrings within the request URI that need to be passed to the rewritten path must explicitly be defined in a capture group
Captured groups are saved in numbered placeholders, chronologically, in the form </code>, <code>
... $n
. These placeholders can be used as parameters in the rewrite-target
annotation.
您可以通过以下方式查看版本:
kubectl exec -it <nginx-ingress-controller-pod-name> -n ingress-nginx -- /nginx-ingress-controller --version
我认为您的 Ingress 应该如下所示:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: kubernetes-demo-ing
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: test.my-docker-kubernetes-demo.com
http:
paths:
- path: /(.*)
backend:
serviceName: my-demo-service
servicePort: 3000
/
和 /*
的含义取决于您的 ingress implementation,例如,使用 NGINX 与 GCE 入口实现有不同的方式来选择一系列路径:
path: /foo/.*
path: /*
您可以通过设置 kubernetes.io/ingress.class 注释来选择要使用的实现。
在您的情况下,假设您使用的是 NGINX,/*
不会被解释为 glob 模式,因此只允许直接连接到 /*
。其他任何内容都会发送到 default backend.
我有以下入口资源
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: kubernetes-demo-ing
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: \"false\"
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: test.my-docker-kubernetes-demo.com
http:
paths:
- path: /*
backend:
serviceName: my-demo-service
servicePort: 3000
我的应用无法在此处访问 test.my-docker-kubernetes-demo.com
我正在访问 too many redirects error
但是当我在 path: /* to path: /
的路径下替换时,它起作用了。
但我找不到它是如何解决问题的,如果能帮助理解或解释这个问题,那就太好了。
您可以在 k8s.io/api/extensions/v1beta1 中找到 spec.rules[].http.paths[].path
的简短说明。
你应该检查 NGINX Ingress Controller - Rewrite。
Starting in Version 0.22.0, ingress definitions using the annotation
nginx.ingress.kubernetes.io/rewrite-target
are not backwards compatible with previous versions. In Version 0.22.0 and beyond, any substrings within the request URI that need to be passed to the rewritten path must explicitly be defined in a capture groupCaptured groups are saved in numbered placeholders, chronologically, in the form
</code>, <code>
...$n
. These placeholders can be used as parameters in therewrite-target
annotation.
您可以通过以下方式查看版本:
kubectl exec -it <nginx-ingress-controller-pod-name> -n ingress-nginx -- /nginx-ingress-controller --version
我认为您的 Ingress 应该如下所示:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: kubernetes-demo-ing
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: test.my-docker-kubernetes-demo.com
http:
paths:
- path: /(.*)
backend:
serviceName: my-demo-service
servicePort: 3000
/
和 /*
的含义取决于您的 ingress implementation,例如,使用 NGINX 与 GCE 入口实现有不同的方式来选择一系列路径:
path: /foo/.*
path: /*
您可以通过设置 kubernetes.io/ingress.class 注释来选择要使用的实现。
在您的情况下,假设您使用的是 NGINX,/*
不会被解释为 glob 模式,因此只允许直接连接到 /*
。其他任何内容都会发送到 default backend.