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

基于GCP与Kubernetes实现www到非www的永久重定向方案咨询

实现GKE GCE Ingress的www到非www永久重定向

要解决手动配置GCP负载均衡器高级规则会被Ingress覆盖、更新延迟的问题,直接通过Kubernetes资源配置永久重定向即可,步骤如下:

1. 创建重定向专用FrontendConfig

创建www-to-naked-redirect.yml文件,定义301永久重定向规则,同时保留HTTPS强制跳转:

apiVersion: networking.gke.io/v1beta1
kind: FrontendConfig
metadata:
  name: www-to-naked-redirect
  namespace: production
spec:
  redirectToHttps:
    enabled: true
    responseCodeName: MOVED_PERMANENTLY_DEFAULT
  urlRedirect:
    hostRedirect: marutitech.com
    pathRedirect: /
    redirectResponseCode: MOVED_PERMANENTLY_DEFAULT
    stripQuery: false

这个配置会把所有www.marutitech.com的请求,永久重定向到marutitech.com,同时保留原路径和查询参数。

2. 配置占位服务(Dummy Service)

GCE Ingress要求每个路由规则必须绑定后端服务,即使是重定向规则。创建一个占位服务:

apiVersion: v1
kind: Service
metadata:
  name: dummy-service
  namespace: production
spec:
  ports:
  - port: 80
    targetPort: 80
  selector:
    app: dummy

如果集群里已有闲置Pod,直接修改selector指向该Pod的标签即可,无需额外创建Pod。

3. 拆分Ingress配置

将原Ingress拆分为两个,分别处理非www正常流量和www重定向流量:

非www域名Ingress(正常服务)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: naked-domain-ingress
  namespace: production
  annotations:
    kubernetes.io/ingress.class: "gce"
    networking.gke.io/managed-certificates: gke-managed-cert
    networking.gke.io/v1beta1.FrontendConfig: ssl-redirect
spec:
  rules:
  - host: marutitech.com
    http:
      paths:
      - pathType: Prefix
        path: /
        backend:
          service:
            name: maruti-nextjs
            port:
              number: 80

www域名Ingress(重定向专用)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: www-redirect-ingress
  namespace: production
  annotations:
    kubernetes.io/ingress.class: "gce"
    networking.gke.io/managed-certificates: gke-managed-cert
    networking.gke.io/v1beta1.FrontendConfig: www-to-naked-redirect
spec:
  rules:
  - host: www.marutitech.com
    http:
      paths:
      - pathType: Prefix
        path: /
        backend:
          service:
            name: dummy-service
            port:
              number: 80

4. 确认托管证书覆盖双域名

确保你的GKE托管证书同时包含两个域名,否则www域名会出现SSL错误:

apiVersion: networking.gke.io/v1
kind: ManagedCertificate
metadata:
  name: gke-managed-cert
  namespace: production
spec:
  domains:
  - marutitech.com
  - www.marutitech.com

应用配置

依次执行以下命令生效:

kubectl apply -f dummy-service.yml
kubectl apply -f www-to-naked-redirect.yml
kubectl apply -f naked-domain-ingress.yml
kubectl apply -f www-redirect-ingress.yml
# 若需更新证书,执行:
kubectl apply -f managed-cert.yml

配置完成后,所有访问www.marutitech.com的请求都会被负载均衡器直接返回301重定向到marutitech.com,且配置完全由Kubernetes管理,不会被后续Ingress更新覆盖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 21:40:03