Google通过Nginx Ingress管理SSL证书

时间:2019-05-17 15:15:11

标签: google-kubernetes-engine nginx-ingress

因此,我正在设置多个GKE群集,并且只能使用通配符域证书,但是我的域深达两个级别,因此无法正常工作。因此,现在我正在尝试使用有效的google托管证书,但似乎只能与GCE入口一起使用,而不是nginx。

根据https://cloud.google.com/kubernetes-engine/docs/how-to/managed-certs的工作原理,假设我仅使用一个入口资源,该资源使用GCE入口配置L7(http)负载均衡器。我的问题是,是否可以将Nginx入口控制器设置为使用这些托管证书?

在nginx头盔安装中,它配置了L4(tcp)负载平衡器,并使用部署来运行处理nginx控制器的Pod。但是我似乎无法设置L4负载平衡器使用我全局保留的静态IP。 L7可以正常工作。

是否有任何关于如何使用nginx入口管理证书的想法?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

<块引用>

注意:Google 管理的 SSL 证书目前不支持 内部 HTTPS 负载平衡器。对于内部 HTTPS 负载平衡器,请使用 自我管理的 SSL 证书。

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

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

如果您只需要外部入口的证书,您可以使用 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,全部使用谷歌云 DNS 和谷歌负载平衡。

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