从 nginx-ingress 上的客户端证书中提取 CN

Dav*_*n55 3 nginx kubernetes kubernetes-ingress nginx-ingress

我正在使用 kubernetes/ingress-nginx。任务是使用 nginx 入口从客户端证书中提取 CN 字段。我搜索了一段时间,找到了解决方案:

   map  $ssl_client_s_dn  $ssl_client_s_dn_cn {
    default "";
    ~CN=(?<CN>[^/,\"]+) $CN;
  }
Run Code Online (Sandbox Code Playgroud)

但我无法将此代码改编为 nginx 入口。这就是我目前拥有的代码,但它不起作用。

nginx.ingress.kubernetes.io/http-snippets: |
  map  $ssl_client_s_dn  $ssl_client_s_dn_cn {
    default "";
    ~CN=(?<CN>[^/,\"]+) $CN;
  }
nginx.ingress.kubernetes.io/configuration-snippet: |
  proxy_set_header Remote-User $ssl_client_s_dn_cn;
Run Code Online (Sandbox Code Playgroud)

可能有人遇到过它并且知道如何正确调整它,因为我没有想法。
如果您知道更优雅的方法,请在这里分享您的知识。
提前致谢。

Dav*_*n55 8

我找到了一个解决方案,希望它可以帮助别人:

    nginx.ingress.kubernetes.io/http-snippet: |
     map  $ssl_client_s_dn  $ssl_client_s_dn_cn {
       default "";
       ~CN=(?<CN>[^/,\"]+) $CN;
     };

    nginx.ingress.kubernetes.io/location-snippet: |
     proxy_set_header REMOTE-USER $ssl_client_s_dn_cn;
Run Code Online (Sandbox Code Playgroud)

  • 感谢您提供的解决方案,只是想在这里提到,我运行“nginx-ingress-1.36.3”并且我需要一些调整。不再有“http-snippet”的注释。我将地图模块移至“ConfigMap”以调整我的 Nginx 配置,现在一切正常 https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/#http-snippet (2认同)