для настольного компьютера Mac OSX порты tcp демона docker внутренней виртуальной машины xhyve / bhyve HyperKit (которая запускает демон docker) не доступны хосту (моему ноутбуку Mac)
настройки -> Демон -> Дополнительно:
{
"experimental" : false,
"tlskey" : "/path/to/certs/docker-server-tls-key.pem",
"tls" : true,
"tlscert" : "/path/to/certs/docker-server-tls-cert.pem",
"tlscacert" : "/path/to/certs/docker-ca-cert.pem",
"debug" : true
}
после https://github.com/docker/for-mac/issues/770 Мне удалось получить доступ к интерфейсу докера через незащищенный порт 2375 через контейнер socast, например:
UNSECURE_PORT=2375
docker run --name socat$UNSECURE_PORT --restart always -d \
-v /var/run/docker.sock:/var/run/docker.sock \
-p 0.0.0.0:$UNSECURE_PORT:$UNSECURE_PORT \
bobrik/socat \
TCP-LISTEN:$UNSECURE_PORT,fork UNIX-CONNECT:/var/run/docker.sock
но мне нужно получить доступ к API через защищенный порт tls / ssl 2376
Я создал самозаверяющие сертификаты и пытаюсь приспособить вышеперечисленное к своим потребностям, но я не понимаю правильно
Есть идеи?
моя последняя попытка выглядит примерно так:
SECURE_PORT=2376
CERTSDIR="/path/to/certs"
TLSCACERT="docker-ca-cert.pem"
TLSCERT="docker-server-tls-cert.pem"
TLSKEY="docker-server-tls-key.pem"
docker run --name socat$SECURE_PORT --restart always -d \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $CERTSDIR:/certs \
-p 0.0.0.0:$SECURE_PORT:$SECURE_PORT \
bobrik/socat \
openssl-listen:$SECURE_PORT,fork,reuseaddr,cert=/certs/$TLSCERT,cafile=/certs/$TLSCACERT,key=/certs/$TLSKEY UNIX-CONNECT:/var/run/docker.sock
$ cd /path/to/certs
$ docker --tls --tlscacert=docker-ca-cert.pem --tlscert=docker-server-tls-cert.pem --tlskey=docker-server-tls-key.pem -H 0.0.0.0:2376 version
Client: Docker Engine - Community
Version: 18.09.2
API version: 1.39
Go version: go1.10.8
Git commit: 6247962
Built: Sun Feb 10 04:12:39 2019
OS/Arch: darwin/amd64
Experimental: true
error during connect: Get https://0.0.0.0:2376/v1.39/version: remote error: tls: handshake failure
Будем благодарны за любые идеи или другие достижения!
EDIT
ок, похоже, проблема с моим самозаверяющим сертификатом
error during connect: Get https://0.0.0.0:2376/v1.39/version: x509: cannot validate certificate for 0.0.0.0 because it doesn't contain any IP SANs
, поэтому я сгенерировал новые самозаверяющие сертификаты с:
CN=my.dev
и echo subjectAltName = DNS:www.my.dev,DNS:*.my.dev,IP:127.0.0.1,IP:0.0.0.0 >> extfile.cnf
но теперь я получаю ошибку:
$ docker --tls --tlsverify --tlscacert=docker-ca-cert.pem --tlscert=docker-server-tls-cert.pem --tlskey=docker-server-tls-key.pem -H 0.0.0.0:2376 version
error during connect: Get https://0.0.0.0:2376/v1.39/version: x509: certificate is not authorized to sign other certificates