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

如何正确配置Google Cloud CDN与Kubernetes Ingress?

GKE Ingress 与 Google Cloud CDN 配置问题解答

一、请求流程澄清

你之前对请求流程的理解存在偏差,实际正确的流程是:用户 → Google Cloud CDN 全球节点 → GCP 负载均衡器 → GKE Ingress 路由 → cdn-service → frontend-app。

你的错误假设(用户→LB→Ingress→CDN)不符合GCP的架构逻辑:Cloud CDN是作为GCP负载均衡器的后端层存在的,所有发往LB的请求都会先经过最近的CDN节点,缓存命中则直接返回,未命中才会转发到后端的GKE服务。

二、当前配置的有效性分析

你的现有配置框架是正确的:通过BackendConfig启用CDN并绑定到cdn-service,Ingress将静态资源路由到该服务。如果实际请求未经过CDN,可能是以下原因:

  • 静态IP未正确关联到启用CDN的负载均衡器
  • 首次请求或资源更新后未命中缓存(此时会显示X-Cache: MISS,但仍经过CDN节点)
  • FORCE_CACHE_ALL模式下,部分资源的响应头可能冲突导致缓存失效
  • 测试时未使用正确的域名/IP访问(需确保访问的是Ingress绑定的全球静态IP)

三、确保CDN优先处理请求的正确配置

你的配置无需大改,只需补充验证和优化:

1. 确认BackendConfig绑定生效

你的cdn-service已正确添加注解关联static-cdn-config,这一步没问题:

metadata:
  annotations:
    cloud.google.com/backend-config: '{"ports": {"80":"static-cdn-config"}}'

GKE会自动为该Service创建启用CDN的GCP后端服务,可通过GCP控制台「负载均衡」→「后端配置」验证是否开启CDN。

2. 优化BackendConfig缓存策略

推荐调整缓存模式和TTL设置,适配Next.js静态资源特性:

apiVersion: cloud.google.com/v1
kind: BackendConfig
metadata:
  name: static-cdn-config
spec:
  cdn:
    enabled: true
    cachePolicy:
      includeHost: true
      includeProtocol: true
      includeQueryString: false  # Next.js静态资源带哈希后缀,无需保留查询字符串
      queryStringBlacklist: ["utm_source", "utm_medium"]  # 忽略无关追踪参数
    cacheMode: USE_ORIGIN_HEADERS  # 优先遵循源站Cache-Control头,比FORCE_CACHE_ALL更灵活
    clientTtl: 31536000  # 客户端缓存1年
    defaultTtl: 86400    # 默认缓存1天(源站无缓存头时生效)
    maxTtl: 31536000     # 最大缓存1年
    negativeCaching: true  # 开启负缓存,缓存404等错误响应
    negativeCachingPolicy:
      - codeRange: 404
        ttl: 300  # 404错误缓存5分钟
  customResponseHeaders:
    headers:
      - "Access-Control-Allow-Origin: https://www.example.com"
      - "Cache-Control: public, max-age=31536000"  # 源站返回强缓存头

3. 验证CDN生效

通过浏览器开发者工具查看响应头:

  • 存在X-Google-Cdn字段:说明请求经过Cloud CDN
  • X-Cache: HIT:命中CDN缓存;X-Cache: MISS:未命中但已走CDN节点

四、最佳实践总结

  • 拆分资源路由:静态资源(/_next/static、/static)走CDN服务,动态请求走普通服务,避免缓存动态内容
  • 版本化静态资源:利用Next.js自动生成的哈希文件名,配合长TTL,更新时自动触发缓存失效
  • 灵活缓存模式:优先使用USE_ORIGIN_HEADERS,让源站控制缓存行为,特殊场景再用FORCE_CACHE_ALL
  • 优化缓存键:忽略无关查询参数,减少缓存碎片化,提升命中率
  • 监控缓存指标:通过GCP Cloud Monitoring查看CDN命中率、带宽节省率,及时调整策略
  • 启用全球静态IP:确保Ingress绑定全球IP,让CDN在全球节点分发缓存

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 16:33:12