Kubernetes GCE Ingress未启用HSTS,强制HTTPS遇配置问题
解决GCE Ingress强制HTTPS并保留自签证书的问题
为什么之前的配置没生效?
- 你使用的是GCE Ingress控制器,
nginx.ingress.kubernetes.io/force-ssl-redirect是Nginx Ingress专用注解,GCE完全不识别,所以HTTP访问依然可以正常进入。 - 开启
kubernetes.io/ingress.allow-http: "false"后,GCE Ingress默认会自动创建并绑定Google管理的SSL证书,直接覆盖了你指定的app-tls自签证书,这就是浏览器报SSL错误的核心原因。
正确配置方案
要实现仅HTTPS访问+使用自签证书,需要调整两个关键配置:
1. 禁用HTTP并阻止自动生成Google管理证书
保留kubernetes.io/ingress.allow-http: "false"关闭HTTP端口,同时添加networking.gke.io/managed-certificates: ""注解,明确告诉GCE不要自动创建管理证书,强制使用你指定的自签证书。
2. 确认TLS配置有效性
确保tls块中secretName指向的app-tls Secret已正确创建在Ingress所在命名空间,且证书包含example.app域名(自签证书需手动导入浏览器信任,否则仍会提示证书风险)。
最终完整配置
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: app-ingress annotations: kubernetes.io/ingress.global-static-ip-name: "app-external-ip" kubernetes.io/ingress.class: "gce" kubernetes.io/ingress.allow-http: "false" # 禁用Google自动管理证书,强制使用自定义自签证书 networking.gke.io/managed-certificates: "" spec: tls: - hosts: - example.app secretName: app-tls rules: - host: example.app http: paths: - path: / pathType: Prefix backend: service: name: app-service port: number: 80
可选:配置HSTS增强安全性
如果需要启用HSTS(HTTP Strict Transport Security),可以创建FrontendConfig资源来配置:
apiVersion: networking.gke.io/v1beta1 kind: FrontendConfig metadata: name: app-hsts-config spec: redirectToHttps: enabled: true # 可选:指定重定向响应码,默认是301永久重定向 responseCodeName: MOVED_PERMANENTLY_DEFAULT # 可选:绑定自定义SSL策略,比如强制使用TLS 1.2+ sslPolicy: "custom-tls-policy"
然后在Ingress的注解中关联这个FrontendConfig:
metadata: annotations: # ...其他已有注解 networking.gke.io/v1beta1.FrontendConfig: "app-hsts-config"
内容的提问来源于stack exchange,提问作者Martin
相关产品推荐
相关产品推荐

