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

如何在GKE上为FastAPI接口配置HTTPS

在GKE上为FastAPI配置HTTPS的最佳实践

结论:优先在GKE侧配置HTTPS

不推荐在FastAPI/uvicorn内部处理SSL,原因如下:

  • 证书管理成本高:应用层配置需要手动申请、更新证书,还要将证书文件挂载到所有Pod,维护繁琐;GKE提供的托管方案能自动完成证书的签发、续期。
  • 资源利用率低:每个Pod都处理SSL握手会消耗额外CPU资源,统一在集群入口层处理更高效。
  • 架构更规范:Kubernetes生态中,流量入口的TLS终止是标准实践,应用只需处理HTTP请求,职责更清晰。

GKE侧实现HTTPS的两种常用方案

方案1:GKE托管Ingress + Google Managed SSL证书

这是GKE原生的方案,无需额外安装组件:

  1. 创建托管SSL证书:
    编写ManagedCertificate YAML文件,指定你的域名,Google会自动通过Let's Encrypt申请证书并自动续期:

    apiVersion: networking.gke.io/v1
    kind: ManagedCertificate
    metadata:
      name: fastapi-managed-cert
    spec:
      domains:
        - your-domain.example.com
    

    执行命令创建:kubectl apply -f managed-cert.yaml

  2. 配置Ingress关联服务与证书:
    编写Ingress YAML,关联你的FastAPI Service和上面创建的托管证书:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: fastapi-ingress
      annotations:
        networking.gke.io/managed-certificates: fastapi-managed-cert
        kubernetes.io/ingress.class: "gce"
    spec:
      rules:
        - host: your-domain.example.com
          http:
            paths:
              - path: /*
                pathType: ImplementationSpecific
                backend:
                  service:
                    name: your-fastapi-service
                    port:
                      number: 80
    

    执行命令创建:kubectl apply -f ingress.yaml

  3. 配置DNS解析:
    获取Ingress分配的外部IP(kubectl get ingress fastapi-ingress),将你的域名A记录指向该IP。

方案2:NGINX Ingress Controller + Cert-Manager

如果需要更灵活的Ingress配置(比如路径重写、自定义规则),可以用这套组合:

  1. 安装NGINX Ingress Controller:
    按照官方指引将NGINX Ingress Controller部署到GKE集群。

  2. 安装Cert-Manager:
    部署Cert-Manager到集群,用于自动管理Let's Encrypt证书。

  3. 配置ClusterIssuer:
    创建ClusterIssuer资源,对接Let's Encrypt:

    apiVersion: cert-manager.io/v1
    kind: ClusterIssuer
    metadata:
      name: letsencrypt-prod
    spec:
      acme:
        server: https://acme-v02.api.letsencrypt.org/directory
        email: your-email@example.com
        privateKeySecretRef:
          name: letsencrypt-prod
        solvers:
        - http01:
            ingress:
              class: nginx
    

    执行命令创建:kubectl apply -f cluster-issuer.yaml

  4. 配置Ingress并启用TLS:
    编写Ingress YAML,指定TLS配置并关联Cert-Manager的ClusterIssuer:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: fastapi-nginx-ingress
      annotations:
        cert-manager.io/cluster-issuer: "letsencrypt-prod"
    spec:
      tls:
        - hosts:
            - your-domain.example.com
          secretName: fastapi-tls-secret
      rules:
        - host: your-domain.example.com
          http:
            paths:
              - path: /
                pathType: Prefix
                backend:
                  service:
                    name: your-fastapi-service
                    port:
                      number: 80
    

    执行命令创建:kubectl apply -f nginx-ingress.yaml

不推荐的方案:FastAPI/uvicorn内部配置SSL

如果非要在应用层处理,可通过uvicorn启动时指定证书:

uvicorn main:app --host 0.0.0.0 --port 443 --ssl-keyfile=./private-key.pem --ssl-certfile=./certificate.pem

但需要将证书文件挂载到Pod中,且需手动处理证书更新,仅适合测试场景,不建议生产环境使用。


内容的提问来源于stack exchange,提问作者Regalia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 13:31:09