如何在 Google 负载均衡器中使用多个 SSL 证书?

How to use multiple SSL certificates with Google Load Balancer?

我在 Google Container Engine 中有一个多层应用程序,我有一个具有单个静态 IP 地址的入口,我将在其中转发多个域。每个域都需要自己的 ssl 证书(让我们加密)。我面临的问题是我没有看到任何在负载均衡器中使用多个证书的选项。看起来每个 IP 地址都有一个全局转发规则,只能转发到一个只能使用一个 SSL 证书的 SSL(端口 443)HTTPS 代理。

我不想使用多域 SSL 证书,因为管理起来会很麻烦。

这不是一些奇怪的奇异用例,而是很正常的要求。这里的正确解决方案是什么?

我正在考虑为每个域设置静态 IP 并使用路由路由到单个 IP "front end",但每个 IP 都需要一些钱,因此拥有数十或数百个域在经济上简直是疯了(100 个域名每月费用为 1800 美元,data/traffic 不包括在内)。

更新: GCE 现在通过将最多 10 个 SSL 证书附加到负载均衡器来支持 SNI。您可以使用 TargetHttpsProxy 或 TargetSslProxy 指定 SSL 证书列表。

参考: https://cloud.google.com/compute/docs/load-balancing/http/ssl-certificates#multiple_ssl_certificate_example

=======================
您可以使用网络负载平衡器并终止 VM 实例上的 ssl 连接。请注意,网络负载平衡无法将您的流量转发到不同的区域。如果需要,您需要在不同区域分别设置它们。

参考: https://cloud.google.com/compute/docs/load-balancing/network/

TLS config is an array where you can define multiple host to secret 映射。

我已经使用 kube-lego 在 Google 容器引擎中成功设置了具有多个 SSL/TLS 证书的站点,该引擎从 Let's Encrypt 获取证书并在它们即将过期时自动更新它们。根据标签,您可能正在使用 Cloud Engine 的其他部分而不是 Kubernetes,但是使用 Kube-lego 至少可以简化容器的管理。

我们正在使用两个命名空间 - 生产和暂存 - 我们总共为所有服务使用了大约 50 个证书。如果不使用 kube-lego,管理所有证书会非常麻烦。

Kube-lego 侦听入口更改,如果完成新部署,它会在适当的配置到位的情况下采取行动。例如,前几天我不得不为暂存添加一项新服务。只需向部署脚本添加一个小配置,即可自动颁发 SSL/TLS 证书。这是我部署的入口,在一分钟内 proxy.domain.com 的证书就已启动 运行。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: proxy-web-ingress
  namespace: staging
  annotations:
    kubernetes.io/tls-acme: "true"
    kubernetes.io/ingress.class: "nginx"
spec:
  tls:
  - hosts:
    - proxy.domain.com
    secretName: proxy-web-tls
  rules:
  - host: proxy.domain.com
    http:
      paths:
      - path: /
        backend:
          serviceName: proxy-web-svc
          servicePort: 80

一个缺点是,出于可以理解的原因,每周可能 not issue infinite number 个证书。但是,在设置过程中,可以不受限制地使用 Let's Encrypt 的暂存环境。使用 kube-lego 时,Nginx 用于处理 SSL/TLS.

的路由和终止