如何在GKE Ingress-gce中默认启用HTTPS并实现HTTP重定向
解决GKE Ingress HTTP自动重定向到HTTPS的问题
我看到你已经在GKE上配置好NodePort服务和Google托管证书,但目前用户访问http://samplesite.com时不会自动跳转到HTTPS,得手动输入https://才行。你希望在Kubernetes配置层面解决这个问题、不修改后端代码的思路完全没问题——GKE的Ingress本身就提供了原生的重定向支持,不用动应用代码就能搞定。
为什么你当前的配置没生效?
你添加的kubernetes.io/ingress.allow-http: "false"注解,作用是直接关闭Ingress的HTTP(80端口)访问,而不是把HTTP流量重定向到HTTPS。这就是为什么用户访问HTTP地址时无法正常跳转,反而可能遇到拒绝访问或404的原因。
正确解决方案:启用GKE原生HTTPS重定向
GKE有专门的注解来实现HTTP到HTTPS的自动重定向,只需调整你的Ingress配置:
- 移除
kubernetes.io/ingress.allow-http: "false"注解(需要保留80端口接收HTTP请求,才能完成跳转) - 添加
networking.gke.io/redirect-to-https: "true"注解(这是GKE原生支持的重定向开关)
修改后的完整Ingress配置示例如下:
kind: Service apiVersion: v1 metadata: name: frontend-node-service namespace: default spec: type: NodePort selector: app: frontend ports: - port: 5000 targetPort: 80 protocol: TCP name: http --- kind: Service apiVersion: v1 metadata: name: backend-node-service namespace: default spec: type: NodePort selector: app: backend ports: - port: 8081 targetPort: 9229 protocol: TCP name: http --- # Frontend Ingress - 启用重定向 apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: samplesite-ingress-frontend namespace: default annotations: kubernetes.io/ingress.global-static-ip-name: "samplesite-static-ip" networking.gke.io/redirect-to-https: "true" networking.gke.io/managed-certificates: samplesite-ssl spec: backend: serviceName: frontend-node-service servicePort: 5000 --- # Backend Ingress - 同样启用重定向 apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: samplesite-ingress-backend namespace: default annotations: kubernetes.io/ingress.global-static-ip-name: "samplesite-backend-ip" networking.gke.io/redirect-to-https: "true" networking.gke.io/managed-certificates: samplesite-api-ssl spec: backend: serviceName: backend-node-service servicePort: 8081
应用配置并验证
- 应用修改后的配置:
kubectl apply -f ingress.yaml
- 等待Ingress更新完成,可通过以下命令查看状态:
kubectl get ingress
当ADDRESS字段显示你的静态IP、STATUS为Ready时,配置就生效了。
3. 测试重定向:访问http://samplesite.com,应该会自动跳转到https://samplesite.com,同时返回301永久重定向的状态码。
额外说明
- 如果你的集群使用Kubernetes 1.19+版本,推荐把Ingress的API版本改成
networking.k8s.io/v1,这个重定向注解依然适用。 - 这个重定向是由GKE的负载均衡器(GLBC)处理的,完全在Ingress层实现,完美符合你“分离关注点”的需求,不需要应用参与任何逻辑。
内容的提问来源于stack exchange,提问作者Raven
相关产品推荐
相关产品推荐

