You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为GKE内部负载均衡器(Internal Load Balancer)配置SSL证书以实现内部HTTPS端点

如何为GKE内部负载均衡器(Internal Load Balancer)配置SSL证书以实现内部HTTPS端点

嗨,我完全理解你的需求——给GKE里的内部负载均衡器配上HTTPS,同时严格保持服务只在GCP内部可见,不对外暴露。这在企业内部服务、跨VPC内部访问的场景里太实用了,下面给你几个靠谱的方案:

方案一:用GKE内部Ingress搭配内部SSL证书(推荐)

你之前试过Ingress但担心暴露到公网?其实GKE有专门的内部Ingress,它只会绑定到你的VPC内部IP,完全不会对外网开放。搭配内部SSL证书就能实现安全的内部HTTPS访问:

  1. 创建内部SSL证书
    你有两种选择:

    • 用GCP证书管理器申请内部可信证书:适合有内部域名(比如internal.yourcompany.com)的场景,证书会被GCP内部资源自动信任。
    • 生成自签证书:如果只是测试或者小型内部场景,用openssl生成即可,之后要把根证书分发给内部客户端才能避免警告。
      把证书和密钥存成Kubernetes Secret:
    kubectl create secret tls internal-ingress-tls --cert=./tls.crt --key=./tls.key
    
  2. 配置内部Ingress资源
    写一个Ingress YAML,重点要加上内部Ingress的标识,确保它不会变成公网Ingress:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: internal-ingress
      annotations:
        # 针对GKE 1.20及以下版本用这个注解
        kubernetes.io/ingress.class: "gce-internal"
        # GKE 1.21+推荐用spec.ingressClassName替代上面的注解
    spec:
      # 1.21+版本添加这行
      # ingressClassName: "gce-internal"
      tls:
      - hosts:
        - internal.yourcompany.com
        secretName: internal-ingress-tls
      rules:
      - host: internal.yourcompany.com
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: your-internal-service
                port:
                  number: 80
    

    应用这个配置后,GKE会创建一个内部IP的Ingress,只有VPC内的机器能访问。

  3. 验证访问
    在VPC内的GCP VM或者容器里,用curl https://internal.yourcompany.com测试,确认HTTPS正常且证书有效。

方案二:直接给内部LB Service配置SSL(无需Ingress)

如果你不想用Ingress,也可以直接在Pod层面处理SSL终止,让内部LB直接转发HTTPS流量:

  1. 创建SSL证书Secret
    和方案一一样,先把证书和密钥存成Secret:

    kubectl create secret tls internal-service-tls --cert=./tls.crt --key=./tls.key
    
  2. 修改Deployment,让应用启用HTTPS
    更新你的Deployment配置,把Secret挂载到容器里,同时配置应用使用证书和密钥监听443端口。比如如果是Nginx应用,挂载证书到/etc/nginx/ssl,然后修改Nginx配置启用HTTPS。

  3. 更新内部LB Service
    修改Service的端口配置,把外部端口和目标端口都改成443:

    apiVersion: v1
    kind: Service
    metadata:
      name: your-internal-service
      annotations:
        cloud.google.com/load-balancer-type: "Internal"
    spec:
      type: LoadBalancer
      ports:
      - port: 443
        targetPort: 443
        protocol: TCP
      selector:
        app: your-app
    

    这样内部LB就会把HTTPS流量直接转发到Pod的443端口,全程保持内部访问。

方案三:用GCP私有CA签发可信证书(企业级场景)

如果是企业内部环境,追求更高的安全性和可信性,可以用GCP的私有CA服务签发内部证书。这种证书会被GCP的VM、容器等内部资源自动信任,不需要客户端手动导入根证书:

  1. 在GCP控制台创建私有CA(或者对接企业现有内部CA)。
  2. 为你的内部域名申请证书,导入到Kubernetes Secret或者GCP证书管理器。
  3. 不管用Ingress还是直接Service,都用这个可信证书配置HTTPS即可。

关键注意事项

  • 避免公网暴露:用内部Ingress时一定要加对ingress.class注解或者ingressClassName,否则会默认创建公网Ingress。
  • 内部域名映射:可以用GCP内部DNS把内部LB的IP映射到自定义内部域名,方便内部用户访问。
  • 防火墙规则:确保VPC防火墙允许内部流量访问443端口,否则会出现连接超时。

备注:内容来源于stack exchange,提问作者Aditya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 10:33:06