Quiero configurar un logging de portador local con certificate autofirmado que usaré dentro de mi networking local. Estoy siguiendo las instrucciones del manual de Docker [1, 2], pero de todos modos encuentro errores.
Precisamente, mi problema es seguir. Creo un certificate autofirmado en la máquina de logging local:
openssl req \ -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key \ -x509 -days 365 -out certs/domain.crt \ -subj "/C=US/ST=Oregon/L=Portland/O=Company Name/OU=Org/CN=openmpi-dockerregistry.local"
Puse este certificate en /etc/docker/certs.d/openmpi-dockerregistry:443/ca.crt
en cada una de las máquinas locales.
Entonces comienzo el logging y empujo una image allí. Como no tengo DNS configurado dentro de mi networking, simplemente coloco una input en /etc/hosts
.
A continuación, bash tirar de la image en la máquina local, pero esta operación falla:
$ docker run -it openmpi-dockerregistry.local:443/hello-world Unable to find image 'openmpi-dockerregistry.local:443/hello-world:latest' locally docker: Error response from daemon: Get https://openmpi-dockerregistry.local:443/v2/: x509: certificate is not valid for any names, but wanted to match openmpi-dockerregistry.local. See 'docker run --help'.
Sospecho mucho del post "x509: el certificate no es válido para ningún nombre", lo que suena que no especifique CN correctamente, pero leer el certificate indica lo contrario ( salida completa ):
$ openssl x509 -text -noout -in certs/domain.crt .... Signature Algorithm: sha256WithRSAEncryption Issuer: C = US, ST = Oregon, L = Portland, O = Company Name, OU = Org, CN = openmpi-dockerregistry.local ....
Otra opción que probé es acceder al logging directamente por IP. Seguí un manual [3] y agregué IP SAN al certificate. Además, también configuro CN = *. De modo que el certificate resultante ahora contiene el siguiente ( completo ):
X509v3 extensions: X509v3 Subject Alternative Name: IP Address:<ip address>
Pero ahora, cuando trato de sacar la image, recibo el siguiente post de error:
$ docker run -it <ip>:443/hello-world Unable to find image '<ip>:443/hello-world:latest' locally docker: Error response from daemon: Get https://<ip>:443/v2/: x509: cannot validate certificate for <ip> because it doesn't contain any IP SANs. See 'docker run --help'
Aunque el file /etc/docker/certs.d/<ip>:443/ca.crt
contiene la dirección IP.
¿Podría ayudarme a encontrar una forma de extraer imágenes del logging local?
Actualizar
¿Cómo comienzo el logging de Docker?
$ docker run -d \ -v `pwd`/certs:/certs \ -e REGISTRY_HTTP_ADDR=0.0.0.0:$REGISTRY_PORT \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \ -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \ -p $REGISTRY_PORT:$REGISTRY_PORT \ --restart=always \ --name registry \ registry:2
Creo que el problema es que no copió el certificate y la key en la carpeta /etc/docker/certs.d/
.
La carpeta debería verse así:
/etc/docker/certs.d/ └── openmpi-dockerregistry.local:443 ├── client.cert ├── client.key └── ca.crt
En mi caso no tuve ca.crt
y funcionó bien.
Referencia: https://docs.docker.com/engine/security/certificates/
Implementé su configuration en mi máquina, todo funcionó bien después de copyr domain.key y domain.crt (y renombrarlos) en la carpeta /etc/docker/certs.d. La única diferencia es que utilicé openmpi-dockerregistry
como dominio en lugar de openmpi-dockerregistry.local