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

Nginx Ingress基于ssl_client_verify的多路径路由配置疑问

问题解答

关于set $service_name "yes1-mtls-backend,yes2-mtls-backend";的可行性

这种写法不可行。Nginx Ingress Controller中$service_name变量用于指定单个后端服务名称,不支持用逗号分隔多个服务。这样配置会导致Nginx无法识别有效的后端服务,请求会返回502错误。

实现SSL客户端验证成功后重定向到/v1或/v2的配置方案

根据你的需求,可通过Nginx Ingress的configuration-snippet注解添加条件重定向规则,分两种场景处理:

场景1:所有验证成功的请求统一重定向到固定路径(如/v1)

修改Ingress的configuration-snippet注解,添加重定向逻辑:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: dynamic-upstream
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/auth-tls-secret: default/ca-cert
    nginx.ingress.kubernetes.io/auth-tls-verify-client: optional
    nginx.ingress.kubernetes.io/auth-tls-verify-depth: "3"
    nginx.ingress.kubernetes.io/configuration-snippet: |
      if ($ssl_client_verify = SUCCESS) {
        # 永久重定向到/v1,保留原请求参数(如/abc会跳转到/v1/abc)
        return 301 https://$host/v1$request_uri;
        # 若需临时重定向,替换为return 302 https://$host/v1$request_uri;
      }
spec:
  rules:
  - host: xyz.com
    http:
      paths:
      - backend:
          service:
            name: no-mtls-backend
            port:
              number: 80
        path: /
        pathType: Prefix
  - host: xyz.com
    http:
      paths:
      - backend:
          service:
            name: yes1-mtls-backend
            port:
              number: 80
        path: /v2
        pathType: Prefix
  - host: xyz.com
    http:
      paths:
      - backend:
          service:
            name: yes2-mtls-backend
            port:
              number: 80
        path: /v1 
        pathType: Prefix

场景2:根据客户端证书信息区分重定向到/v1或/v2

如果需要根据客户端证书的特定字段(如CN名称)来决定跳转路径,可利用$ssl_client_s_dn_cn变量匹配证书的通用名称:

nginx.ingress.kubernetes.io/configuration-snippet: |
  if ($ssl_client_verify = SUCCESS) {
    # 匹配证书CN为client1的请求,跳转到/v1
    if ($ssl_client_s_dn_cn = "client1") {
      return 301 https://$host/v1$request_uri;
    }
    # 匹配证书CN为client2的请求,跳转到/v2
    if ($ssl_client_s_dn_cn = "client2") {
      return 301 https://$host/v2$request_uri;
    }
    # 默认跳转路径(可选)
    return 301 https://$host/v1$request_uri;
  }

注意事项

  • 确保Ingress Controller版本支持$ssl_client_verify和$ssl_client_s_dn_cn变量(主流版本均支持);
  • 重定向使用301永久重定向或302临时重定向,根据业务需求选择;
  • 原Ingress的路径配置无需修改,重定向后的请求会自动匹配对应的/v1或/v2后端服务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 02:52:12