如何为 GKE Gateway 启用 HTTPS (Google 托管证书)

一、 核心目标

我们的目标是为域名 gateway.jpgcp.cloudjpgcp.shop 启用安全的 HTTPS 访问,并使用由 Google 自动管理和续订的免费 SSL 证书。

在这里插入图片描述

二、 技术选型:Google 托管证书

我们采用的是 GKE Gateway 推荐的、最现代化的方法:使用 Google 托管证书

优点

  • 完全免费: 您无需为 SSL 证书本身支付任何费用。
  • 全自动管理: Google 会自动处理证书的申请、颁发、安装和最重要的——自动续订。您再也无需担心证书过期问题。
  • 高度可信: 证书由公共 CA(如 Google Trust Services 或 Let’s Encrypt)颁发,受所有现代浏览器信任。

限制

  • 不支持通配符域名: 您不能为 *.jpgcp.cloud 这样的通配符域名申请证书,必须明确列出所有域名(如 gateway.jpgcp.cloud)。
  • 域名数量限制: 每个证书资源最多支持 100 个域名。
  • 域名长度限制: 每个域名长度不能超过 63 个字符。

对于我们的项目来说,这些限制完全不构成问题,因此使用 Google 托管证书是最佳选择。

三、 实现步骤详解

整个过程分为两步:创建证书使用证书

第一步:使用 gcloud 创建证书资源

我们没有在 k8s 目录中创建 YAML 文件,而是直接通过 gcloud 命令,向 Google Cloud 的计算引擎 API 申请了一个全球 SSL 证书。

执行的命令:

gcloud compute ssl-certificates create gke-gateway-ssl-cert \
    --domains=gateway.jpgcp.cloud,jpgcp.shop \
    --global
  • create gke-gateway-ssl-cert: 创建一个名为 gke-gateway-ssl-cert 的新证书。
  • --domains: 明确指定这个证书要保护的所有域名。
  • --global: 因为我们的 GKE Gateway 是全球性的,所以证书也必须是全球性的。

执行此命令后,Google Cloud 会开始在后台自动进行域名所有权验证并颁发证书。

第二步:修改 gateway.yaml 以使用证书

在证书创建请求发出后,我们更新了 k8s/gateway.yaml 文件,来告诉 Gateway 如何使用这个证书。

最终的 Gateway 资源配置 (k8s/gateway.yaml):

apiVersion: gateway.networking.k8s.io/v1beta1
kind: Gateway
metadata:
  name: py-api-gateway
spec:
  gatewayClassName: gke-l7-global-external-managed
  listeners:
    # ... http listener ...
    - name: https
      protocol: HTTPS
      port: 443
      allowedRoutes:
        namespaces:
          from: Same
      tls:
        mode: Terminate
        options:
          networking.gke.io/pre-shared-certs: gke-gateway-ssl-cert

第三步:深入理解 tls.mode: Terminate

您可能会问:“我们不是要启用 TLS 吗?为什么这里要‘终止’(Terminate)它?”

这是一个非常好的问题。mode: Terminate 是一种被称为 “TLS 终止” 的标准网络架构模式。它描述了加密流量如何被处理。

流量路径如下:

用户浏览器 <-- HTTPS (加密) --> GKE Gateway (负载均衡器) <-- HTTP (未加密) --> 您的应用 Pod (Nginx)

  1. 加密的外部连接:从用户的浏览器到 GKE Gateway 这一段,流量是完全加密的,保证了数据在公共互联网上传输的安全性。
  2. 在 Gateway 终止 TLSmode: Terminate 的含义是,GKE Gateway 作为加密的终点。它会使用我们配置的 SSL 证书来解密收到的 HTTPS 流量。
  3. 未加密的内部连接:在解密之后,Gateway 会将请求变为普通的、未加密的 HTTP 流量,然后通过 Google 安全的内部网络,将其转发给后端的应用 Pod。

为什么这么做?

这种模式极大地简化了后端应用的复杂性。我们的 Nginx 应用容器本身不需要配置和管理任何 SSL 证书,也无需处理 HTTPS 的加解密开销。它只需要处理最简单的 HTTP 请求即可。所有关于 TLS 的复杂工作,都由 Google 托管的、高性能的 Gateway/负载均衡器来完成了。

所以,Terminate 终止的不是“安全”,而是“加密层”。它将加密层从应用本身剥离,并前置到了网络边缘的网关上,这是一种非常高效和常见的最佳实践。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nvd11

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值