LikeMySoul
@LikeMySoul
Сис. Админ

Как передавать клиентский сертификат через proxy_pass NGINX?

Доброго времени суток!

Ситуация следующая:
Есть NGINX который будет использоваться в качестве балансировщика для API kubernetes кластера.
Изначально, я хотел тупо пробрасывать порт 6443 через stream, но выяснилось что модуль для health check'а доступен только в NGINX Plus подписке, а без него нет смысла от балансировки тк при отвале одной из нод начинаются таймауты когда очередь доходит до нее а отследить невозможно.
После этого решил попытаться создать проксирование средствами обратного прокси, но столкнулся с проблемой - реверс прокси кушает сертификаты по которым проходит авторизация у кубера. Пробовал вручную "пришивать" сертификат из конфига кубера, но это костыль по факту тк при любом обращении будет админский доступ до API.
Собственно вопрос: как это правильно реализовать в моем текущем конфиге?

host.conf
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for" '
                      '"$http_x_forwarded_client_cert" '
                      '"$http_x_forwarded_client_verify"';

    access_log /var/log/nginx/kube_apiservers/access.log main;

    upstream kube_apiservers {
        server 192.168.1.1:6443;
        server 192.168.1.2:6443;
        server 192.168.1.3:6443;
    }

    server {
        listen 6443 ssl;

        ssl_certificate /etc/nginx/ssl/nginx.crt;
        ssl_certificate_key /etc/nginx/ssl/nginx.key;

        location / {
            proxy_pass https://kube_apiservers;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header Authorization $http_authorization;
            proxy_set_header X-Forwarded-Client-Cert $ssl_client_cert;
            proxy_set_header X-Forwarded-Client-Verify $ssl_client_verify;
        }
    }


Логи
X.X.X.X - - [29/Jul/2024:13:47:50 +0000] "GET /api?timeout=32s HTTP/1.1" 403 188 "-" "kubectl/v1.30.3 (linux/amd64) kubernetes/6fc0a69" "-" "-" "-"


Реализация stream
stream {
    upstream kube_apiservers {
        server 192.168.1.1:6443;
        server 192.168.1.2:6443;
        server 192.168.1.3:6443;
    }

    server {
        listen 6443;
        proxy_pass kube_apiservers;
    }
}
  • Вопрос задан
  • 184 просмотра
Пригласить эксперта
Ответы на вопрос 1
SignFinder
@SignFinder
Wintel\Unix Engineer\DevOps
Зачем nginx, если есть например kubevip. На худой конец haproxy.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы