【问题标题】:Should I use Ingress vs LoadBalancer for Kubernetes on Google Cloud (with custom domain and an SSL certificate)?我应该在 Google Cloud 上为 Kubernetes 使用 Ingress 还是 LoadBalancer(带有自定义域和 SSL 证书)?
【发布时间】:2021-01-15 17:25:13
【问题描述】:

根据this page,如果您使用 LoadBalancer,Google Kubernetes 似乎可以制作 Google 托管的 SSL 证书。这就是我想要使用的。

但是,我使用 this page 为我的自定义域设置了 Ingress。

所以现在,我有一个 Ingress,我可以使用我的自定义域访问我的集群就好了,但是如何向它添加 HTTPS?我的怀疑是 Ingress 也做了一个 LoadBalancer,但我不知道如何根据第一个链接修改它。

【问题讨论】:

    标签: ssl kubernetes google-cloud-platform google-kubernetes-engine custom-domain


    【解决方案1】:

    您将需要 2 个负载均衡器来实现您的目标,第一个用于带有重定向的 HTTP,另一个用于 HTTPS。您可以查看link 获取有关设置 HTTPS 负载平衡器的官方指南。

    【讨论】:

      【解决方案2】:

      您需要将托管证书与您的入口清单相关联。在为kubernetes.io/ingress.global-static-ip-name 设置值的地方,您应该可以添加networking.gke.io/managed-certificates: *certificate-name*

      见:https://cloud.google.com/kubernetes-engine/docs/how-to/managed-certs

      示例入口(来自那些文档)如下所示:

      apiVersion: networking.k8s.io/v1beta1
      kind: Ingress
      metadata:
        name: ingress-name
        annotations:
          kubernetes.io/ingress.global-static-ip-name: address-name
          networking.gke.io/managed-certificates: certificate-name
      spec:
        backend:
          serviceName: service-name
          servicePort: service-port
      

      您的可能看起来略有不同,但此功能的重要部分是注释部分。

      【讨论】:

      • apiVersion: extensions/v1beta1(不是networking.gke.io)是一回事吗?
      • 好吧,好像没什么区别。谢谢你这么简洁的回答!
      【解决方案3】:

      我怀疑 Ingress 也制作了 LoadBalancer,但我不能 根据第一个链接弄清楚如何修改它。

      你是对的。当您创建 ingress 对象时,会在后台自动创建 负载均衡器。甚至提到了here

      如果您选择使用 Ingress, 它会创建一个 HTTP(S) 负载均衡器,您必须reserve a global static IP address

      您甚至可以通过转到Navigation menu -> Networking -> Network services -> Load balancing 在您的 Google Cloud Console 中列出它。

      编辑它最简单的方法是点击它旁边的 3 个点,然后点击 Edit:

      但您需要修改 Ingress 资源,而不是手动编辑它。

      假设您已按照here 列出的步骤进行操作,并且一切都按预期工作,但只能通过 http,这也是预期的,因为您尚未配置 SSL 证书到目前为止,您的入口和它在后台使用的 负载均衡器 也被配置为仅与 http 一起使用。

      如果您关注the guide you mentioned并且已经配置了Google管理的SSL证书,您只需要更新您的ingress资源配置,将networking.gke.io/managed-certificates: certificate-name注解添加为@ ldg 在他的回答中建议。

      如果您没有配置 SSL 证书,您可以通过应用以下 yaml 清单从 kubernetes 级别进行配置,如 here 所述:

      apiVersion: networking.gke.io/v1beta2
      kind: ManagedCertificate
      metadata:
        name: example-cert
      spec:
        domains:
          - example.com
      

      将其保存为文件example-cert.yaml,然后运行:

      kubectl apply -f example-cert.yaml
      

      创建后,您可以从与之前相同的 yaml 清单重新应用您的 ingress 配置,并添加提到的注释。

      apiVersion: extensions/v1beta1
      kind: Ingress
      metadata:
        name: helloweb
        annotations:
          kubernetes.io/ingress.global-static-ip-name: helloweb-ip
          networking.gke.io/managed-certificates: example-cert ### ?
        labels:
          app: hello
      spec:
        backend:
          serviceName: helloweb-backend
          servicePort: 8080
      

      如果出于某种原因,您希望根据运行配置获取已部署的 ingress,则可以运行:

      kubectl get ingress helloweb -o yaml > ingress.yaml
      

      然后您可以编辑ingress.yaml 文件并重新应用它。

      添加注释后,再次在 Google Cloud Console 中转到 Navigation menu -> Networking -> Network services -> Load balancing,您会注意到 负载均衡器的>协议已从HTTP更改为HTTP(S),如果证书有效,您应该可以使用您的自定义域访问您的网站通过 HTTPS。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-15
        • 2020-06-26
        • 2019-11-05
        • 1970-01-01
        • 2021-09-24
        • 2020-12-15
        • 2019-10-04
        相关资源
        最近更新 更多