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

如何在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配置:

  1. 移除kubernetes.io/ingress.allow-http: "false"注解(需要保留80端口接收HTTP请求,才能完成跳转)
  2. 添加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

应用配置并验证

  1. 应用修改后的配置:
kubectl apply -f ingress.yaml
  1. 等待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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 19:12:52