Генерируем сертификаты для сервера и клиента
Создаём папки для сертификатов
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 |