Cloudflare Full模式下K8s Nginx Ingress SSL配置返回525错误如何解决?
问题原因
HTTP 525错误是Cloudflare和源站(也就是你的Nginx Ingress控制器)进行SSL握手失败导致的。Flexible模式下Cloudflare到源站走HTTP协议,不需要验证源站SSL证书,所以访问正常;Full模式要求Cloudflare到源站必须走HTTPS协议,只要源站SSL配置有问题就会触发该报错。
修复步骤
- 第一步:验证
secret-tls有效性
首先确认该Secret存放在api命名空间下,且包含完整的证书和私钥:
检查输出的kubectl get secret secret-tls -n api -o yamldata字段下必须同时存在tls.crt和tls.key两个字段。之后验证证书域名匹配和有效期:
确认证书的Subject Alternative Name (SAN) 字段包含kubectl get secret secret-tls -n api -o jsonpath='{.data.tls\.crt}' | base64 -d | openssl x509 -text -nooutapi.mydomain.com,且证书未过期。 - 第二步:排查Nginx Ingress配置正确性
首先检查Ingress配置是否被控制器正常加载,无报错:
查看输出的Events字段,如果有证书加载失败、配置同步失败之类的报错,优先处理对应问题。kubectl describe ingress ingress-api -n api
之后手动测试源站HTTPS服务是否可用,在集群内任意可联网的Pod中执行:
如果该请求返回证书无效、连接被重置、握手失败等报错,说明源站本身HTTPS配置异常。curl -v --resolve api.mydomain.com:443:<你的Ingress控制器公网IP> https://api.mydomain.com - 第三步:修正已知的配置问题
你当前使用的extensions/v1beta1版本Ingress API已经在Kubernetes 1.19+版本中被弃用,新版本Nginx Ingress控制器对旧API的适配可能存在异常,建议升级为networking.k8s.io/v1版本的配置。
另外确认你的服务器安全组、集群网络策略没有拦截Cloudflare回源IP的443端口访问,同时不要配置过于严格的SSL加密套件,避免Cloudflare和源站无法协商出可用的加密方案。
内容的提问来源于stack exchange,提问作者alcidesmig
相关产品推荐
相关产品推荐

