由于一些依赖 Host 标头才能正常运行的遗留应用程序,我需要一个能够重写 Host 标头并将其传递给下游(后端)的 Ingress(代理等)。是否有任何支持此功能的入口控制器?
例子:
最终用户通过foo.com/a
for backenda
和foo.com/b
for backend访问我们的网站b
。但由于a
andb
是旧版应用程序,它只接受:
a
接受连接时Host: a.foo.com
b
接受连接时Host: b.foo.com
由于一些依赖 Host 标头才能正常运行的遗留应用程序,我需要一个能够重写 Host 标头并将其传递给下游(后端)的 Ingress(代理等)。是否有任何支持此功能的入口控制器?
例子:
最终用户通过foo.com/a
for backenda
和foo.com/b
for backend访问我们的网站b
。但由于a
andb
是旧版应用程序,它只接受:
a
接受连接时Host: a.foo.com
b
接受连接时Host: b.foo.com
这可以使用这个注解来完成:nginx.ingress.kubernetes.io/upstream-vhost: host.example.com
我不确定您是否可以在NGINX Ingress Controller 中找到适当的注释来修改主机标头以匹配您的要求。但是,您可以考虑使用nginx.ingress.kubernetes.io/configuration-snippet
注释将配置片段附加到nginx.conf
特定 Nginx 控制器 pod 内的位置块:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/configuration-snippet: |
proxy_set_header Host www.example-host.com;
name: my-app
spec:
rules:
- host: my-app.example.com
http:
paths:
- backend:
path: /app
serviceName: my-app
servicePort: http
www.example-host.com
我们在这里为目标 URL设置 Host 标头my-app.example.com
。
我想将我的发现添加到我的这个问题中。
虽然我的解决方案没有使用 k8s Ingress Controller,但我们的集群使用的是 Istio,并且 Istio 的 VirtualService 支持重写uri
和authority
(主机标头),如以下链接所述:https://istio.io/docs/reference/config/istio.networking。 v1alpha3/#HTTPRewrite
要知道我是如何实现的,你可以看看这个链接:https ://github.com/istio/istio/issues/11668
您可以在 Kubernetes 上使用入口 nginx 控制器并设置头部,还可以从入口对象传输到后端并管理服务连接。
此处共享来自标头的重写目标的链接:https ://kubernetes.github.io/ingress-nginx/examples/rewrite/
ingress nginx 也可以与 SSL 证书管理器一起使用,您可以添加它。
使用入口注释管理其他事物。
查看入口 SSL 设置,您可以根据需要对其进行修改:https ://www.digitalocean.com/community/tutorials/how-to-set-up-an-nginx-ingress-with-cert-manager- on-digitalocean-kubernetes
入口最终会像
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
tls:
- hosts:
- myapp.abc.com
secretName: ingress-tls
rules:
- host: myapp.abc.com
http:
paths:
- path: /my-service
backend:
serviceName: my-backend
servicePort: 80