在K8s 1.27.3的GKE GCE Ingress中实现www到非www重定向
Kubernetes 1.27.3 实现 www.example.com 到 example.com 的重定向(Sidecar 方案)
核心思路
在业务Pod中添加Nginx Sidecar容器,由Nginx处理域名重定向逻辑:拦截www.example.com的请求返回301永久重定向到example.com,同时完整保留原请求的路径、参数等信息;对example.com的请求直接转发到同Pod内的业务容器。
步骤1:编写Nginx重定向配置
创建nginx-redirect.conf配置文件,内容如下:
server { listen 80; server_name www.example.com; # 301永久重定向,保留原请求的路径与参数 return 301 $scheme://example.com$request_uri; } server { listen 80; server_name example.com; # 转发请求到同Pod内的业务容器(假设业务容器监听8080端口) location / { proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
步骤2:将配置存入ConfigMap
通过YAML文件创建ConfigMap:
apiVersion: v1 kind: ConfigMap metadata: name: nginx-redirect-config data: nginx-redirect.conf: | server { listen 80; server_name www.example.com; return 301 $scheme://example.com$request_uri; } server { listen 80; server_name example.com; location / { proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
执行命令应用:kubectl apply -f configmap.yaml
步骤3:修改Deployment添加Sidecar容器
在原有业务Deployment中加入Nginx Sidecar容器,挂载ConfigMap配置:
apiVersion: apps/v1 kind: Deployment metadata: name: your-app-deployment spec: replicas: 3 selector: matchLabels: app: your-app template: metadata: labels: app: your-app spec: containers: # 原有业务容器 - name: your-app image: your-app-image:tag ports: - containerPort: 8080 # 业务容器其他配置:资源限制、环境变量等 # Nginx Sidecar容器 - name: nginx-redirect image: nginx:alpine ports: - containerPort: 80 volumeMounts: - name: nginx-config mountPath: /etc/nginx/conf.d/nginx-redirect.conf subPath: nginx-redirect.conf # 可选:添加资源限制 resources: requests: cpu: "100m" memory: "128Mi" limits: cpu: "200m" memory: "256Mi" volumes: - name: nginx-config configMap: name: nginx-redirect-config
执行命令更新Deployment:kubectl apply -f deployment.yaml
步骤4:配置Service和Ingress
Service配置
让Service指向Sidecar容器的80端口:
apiVersion: v1 kind: Service metadata: name: your-app-service spec: selector: app: your-app ports: - name: http port: 80 targetPort: 80 # 映射到Sidecar的80端口 type: ClusterIP
Ingress配置
将两个域名都指向上述Service:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: your-app-ingress annotations: # 根据使用的Ingress控制器添加对应注解(如GCE/ALB的配置注解) spec: rules: - host: www.example.com http: paths: - path: / pathType: Prefix backend: service: name: your-app-service port: number: 80 - host: example.com http: paths: - path: / pathType: Prefix backend: service: name: your-app-service port: number: 80
执行命令应用Ingress:kubectl apply -f ingress.yaml
验证重定向效果
用curl测试:
# 测试www域名重定向 curl -I http://www.example.com/test/path?key=value # 应返回301状态码,Location字段为http://example.com/test/path?key=value # 测试非www域名直接访问 curl -I http://example.com/test/path?key=value # 应返回业务应用的200状态码
内容的提问来源于stack exchange,提问作者Swapnil91color
相关产品推荐
相关产品推荐

