docker - imagenes - Extracción de imágenes del registro privado en Kubernetes
download docker image (5)
Puedo confirmar que imagePullSecrets no funciona con la implementación , pero puede
kubectl create secret docker-registry myregistrykey --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL
kubectl edit serviceaccounts default
Añadir
imagePullSecrets:
- name: myregistrykey
Para el y después de Secrets
, guardar y salir. Y su trabajo. Probado con Kubernetes 1.6.7
Construí un clúster de kubernetes de 4 nodos ejecutando pods de varios contenedores que se ejecutan en CoreOS. Las imágenes provienen de repositorios públicos y privados. Ahora mismo debo iniciar sesión en cada nodo y manualmente desplegar las imágenes cada vez que las actualizo. Me gustaría poder tirar de ellos automáticamente.
- He intentado ejecutar el inicio de sesión de Docker en cada servidor y poner el archivo .dockercfg en / root y / core
- También he hecho lo anterior con .docker / config.json
- He agregado el secreto al maestro de kube y he añadido imagePullSecrets:
- nombre: docker.io al archivo de configuración del Pod.
Cuando creo el pod, aparece el mensaje de error Error:
image <user/image>:latest not found
Si inicio sesión y ejecuto el acoplador de extracción, extraerá la imagen. Lo he intentado usando docker.io y quay.io.
Kubernetes admite un tipo especial de secreto que puede crear y que se usará para obtener imágenes para sus pods. Más detalles aquí: http://kubernetes.io/v1.0/docs/user-guide/images.html#specifying-imagepullsecrets-on-a-pod
Para agregar a lo que @rob dijo, a partir de Docker 1.7, el uso de .dockercfg ha quedado en desuso y ahora usan un archivo ~ / .docker / config.json. Hay soporte para este tipo de secreto en kube 1.1, pero debe crearlo usando diferentes claves / configuración de tipo en el yaml:
Primero, base64 codifica tu ~/.docker/config.json
:
cat ~/.docker/config.json | base64
A continuación, crea un archivo yaml: my-secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: registrypullsecret
data:
.dockerconfigjson: <base-64-encoded-json-here>
type: kubernetes.io/dockerconfigjson
-
$ kubectl create -f my-secret.yaml && kubectl get secrets
NAME TYPE DATA
default-token-olob7 kubernetes.io/service-account-token 2
registrypullsecret kubernetes.io/dockerconfigjson 1
Luego, en el yaml de tu pod, necesitas hacer referencia a registrypullsecret
o crear un controlador de replicación:
apiVersion: v1
kind: Pod
metadata:
name: my-private-pod
spec:
containers:
- name: private
image: yourusername/privateimage:version
imagePullSecrets:
- name: registrypullsecret
Para centos7, el archivo de configuración del acoplador está en /root/.dockercfg
- echo $ (cat /root/.dockercfg) | base64 -w 0
Copie y pegue el resultado en YAML secreto basado en el formato anterior:
apiVersion: v1 kind: Secret metadata: name: docker-secret type: kubernetes.io/dockercfg data: .dockercfg: <YOUR_BASE64_JSON_HERE>
Y funcionó para mí, espero que también pueda ayudar.
Si necesita extraer una imagen de un repositorio de Docker Hub privado, puede usar lo siguiente.
Crea tu clave secreta
kubectl create secret docker-registry myregistrykey --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL
secreto "myregistrykey" creado.
A continuación, agregue la clave recién creada a su cuenta de servicio de Kubernetes.
Recuperar la cuenta de servicio actual
kubectl get serviceaccounts default -o yaml > ./sa.yaml
Edite sa.yaml y agregue ImagePullSecret después de Secrets
imagePullSecrets:
- name: myregistrykey
Actualiza la cuenta de servicio
kubectl replace serviceaccount default -f ./sa.yaml