KongIngress 对象中的 strip_path 和 preserve_host 属性。他们在做什么?
strip_path and preserve_host attributes in KongIngress object. What do they do?
我有一个关于 Ingress 资源的 KongIngress
对象配置属性,它调用 kong 作为 Ingress 控制器。我实际上有这样的配置:
apiVersion: configuration.konghq.com/v1
kind: KongIngress
metadata:
name: echo-site-ingress
namespace: hello-world
annotations:
kubernetes.io/ingress.class: "kong"
proxy:
protocols:
- http
- https
# path: /
route:
methods:
- POST
- GET
strip_path: true
preserve_host: true
---
#My Ingress resource
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
kubernetes.io/ingress.class: kong
plugins.konghq.com: helloworld-customer-acceptance-basic-auth, hello-world-customer-acceptance-acl
name: echo-site-ingress
namespace: hello-world
spec:
rules:
- host: hello-world.bgarcial.me
http:
paths:
- backend:
serviceName: echo
servicePort: 80
path: /
tls:
- hosts:
- hello-world.bgarcial.me
secretName: letsencrypt-prod
问题是:
我的 kind:KongIngress
对象资源中的 strip_path
和 preserve_host
属性在做什么?
我阅读了文档 here,但我不清楚:
关于 strip_path
我看到了这个:
When matching a Route via one of the paths, strip the matching prefix from the upstream request URL. Defaults to true.
but as we can see, I am not using the path attribute inside my KongIngress object (I commented for illustration purposes about my question)
那么,strip_path
属性值是如何应用到这里的呢?
这是因为我在我的 Ingress 资源中使用 path: /
属性并且我的 Ingress 和我的 KongIngress 资源一起工作?
我真的不知道,但我想知道幕后情况如何。
启用 preserv_host
注解后,请求的 host
header 将按原样发送到 Kubernetes 中的服务。在 the documentation.
中有很好的解释
strip_path
可以配置为在代理之前从 HTTP 请求中删除路径的匹配部分。
如果设置为"true"
,Ingress规则中指定的路径部分将在请求发送到服务之前被剥离。例如设置为"true"
时,Ingress规则的路径为/foo
,匹配Ingress规则的HTTP请求的路径为/foo/bar/something
,则请求发送到Kubernetes 服务的路径为 /bar/something
。
因此,当您使用 curl $YOUR_HOST/foo/bar/something
时,在输出的真实路径值下您将看到 /bar/something
并且如果设置为 false
则不会执行任何路径操作,并且在您的情况下可以更改为无需进行任何操作。
我有一个关于 Ingress 资源的 KongIngress
对象配置属性,它调用 kong 作为 Ingress 控制器。我实际上有这样的配置:
apiVersion: configuration.konghq.com/v1
kind: KongIngress
metadata:
name: echo-site-ingress
namespace: hello-world
annotations:
kubernetes.io/ingress.class: "kong"
proxy:
protocols:
- http
- https
# path: /
route:
methods:
- POST
- GET
strip_path: true
preserve_host: true
---
#My Ingress resource
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
kubernetes.io/ingress.class: kong
plugins.konghq.com: helloworld-customer-acceptance-basic-auth, hello-world-customer-acceptance-acl
name: echo-site-ingress
namespace: hello-world
spec:
rules:
- host: hello-world.bgarcial.me
http:
paths:
- backend:
serviceName: echo
servicePort: 80
path: /
tls:
- hosts:
- hello-world.bgarcial.me
secretName: letsencrypt-prod
问题是:
我的 kind:KongIngress
对象资源中的 strip_path
和 preserve_host
属性在做什么?
我阅读了文档 here,但我不清楚:
关于 strip_path
我看到了这个:
When matching a Route via one of the paths, strip the matching prefix from the upstream request URL. Defaults to true. but as we can see, I am not using the path attribute inside my KongIngress object (I commented for illustration purposes about my question)
那么,strip_path
属性值是如何应用到这里的呢?
这是因为我在我的 Ingress 资源中使用 path: /
属性并且我的 Ingress 和我的 KongIngress 资源一起工作?
我真的不知道,但我想知道幕后情况如何。
启用 preserv_host
注解后,请求的 host
header 将按原样发送到 Kubernetes 中的服务。在 the documentation.
strip_path
可以配置为在代理之前从 HTTP 请求中删除路径的匹配部分。
如果设置为"true"
,Ingress规则中指定的路径部分将在请求发送到服务之前被剥离。例如设置为"true"
时,Ingress规则的路径为/foo
,匹配Ingress规则的HTTP请求的路径为/foo/bar/something
,则请求发送到Kubernetes 服务的路径为 /bar/something
。
因此,当您使用 curl $YOUR_HOST/foo/bar/something
时,在输出的真实路径值下您将看到 /bar/something
并且如果设置为 false
则不会执行任何路径操作,并且在您的情况下可以更改为无需进行任何操作。