Настройка Docker для управления через Portainer с аутентификацией по сертификатам

Генерируем сертификаты для сервера и клиента

Создаём папки для сертификатов

mkdir -p /etc/docker/ssl
mkdir -p ~/.docker

Генерируем сертефикаты

openssl genrsa -out ~/.docker/ca-key.pem 2048

openssl req -x509 -new -nodes -key ~/.docker/ca-key.pem -days 10000 -out ~/.docker/ca.pem -subj ‘/CN=docker-CA’

В папке ~/.docker/ должны появится файлы:

ls ~/.docker/
ca-key.pem ca.pemcp ~/.docker/ca.pem /etc/docker/ssl

Создайте файл ~/docker/openssl.cnf со следующим содержанием:

[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name
[req_distinguished_name]
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth, clientAuth

Так же создайте такой же файл настроек для сервера /etc/docker/ssl/openssl.cnf

В Alternative Names можете указать как IP (директива IP.НОМЕР), так и доменное имя (директива DNS.НОМЕР)

[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name
[req_distinguished_name]
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth, clientAuth
subjectAltName = @alt_names[alt_names]
IP.1 = 10.119.97.26
IP.2 = 172.17.0.1
IP.3 = 127.0.0.1

Генерируем подписанный сертификат для клиента

openssl genrsa -out ~/.docker/key.pem 2048

openssl req -new -key ~/.docker/key.pem -out ~/.docker/cert.csr -subj ‘/CN=docker-client’ -config ~/.docker/openssl.cnf

openssl x509 -req -in ~/.docker/cert.csr -CA ~/.docker/ca.pem -CAkey ~/.docker/ca-key.pem -CAcreateserial -out ~/.docker/cert.pem -days 365 -extensions v3_req -extfile ~/.docker/openssl.cnf

Генерируем подписанный сертификат для сервера

openssl genrsa -out /etc/docker/ssl/key.pem 2048

openssl req -new -key /etc/docker/ssl/key.pem -out /etc/docker/ssl/cert.csr -subj ‘/CN=docker-server’ -config /etc/docker/ssl/openssl.cnf

openssl x509 -req -in /etc/docker/ssl/cert.csr -CA ~/.docker/ca.pem -CAkey ~/.docker/ca-key.pem -CAcreateserial -out /etc/docker/ssl/cert.pem -days 365 -extensions v3_req -extfile /etc/docker/ssl/openssl.cnf

Для Portainer’а необходимы будут файлы:

~/.docker/ca.pem
~/.docker/cert.pem
~/.docker/key.pem

 

Настраиваем Docker для работы с аутентификацией по сертификатам

Создаём файл (если есть, то просто добавляем следующие строки) /etc/docker/daemon.json со следующим содержанием

{
«hosts»: [«unix:///var/run/docker.sock», «tcp://0.0.0.0:2376»],
«tlsverify»: true,
«tlscacert»: «/etc/docker/ssl/ca.pem»,
«tlscert»: «/etc/docker/ssl/cert.pem»,
«tlskey»: «/etc/docker/ssl/key.pem»,
}

 

Добавляем Endpoint в Portainer

Endpoints

Name: Любое

Endpoint URL: domain_name_or_ip:2376

Public IP: public_ip (если есть, не обязательный параметр)

TLS: true

TLS mode: TLS with server and client verification

TLS CA certificate: ca.pem

TLS certificate: cert.pem

TLS key: key.pem

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *