Pobieranie obrazów z prywatnego rejestru w Kubernetes

Zbudowałem 4-węzłowy klaster kubernetes z wieloma kontenerami działającymi na CoreOS. Obrazy pochodzą z repozytoriów publicznych i prywatnych. W tej chwili muszę zalogować się do każdego węzła i ręcznie ściągnąć obrazy za każdym razem, gdy je aktualizuję. Chciałbym móc je pociągnąć automatycznie.

  1. próbowałem uruchomić docker login na każdym serwerze i umieścić .plik dockercfg w /root i / core
  2. zrobiłem również powyższe z .docker / config.json
  3. I dodano secret do kube master i dodano imagePullSecrets:
    • Nazwa: docker.io do pliku konfiguracyjnego Pod.

Podczas tworzenia pod dostaję komunikat o błędzie:

image <user/image>:latest not found

Jeśli zaloguję się i uruchomię docker pull to pociągnie obrazek. Próbowałem tego za pomocą docker.io oraz quay.io.

Author: KSB, 2015-09-23

5 answers

Kubernetes obsługuje specjalny typ tajemnicy, który można utworzyć, który będzie używany do pobierania obrazów do strąków. Więcej szczegółów tutaj .

 5
Author: Rob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-23 17:35:49

Aby dodać do tego, co powiedział @rob, od Dockera 1.7, użycie .dockercfg został wycofany i teraz używa~/.docker / config.plik json. Istnieje wsparcie dla tego typu tajnego w kube 1.1, ale musisz go utworzyć za pomocą różnych kluczy / konfiguracji typu w yaml:

Po pierwsze, base64 koduje Twoje ~/.docker/config.json:

cat ~/.docker/config.json | base64 -w0   

Zauważ, że kodowanie base64 powinno pojawić się w jednej linii, więc za pomocą-W0 wyłączamy zawijanie.

Następnie utwórz yaml plik: 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

Następnie, w Twoim yaml musisz odwołać się do registrypullsecret lub utworzyć kontroler replikacji:

apiVersion: v1
kind: Pod
metadata:
  name: my-private-pod
spec:
  containers:
    - name: private
      image: yourusername/privateimage:version
  imagePullSecrets:
    - name: registrypullsecret
 39
Author: Chief,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-08 13:27:32

Jeśli chcesz pobrać obraz z prywatnego repozytorium Docker Hub, możesz użyć poniższej opcji.

Utwórz swój tajny klucz

kubectl create secret docker-registry myregistrykey --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL

Utworzono Tajny "myregistrykey".

Następnie dodaj nowo utworzony klucz do konta usługi Kubernetes.

Pobieranie bieżącego konta usługi

kubectl get serviceaccounts default -o yaml > ./sa.yaml

Edit sa.yaml i dodaj ImagePullSecret po sekrety

imagePullSecrets:
- name: myregistrykey

Aktualizacja konta serwisu

kubectl replace serviceaccount default -f ./sa.yaml
 12
Author: Bcf Ant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-03 17:22:52

Dla centos7, plik konfiguracyjny Dockera znajduje się w /root/.dockercfg

  1. echo $(cat / root/.dockercfg) / base64-w 0
  2. Skopiuj i wklej wynik do tajnego YAML na podstawie starego formatu:

    apiVersion:  v1
    kind: Secret
    metadata:
      name: docker-secret
      type: kubernetes.io/dockercfg
    data:
      .dockercfg: <YOUR_BASE64_JSON_HERE> 
    

I zadziałało dla mnie, mam nadzieję, że to również może pomóc.

 4
Author: Jane,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-19 05:28:54

Mogę potwierdzić, że imagePullSecrets nie działa z wdrożeniem , ale możesz

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

Dodaj

imagePullSecrets:
- name: myregistrykey

Do i po Secrets, Zapisz i zakończ. I jego dzieł. Testowane z Kubernetes 1.6.7

 4
Author: delfer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-14 09:01:23