Google 使用 Nginx Ingress 管理 SSL 证书

Google managed SSL Certificates with Nginx Ingress

所以我正在设置多个 GKE 集群,我只能使用通配符域证书,但我的域有两层深度,所以这行不通。所以现在我正在尝试使用 google 托管证书,它有效,但似乎只适用于 GCE ingress,而不适用于 nginx。

根据 https://cloud.google.com/kubernetes-engine/docs/how-to/managed-certs 的说法,假设我只使用一个入口资源,该入口资源使用 GCE 入口提供 L7(http) 负载平衡器。我的问题是,是否可以设置 nginx 入口控制器以使用这些托管证书?

从 nginx helm 安装,它提供了一个 L4(tcp) 负载平衡器,并使用部署到 运行 处理 nginx 控制器的 pod。但我似乎无法将 L4 负载均衡器设置为使用我的全局保留静态 IP。而 L7 的工作正常。

关于如何使用 nginx ingress 获得托管证书有什么想法吗?

发现问题。我正在使用 GCE 入口为 L4 负载均衡器保留一个全局 IP 地址,这是不允许的,因为 TCP 负载平衡仅是区域性的,不像 HTTP 负载平衡,后者需要保留一个全局 IP,而不是区域 IP。因此,从那以后,它永远不会将 DNS 记录解析为正确的 IP。很高兴知道与全球和区域 IP 混淆的警告...

Google 托管证书仅支持 GKE 外部入口。 来自 https://cloud.google.com/load-balancing/docs/ssl-certificates/google-managed-certs:

Note: Google-managed SSL certificates aren't currently supported for internal HTTPS load balancers. For internal HTTPS load balancers, use self-managed SSL certificates.

以下是我在使用 GKE ingress 时遇到的限制:

  • 您可以使用托管证书,但仅适用于外部入口,不支持内部入口
  • 您的 VPC 必须配置 a certain way 以使用内部负载平衡,这非常繁琐。
  • 防火墙无法配置为限制源 ip,因为此信息从 Google 前端到 VM 丢失。他们只能看到负载均衡器的源 ips。

如果您只需要一个外部入口证书,您只需使用 kubernetes.io/ingress.class: "gce" 声明一个入口,设置 ExternalDNS 为您创建 CloudDNS 记录,然后将托管证书附加到域名如下:

apiVersion: networking.gke.io/v1
kind: ManagedCertificate
metadata:
  name: certificate-name
spec:
  domains:
    - domain-name1
    - domain-name2

这为您提供了一个附加到您的服务的域,使用 SSL,全部使用 google 云 DNS 和 google 负载平衡。

如果你需要内部服务,那就有点棘手了。我个人决定完全放弃 GKE 入口,使用 ingress-nginx 使用内部 IP 设置 LoadBalancer 服务,然后使用 cert-manager 设置证书。方法可以参考这个blog