Ця сторінка показує, як створити Pod, що використовує Secret для отримання образу з приватного реєстру або сховища контейнерних образів. Існує багато приватних реєстрів, які використовуються. У цьому завданні використовується Docker Hub як приклад реєстру.
Вам треба мати кластер Kubernetes, а також інструмент командного рядка kubectl має бути налаштований для роботи з вашим кластером. Рекомендується виконувати ці настанови у кластері, що має щонайменше два вузли, які не виконують роль вузлів управління. Якщо у вас немає кластера, ви можете створити його, за допомогою minikube або використовувати одну з цих пісочниць:
Для виконання цієї вправи вам потрібно мати інструмент командного рядка docker, а також ідентифікатор Docker, та пароль до якого ви знаєте.
Якщо ви використовуєте інший приватний контейнерний реєстр, вам потрібен інструмент командного рядка для цього реєстру та будь-яка інформація для входу в реєстр.
На вашому компʼютері вам необхідно автентифікуватися в реєстрі, щоб отримати приватний образ.
Використовуйте інструмент docker, щоб увійти до Docker Hub. Докладніше про це дивіться у розділі log in на сторінці Docker ID accounts.
docker login
Коли буде запитано, введіть свій ідентифікатор Docker, а потім обрані вами облікові дані (токен доступу чи пароль до вашого Docker ID).
Процес входу створює або оновлює файл config.json, який містить токен авторизації. Ознайомтеся з тим, як Kubernetes інтерпретує цей файл.
Перегляньте файл config.json:
cat ~/.docker/config.json
Вивід містить секцію, подібну до цієї:
{
"auths": {
"https://index.docker.io/v1/": {
"auth": "c3R...zE2"
}
}
}
auth, а замість нього буде запис credsStore з назвою сховища як значення. У цьому випадку ви можете створити Secret безпосередньо. Дивіться Створення Secret, за допомогою вводу облікових даних в командному рядку.Кластер Kubernetes використовує Secret типу kubernetes.io/dockerconfigjson для автентифікації в контейнерному реєстрі для отримання приватного образу.
Якщо ви вже виконали команду docker login, ви можете скопіювати ці облікові дані в Kubernetes:
kubectl create secret generic regcred \
--from-file=.dockerconfigjson=<шлях/до/.docker/config.json> \
--type=kubernetes.io/dockerconfigjson
Якщо вам потрібно більше контролю (наприклад, встановити простір імен чи мітку для нового Secret), то ви можете налаштувати Secret перед збереженням його. Переконайтеся, що:
.dockerconfigjsondata[".dockerconfigjson"]type як kubernetes.io/dockerconfigjsonПриклад:
apiVersion: v1
kind: Secret
metadata:
name: myregistrykey
namespace: awesomeapps
data:
.dockerconfigjson: UmVhbGx5IHJlYWxseSByZWVlZWVlZWVlZWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGx5eXl5eXl5eXl5eXl5eXl5eXl5eSBsbGxsbGxsbGxsbGxsbG9vb29vb29vb29vb29vb29vb29vb29vb29vb25ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubmdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2cgYXV0aCBrZXlzCg==
type: kubernetes.io/dockerconfigjson
Якщо ви отримали повідомлення про помилку error: no objects passed to create, це може означати, що закодований у base64 рядок є недійсним. Якщо ви отримали повідомлення про помилку, подібне до Secret "myregistrykey" is invalid: data[.dockerconfigjson]: invalid value ..., це означає, що закодований у base64 рядок у даних успішно декодувався, але не може бути розпізнаний як файл .docker/config.json.
Створіть цей Secret, назвавши його regcred:
kubectl create secret docker-registry regcred \
--docker-server=<your-registry-server> \
--docker-username=<your-name> \
--docker-password=<your-pword> \
--docker-email=<your-email>
де:
<your-registry-server> — це повна доменна назва вашого приватного реєстру Docker.
Використовуйте https://index.docker.io/v1/ для DockerHub.<your-name> — це ваше імʼя користувача Docker.<your-pword> — це ваш пароль Docker.<your-email> — це ваша електронна адреса Docker.Ви успішно встановили ваші облікові дані Docker у кластері як Secret під назвою regcred.
kubectl.regcredЩоб зрозуміти вміст Secret regcred, який ви створили, спочатку перегляньте Secret у форматі YAML:
kubectl get secret regcred --output=yaml
Вивід подібний до такого:
apiVersion: v1
kind: Secret
metadata:
...
name: regcred
...
data:
.dockerconfigjson: eyJodHRwczovL2luZGV4L ... J0QUl6RTIifX0=
type: kubernetes.io/dockerconfigjson
Значення поля .dockerconfigjson — це представлення в base64 ваших облікових даних Docker.
Щоб зрозуміти, що знаходиться у полі .dockerconfigjson, конвертуйте дані Secret в читабельний формат:
kubectl get secret regcred --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode
Вивід подібний до такого:
{"auths":{"your.private.registry.example.com":{"username":"janedoe","password":"xxxxxxxxxxx","email":"jdoe@example.com","auth":"c3R...zE2"}}}
Щоб зрозуміти, що знаходиться у полі auth, конвертуйте дані, закодовані в base64, у читабельний формат:
echo "c3R...zE2" | base64 --decode
Вивід, імʼя користувача та пароль, зʼєднані через :, подібний до такого:
janedoe:xxxxxxxxxxx
Зверніть увагу, що дані Secret містять токен авторизації, аналогічний вашому локальному файлу ~/.docker/config.json.
Ви успішно встановили ваші облікові дані Docker як Secret з назвою regcred у кластері.
Нижче подано опис для прикладу Pod, який потребує доступу до ваших облікових даних Docker у regcred:
apiVersion: v1
kind: Pod
metadata:
name: private-reg
spec:
containers:
- name: private-reg-container
image: <your-private-image>
imagePullSecrets:
- name: regcred
Завантажте вищезазначений файл на свій компʼютер:
curl -L -o my-private-reg-pod.yaml https://k8s.io/examples/pods/private-reg-pod.yaml
У файлі my-private-reg-pod.yaml замініть <your-private-image> на шлях до образу у приватному реєстрі, наприклад:
your.private.registry.example.com/janedoe/jdoe-private:v1
Для отримання образу з приватного реєстру Kubernetes потрібні облікові дані. Поле imagePullSecrets у файлі конфігурації вказує, що Kubernetes повинен отримати облікові дані з Secret з назвою regcred.
Створіть Pod, який використовує ваш Secret, і перевірте, що Pod працює:
kubectl apply -f my-private-reg-pod.yaml
kubectl get pod private-reg
Також, якщо запуск Podʼа не вдається і ви отримуєте статус ImagePullBackOff, перегляньте події Pod:
kubectl describe pod private-reg
Якщо ви побачите подію з причиною, встановленою на FailedToRetrieveImagePullSecret, Kubernetes не може знайти Secret із назвою (regcred, у цьому прикладі).
Переконайтеся, що вказаний вами Secret існує і що його назва вірно вказана.
Events:
... Reason ... Message
------ -------
... FailedToRetrieveImagePullSecret ... Unable to retrieve some image pull secrets (<regcred>); attempting to pull the image may not succeed.
Pod може складатись з кількох контейнерів, образи для яких можуть бути з різних реєстрів. Ви можете використовувати кілька imagePullSecrets з одним Podʼом, і кожен може містити кілька облікових даних.
Для витягування образів з реєстрів буде спробувано кожний обліковий запис, який відповідає реєстру. Якщо жоден обліковий запис не відповідає реєстру, витягування образу буде відбуватись без авторизації або з використанням конфігурації, специфічної для виконавчого середовища.
imagePullSecrets у визначеннях контейнерів PodЕлементи на цій сторінці відносяться до сторонніх продуктів чи проєктів, які надають функціонал, необхідний для Kubernetes. Автори проєкту Kubernetes не несуть відповідальності за ці проєкти. Ознайомтесь з настановами на вебсайті CNCF для отримання докладної інформації.
Ознайомтесь з посібником з контенту перед тим, як пропонувати додавання посилання на стороні компоненти.