Nginx как прокси аутентификации для кубернет - PullRequest
0 голосов
/ 28 мая 2018

Я пытаюсь настроить nginx в качестве прокси-сервера аутентификации для kubernetes.Конечная точка аутентификации возвращает все группы для пользователя в одном заголовке, разделенном запятой (X-Groups = Group1, Group2).Но kubernetes ожидает каждой группы в отдельном заголовке.Как я могу разделить это значение заголовка запятой и добавить каждое значение с тем же именем заголовка?

Вот серверные блоки nginx (это автономный пример, который вызывает фиктивную конечную точку вместо API k8s для проверки, если прокси передает правильные заголовки или нет)

server {
    listen  80 default_server;

    location /backend {
            default_type application/json;
            return 200 '{"user": "$http_x_remote_user", "groups", "$http_x_remote_groups"}';
    }
}

server {
    listen  443 ssl default_server;

    location / {
        auth_request /_auth;

        auth_request_set $user $upstream_http_x_user;
        auth_request_set $groups $upstream_http_x_groups;

        proxy_pass http://localhost/backend;
        proxy_set_header X-Remote-User $user;
        proxy_set_header X-Remote-Groups $groups; # instead of this line I want to put some code which iterates on $groups variable value and add X-Remote-Group header for each of the value
    }

    location /_auth {
        internal;

        proxy_pass http://authentication_endpoint/login; # this returns X-User and X-Groups headers with a 200 status code for successful authentication)
        proxy_pass_request_body off;
        proxy_set_header        Content-Length "";
        proxy_set_header X-Remote-User $ssl_client_s_dn;
    }

    ssl_certificate_key "/certs/server.key";
    ssl_certificate "/certs/server.crt";

    # this is required for verifying client certificate
    ssl_verify_client       on;
    ssl_client_certificate "/certs/ca.crt";

    ssl_session_timeout  10m;
    ssl_protocols TLSv1.2;
    ssl_ciphers HIGH:SEED:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!RSAPSK:!aDH:!aECDH:!EDH-DSS-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA:!SRP;
    ssl_prefer_server_ciphers on;
 }

Ответы [ 2 ]

0 голосов
/ 07 марта 2019

Проверьте ваш файл. У вас может быть ошибка копирования / вставки.Если это не правильно, nginx молча проигнорирует сертификат вашего клиента.С надлежащим CA k8s работает хорошо для меня и передает $ ssl_client_s_dn просто отлично.

0 голосов
/ 28 мая 2018

Попробуйте проверить kube-rbac-proxy .У него есть пара опций, которые могут быть очень полезны в вашем случае:

$ kube-rbac-proxy -h 
Usage of _output/linux/amd64/kube-rbac-proxy: 
...
      --auth-header-groups-field-name string        The name of the field inside an http(2) request header to tell the upstream server about the user's groups (default "x-remote-groups")
      --auth-header-groups-field-separator string   The separator string used for concatenating multiple group names in a group header field's value (default "|")  
...

Пример его использования и манифест YAML можно найти здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...