【问题标题】:kubernetes on gcp create an https Load Balancer with yamlgcp 上的 kubernetes 使用 yaml 创建 https 负载均衡器
【发布时间】:2025-11-29 22:05:01
【问题描述】:

在我的项目中,我必须在我的 GCP 上创建一个 kubernetes 集群,并为我的 django 应用程序提供一个外部负载均衡器服务。我用这个yaml 文件创建它:

apiVersion: v1
kind: Service
metadata:
  name: mydjango
  namespace: test1
  labels:
    app: mydjango
spec:
  ports:
  - name: http
    port: 8000
    targetPort: 8000
  selector:
    app: mydjango
  type: LoadBalancer

我应用它,所有工作都在我的集群上完成,除了 kubernetes 使用 http 创建负载均衡器这一事实。

如何修改我的yaml 以使用https 而不是http 使用我的谷歌托管证书创建相同的负载均衡器?

提前非常感谢 曼努埃尔

【问题讨论】:

    标签: kubernetes google-cloud-platform kubernetes-service


    【解决方案1】:

    如果你想提供 HTTPS,你需要一个证书。为此,您可以使用Google managed certificates 关注此文档。

    您还必须定义一个入口来路由流量。

    【讨论】:

      【解决方案2】:

      我完全同意@guillaume blaquiere 提供的答案。

      您应该使用以下指南将HTTPS 连接到您的 Django。

      我还想为整个问题添加一些额外的信息/资源。


      解决以下语句:

      我应用它并在我的集群上完成所有工作,除了 kubernetes 使用 http 创建负载均衡器这一事实。

      实际上您正在创建一个网络负载均衡器(第 4 层),(TCP/UDP):

      当您创建 LoadBalancer 类型的服务时,Google Cloud 控制器会唤醒并在您的项目中配置网络负载平衡器。负载均衡器有一个稳定的 IP 地址,可以从您的项目外部访问。

      -- Cloud.google.com: Kubernetes Engine: Docs: Concepts: Service: Service of type LoadBalancer

      这种类型的负载平衡器会将数据包转发到其目的地,但它无法完成诸如基于路径的路由或 SSL 终止之类的事情。

      要能够使用 HTTPS 连接到您的 Django 应用程序,您可以:

      在整个过程中,您将使用Ingress 资源将流量转发到特定的后端。您的Ingress 控制器也将负责处理SSL

      附注!

      我认为您可以将LoadBalancer 类型的Service 更改为NodePort 类型的Service

      您最终的Ingress 定义将与以下类似:

      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        name: INGRESS_NAME
        namespace: test1
        annotations:
          kubernetes.io/ingress.global-static-ip-name: ADDRESS_NAME
          networking.gke.io/managed-certificates: CERTIFICATE_NAME
          kubernetes.io/ingress.class: "gce"
      spec:
        defaultBackend:
          service:
            name: mydjango
            port:
              number: 8080
      

      或者您可以:


      其他资源:

      我想你也可以看看这个答案(关于如何与nginx-ingress 进行通信):

      【讨论】: