是否可以在 k8s 入口控制器中重写 HOST 标头



由于一些依赖于主机标头才能正常运行的遗留应用程序,我需要有一个能够重写主机标头并将其传递给下游(后端(的入口(代理等(。是否有任何入口控制器支持此功能?

例:

最终用户通过后端a foo.com/a和后端b foo.com/b访问我们的网站。但由于ab是旧版应用,因此它只接受:

  • 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 支持重写 uriauthority(主机标头(,如以下链接中所述: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

最新更新