Как добавить незащищенный сертификат реестра Docker в конфигурацию kubeadm - PullRequest
0 голосов
/ 03 октября 2019

Я довольно новичок в Kubernetes, и мне удалось развернуть приложение Angular локально, используя minikube. Но сейчас я работаю над экземпляром Bitnami Kubernetes Sandbox EC2, и у меня возникли проблемы, связанные с извлечением из реестра Docker в другом экземпляре EC2.

Всякий раз, когда я пытаюсь применить развертывание, модули регистрируют следующую ошибку

Failed to pull image "registry-url.net:5000/app": no available registry endpoint:
failed to do request: Head https://registry-url.net/v2/app/manifests/latest:
x509: certificate signed by unknown authority

Сертификат реестра Docker - это , подписанный ЦС (Comodo RSA), но мне пришлось добавить в реестр .crt и .keyфайлы в /etc/docker/certs.d/registry-url.net:5000/ для моей локальной копии minikube и docker.

Однако экземпляр Bitnami не имеет каталога /etc/docker/, и нет файла daemon.json для добавления небезопасных исключений реестра, и яЯ не уверен, где файлы сертификатов должны быть расположены для kubeadm.

Так есть ли место для размещения файлов .crt и .key для kubeadm, или есть команда IМожно запустить, чтобы добавить реестр Docker в список исключений?

Или еще лучше, есть ли способ заставить Kubernetes / Docker распознавать CA сертификатов SSL реестра?

Спасибо

Редактировать: Ниже я включил свои файлы развертывания и секретные файлы:

app-deploy.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: app
  template:
    metadata:
      labels:
        app: app
    spec:
      containers:
        - name: app
          image: registry-url.net:5000/app
          ports:
            - containerPort: 80
          env:
            ...

      imagePullSecrets:
        - name: registry-pull-secret

registry-secret.yaml

apiVersion: v1
kind: Secret
metadata:
  name: registry-pull-secret
data:
 .dockerconfigjson: <base-64 JSON>
type: kubernetes.io/dockerconfigjson

Ответы [ 2 ]

0 голосов
/ 07 октября 2019

Таким образом, я решил свою проблему, вручную установив докер с помощью следующих команд:

sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
sudo apt-get install docker-ce docker-ce-cli containerd.io

Затем мне пришлось создать структуру каталогов /etc/docker/certs.d/registry-url:5000/ и скопировать .crt и .key реестра. файлы в каталог.

Однако, это все еще не работало;но после остановки экземпляра EC2 и его повторного запуска он, похоже, извлекает данные из удаленного реестра без проблем.

Когда я первоначально запустил service kubelet restart, изменения, похоже, не вступили в силу, но перезапуск сделал свое дело. Я не уверен, есть ли лучший способ исправить мою проблему, но это было единственное решение, которое сработало для меня.

0 голосов
/ 04 октября 2019

Вам необходимо создать secret с подробностями для хранилища.

Это может быть пример загрузки изображения в репозиторий Docker:

docker login _my-registry-url_:5000  
Username (admin):  
Password:  
Login Succeeded  

docker tag _user_/_my-cool-image_  _my-registry-url_:5000/_my-cool-image_:0.1  
docker push _my-registry-url_:5000/_my-cool-image_:0.1

На этом хосте вы должны создать base64 из ~/.docker/config.json примерно так cat ~/.docker/config.json | base64 Затем вы сможете добавить его к секрету, поэтому создайте 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.

Что касается вашего pod, он должен выглядеть следующим образом:

apiVersion: v1
kind: Pod
metadata:
 name: jss
spec:
 imagePullSecrets:
  — name: registrypullsecret
 containers:
  — name: jss
    image: my-registry-url:5000/my-cool-image:0.1
...