12

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

例子:

最终用户通过foo.com/afor backendafoo.com/bfor backend访问我们的网站b。但由于aandb是旧版应用程序,它只接受:

  • a接受连接时Host: a.foo.com
  • b接受连接时Host: b.foo.com
4

4 回答 4

24

这可以使用这个注解来完成:nginx.ingress.kubernetes.io/upstream-vhost: host.example.com

于 2019-05-08T08:40:21.447 回答
2

我不确定您是否可以在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

于 2019-02-11T13:52:03.343 回答
1

我想将我的发现添加到我的这个问题中。

虽然我的解决方案没有使用 k8s Ingress Controller,但我们的集群使用的是 Istio,并且 Istio 的 VirtualService 支持重写uriauthority(主机标头),如以下链接所述:https://istio.io/docs/reference/config/istio.networking。 v1alpha3/#HTTPRewrite

要知道我是如何实现的,你可以看看这个链接:https ://github.com/istio/istio/issues/11668

于 2019-02-12T12:10:01.597 回答
0

您可以在 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
于 2019-02-11T06:22:43.480 回答