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

在Google Kubernetes Engine中配置Ingress指向AWS CloudFront前端CDN

如何通过GKE Ingress配置将根路径流量导向AWS CloudFront

可以实现你的需求,但不能让Ingress直接"返回"CloudFront的内容,而是通过HTTP重定向或反向代理到CloudFront两种方式达成目标,以下是具体方案和注意事项:

方案1:HTTP重定向(地址栏会切换到CloudFront域名)

这种方式是当用户访问abcxyz.com/或你的静态IP根路径时,Ingress直接返回301/302重定向响应,让浏览器直接请求CloudFront的URL。适合不需要保留原域名的场景。

配置示例(基于Nginx Ingress Controller)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: app-ingress
  annotations:
    # 针对非/server/路径的请求执行重定向
    nginx.ingress.kubernetes.io/configuration-snippet: |
      if ($request_uri !~ ^/server/) {
        return 301 https://xxx.x.cdn.cloudfront.net$request_uri;
      }
spec:
  rules:
    - host: abcxyz.com
      http:
        paths:
          - path: /server/
            pathType: Prefix
            backend:
              service:
                name: backend-service
                port:
                  number: 80
    # 处理直接访问静态IP的情况
    - http:
        paths:
          - path: /server/
            pathType: Prefix
            backend:
              service:
                name: backend-service
                port:
                  number: 80

关键注意点

  • 重定向规则通过configuration-snippet添加条件判断,确保/server/路径的流量仍正常转发到后端服务。
  • 301是永久重定向,适合长期替换场景;如果是临时测试,可以用302临时重定向。

方案2:反向代理(保留原域名)

如果需要用户访问时仍显示abcxyz.com域名,不暴露CloudFront地址,可以让Ingress作为反向代理,将根路径请求转发到CloudFront。

配置示例(基于Nginx Ingress Controller)

首先需要创建一个无实际Pod的"占位"服务(因为Ingress的每个路径必须指定后端服务):

apiVersion: v1
kind: Service
metadata:
  name: dummy-service
spec:
  type: ClusterIP
  ports:
    - port: 80
      targetPort: 80

然后配置Ingress:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: app-ingress
  annotations:
    # 设置转发到CloudFront时的Host头,避免CloudFront返回403/404
    nginx.ingress.kubernetes.io/upstream-vhost: "xxx.x.cdn.cloudfront.net"
    # 针对非/server/路径转发到CloudFront
    nginx.ingress.kubernetes.io/configuration-snippet: |
      if ($request_uri !~ ^/server/) {
        proxy_pass https://xxx.x.cdn.cloudfront.net;
      }
spec:
  rules:
    - host: abcxyz.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: dummy-service
                port:
                  number: 80
          - path: /server/
            pathType: Prefix
            backend:
              service:
                name: backend-service
                port:
                  number: 80
    # 处理直接访问静态IP的情况
    - http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: dummy-service
                port:
                  number: 80
          - path: /server/
            pathType: Prefix
            backend:
              service:
                name: backend-service
                port:
                  number: 80

关键注意点

  • 反向代理会让GKE Ingress成为流量中转节点,可能增加请求延迟(请求路径:用户→GKE Ingress→CloudFront→用户)。
  • 确保CloudFront允许来自GKE Ingress出口IP的请求,避免被CloudFront的WAF或访问控制策略拦截。

额外说明

  • 如果你使用的是GKE默认的Ingress(Google Load Balancer Controller),它的自定义配置能力有限,无法直接实现上述规则,建议切换到Nginx Ingress Controller以获得更灵活的配置权限。
  • 完成配置后,可以删除原来的ui-deployment和ui-cluster-service,避免不必要的资源消耗。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 17:33:34