По какой-то причине Kubernetes не может получить образ из моей личной учетной записи в Docker Hub. Я пробовал все возможные способы создания секрета (из config.json, вводя учетные данные непосредственно в командной строке), но все равно безуспешно.
В прошлый раз я сделал docker login
и выполнил следующую команду для создания секрета:
kubectl create secret docker-registry dockerhub-credentials --from-file=.dockerconfigjson=/home/myuser/.docker/config.json
Также попробовал следующую команду (она такая же, но я подумал, что в kubectl
может быть ошибка, которая неправильно распознает параметры:
kubectl create secret generic dockerhub-credentials --from-file=.dockerconfigjson=/home/myuser/.docker/config.json --type=kubernetes.io/dockerconfigjson
После развертывания я вижу в файле YAML модуля следующее:
spec:
volumes:
...
containers:
- name: container-name
image: 'username/projects:web_api_123'
ports:
- containerPort: 80
protocol: TCP
...
imagePullPolicy: IfNotPresent
...
imagePullSecrets:
- name: dockerhub-credentials
Имя образа правильное (я проверил), и секрет с учетными данными Docker Hub был правильно назначен моему POD. Я даже пропатчил учетную запись службы по умолчанию! Но это все еще не работает.
Нет, это частный кластер Kubernetes. Я могу подключиться к index.docker.io через порт 443, используя telnet.
Хорошо, проблема заключается в пространствах имен: все мои развертывания, модули, службы и т. д. Живут внутри отдельного пространства имен, НО команда, которая создает секрет, делает это в пространстве имен «по умолчанию».
По какой-то причине я думал, что эти секреты в пространстве имен «по умолчанию» видны из другого пространства имен, но это не так. Итак, если вы хотите создать секрет конфигурации докера, вам придется сделать это с помощью YAML:
kind: Secret
apiVersion: v1
metadata:
name: dockerhub-credentials
namespace: your-namespace
data:
.dockerconfigjson: base64-encoded-/.docker/config.json
type: kubernetes.io/dockerconfigjson
См. скрипт исправления в моем ответе по адресу: stackoverflow.com/questions/68037678/… Этот скрипт исправит все учетные записи службы во всех пространствах имен.
Моей проблеме не был передан идентификатор электронной почты. Это должно быть так. kubectl create secret docker-registry regcred --docker-server=<ваш-сервер-реестра> --docker-username=<ваше-имя> --docker-password=<ваш-пароль> --docker-email=<ваш -электронная почта>
Вы используете Azure?