由于某些依赖于Host标头才能正常运行的旧版应用程序,我需要拥有一个能够重写Host标头并将其传递给下游(后端)的Ingress(代理等)。是否有任何支持此功能的Ingress Controller?
示例:
最终用户通过foo.com/a
访问我们的网站,以访问后端a
,通过foo.com/b
访问后端b
。但是由于a
和b
是旧版应用,因此仅接受:
a
在Host: a.foo.com
b
在Host: b.foo.com
答案 0 :(得分:1)
我不确定您是否可以在NGINX Ingress Controller中修改Host标头来满足您的要求。但是,您可以考虑使用nginx.ingress.kubernetes.io/configuration-snippet
annotation,以便将配置代码段附加到特定Nginx控制器容器的nginx.conf
内的位置块中:
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
我们在此处为目标URL www.example-host.com
设置了主机标头my-app.example.com
。
答案 1 :(得分:1)
我想将我的发现添加到我的这个问题中。
尽管我的解决方案未使用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
答案 2 :(得分:1)
这可以使用以下注释来完成:nginx.ingress.kubernetes.io/upstream-vhost: host.example.com
答案 3 :(得分:0)
您可以在kubernetes上使用Ingress Nginx控制器,并设置head和Transer来后端和管理来自Ingress对象的服务连接。
在此处共享用于从标头重写目标的链接。
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