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

Kubernetes NGINX Ingress测试mTLS时出现302错误求助

排查Ingress mTLS配置导致302跳转问题

问题现象

测试mTLS功能时,执行curl命令访问Ingress定义的主机my.example.com返回302错误:

$ curl https://my.example.com --cert client.crt --key client.key -k

返回内容:

<html>
<head><title>302 Found</title></head>
<body>
<center><h1>302 Found</h1></center>
<hr><center>nginx</center>
</body>
</html>

Ingress Controller日志记录:

kubectl logs ingress-nginx-controller-79236f5c-gzgwl -n ingress-nginx -f
...
192.168.219.64 - - [15/Aug/2022:17:56:53 +0000] "GET / HTTP/1.1" 302 138 "-" "curl/7.29.0" 80 0.000 [] [] - - - - ae4b4fd210

已确认通过nginx-svc的Cluster IP可正常访问后端服务。

现有Ingress配置

kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/auth-tls-secret: "default/ca-secret"
    nginx.ingress.kubernetes.io/auth-tls-verify-client: "on"
    nginx.ingress.kubernetes.io/auth-tls-verify-depth: "1"
    nginx.ingress.kubernetes.io/auth-tls-pass-certificate-to-upstream: "true"
  name: nginx-ingress
  namespace: default
spec:
  ingressClassName: nginx
  rules:
  - host: my.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx-svc
            port:
              number: 80
  tls:
  - hosts:
    - my.example.com
    secretName: tls-secret

问题排查与修复方向

302跳转大概率是Nginx Ingress Controller在mTLS验证失败时触发的默认行为,而非后端服务返回。重点排查以下几点:

  • CA证书格式有效性
    检查default/ca-secret中的CA证书是否为标准PEM格式,无多余换行或注释。执行验证命令:

    kubectl get secret ca-secret -n default -o jsonpath='{.data.ca\.crt}' | base64 -d | openssl x509 -text -noout
    

    若命令报错,说明CA证书格式错误,需重新生成标准PEM格式证书并更新secret。

  • 客户端证书信任链
    确认client.crt由ca-secret中的CA签发,信任链完整。执行验证命令:

    openssl verify -CAfile <(kubectl get secret ca-secret -n default -o jsonpath='{.data.ca\.crt}' | base64 -d) client.crt
    

    返回OK则信任链正常,否则需重新签发客户端证书。

  • mTLS验证失败后的响应配置
    当前auth-tls-verify-client: "on"强制要求客户端证书,验证失败时Nginx默认返回302。可添加注解让失败返回明确的403,便于定位:

    metadata:
      annotations:
        # 保留原有注解,新增以下配置
        nginx.ingress.kubernetes.io/auth-tls-error-page: "403"
    

    重新应用配置后,若curl返回403,说明mTLS验证失败,聚焦证书问题;若仍返回302,再排查Ingress Controller全局重定向规则。

  • Ingress Controller版本兼容性
    部分旧版本Nginx Ingress Controller存在mTLS处理bug,若上述排查无问题,建议升级至v1.2+稳定版本后重试。

内容的提问来源于stack exchange,提问作者Technext

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 20:33:21