由于一些依赖于主机标头才能正常运行的遗留应用程序,我需要有一个能够重写主机标头并将其传递给下游(后端(的入口(代理等(。是否有任何入口控制器支持此功能?
例:
最终用户通过后端a
foo.com/a
和后端b
foo.com/b
访问我们的网站。但由于a
和b
是旧版应用,因此它只接受:
-
a
接受连接时Host: a.foo.com
-
b
接受连接Host: b.foo.com
这可以使用以下注释来完成: nginx.ingress.kubernetes.io/upstream-vhost: host.example.com
我不确定您是否可以在 NGINX 入口控制器中找到适当的注释来修改主机标头以满足您的要求。但是,您可以考虑使用nginx.ingress.kubernetes.io/configuration-snippet
注释,以便将配置片段附加到特定 Nginx 控制器 Pod 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 my-app.example.com
设置主机标头www.example-host.com
。
将我的发现添加到我的这个问题中。
虽然我的解决方案不使用 k8s 入口控制器,但我们的集群使用的是 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/
入口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