Я настроил личный реестр docker с самозаверяющими сертификатами.
docker run -d -p 443:5000 --restart=always --name registry -v `pwd`/auth:/auth
-e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm"
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd -v `pwd`/certs:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/domain.crt
-e REGISTRY_HTTP_TLS_KEY=/domain.key
domain.crt и domain.key создаются с использованием OpenSSL.
Для подключения из удаленный хост,
cp domain.crt /etc/pki/ca-trust/source/anchors/mydockerregistry.com.crt
update-ca-trust
systemctl daemon-reload
systemctl restart docker
После этого я могу войти с удаленного хоста
docker login mydockerregistry.com --username=test
password: test
Я могу нажать / вытащить образ в этот реестр, и он успешен.
Аналогичным образом я попытался развернуть этот образ в кластере Kubernetes. Я создал секрет с реестром с именем пользователя и паролем.
kubectl create secret docker-registry my-registry --docker-server=mydockerregistry.com --docker-username=test --docker-password=test --docker-email=abc.com
Кроме того, я сделал самозаверяющие сертификаты из docker шагов реестра в рабочих узлах,
cp domain.crt /etc/pki/ca-trust/source/anchors/mydockerregistry.com.crt
update-ca-trust
systemctl daemon-reload
systemctl restart docker
С учетом имени в файле imagePullSecrets файла deploy.yaml. Я пытаюсь создать POD в кластере Kubernetes (сеть Calico), но не могу получить образ.
deploy.yaml
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: test-image
labels:
app: test-image
chart: test-image
spec:
containers:
- name: {{ .Chart.Name }}
image: "mydockerregistry.com/test-image:latest"
imagePullPolicy: Always
imagePullSecrets:
- name: my-registry
Предупреждение не удалось 45 с (x2 более 59 с) kubelet, kube-worker-02 Не удалось получить изображение "mydockerregistry.com/test-image:latest": rp c ошибка: code = Unknown des c = неавторизовано : требуется проверка подлинности
Предупреждение не удалось
45 с (x2 свыше 59 с) kubelet, kube-worker-02 Ошибка: ErrImagePull
Я проверил docker журналы реестра,
time = "2020-01-13T14: 58: 05.269921112Z" level = error msg = "ошибка аутентификации пользователя" ": ошибка аутентификации" go .version = go1.11.2 http.request.host = mydockerregistry.com http.request.id = 02fcccff-9a30-443 c -8a00-48bcacb90e99 http.request.method = GET http.request.remoteaddr = "10.76. 112.148: 35454 "http.request.uri =" / v2 / test-image / manifes / latest "http.request.useragent =" docker / 1.13.1 go / go1.10.8 kernel / 3.10.0-957.21.3.el 7.x86_64 os / linux arch / amd64 UpstreamClient (Go -http-client / 1.1) "vars.name = test-image vars.reference = latest
time =" 2020-01-13T14 : 58: 05.269987492Z " level = warning msg =" ошибка авторизации контекста: basi c проблема аутентификации для области "Registry Registry": ошибка аутентификации "go .version = go1.11.2 http.request.host = mydockerregistry.com http.request.id = 02fcccff-9a30-443 c -8a00-48bcacb90e99 http.request.method = GET http.request.remoteaddr = "10.76.112.148:35454" http.request.uri = "/ v2 / ca-config-calc / manifest / latest" http.request.useragent = "docker / 1.13.1 go / go1.10.8 kernel / 3.10.0-957.21.3.el7.x86_64 os / linux arch / amd64 UpstreamClient (Go -http-client / 1.1) "vars.name = test-image vars.reference = latest
Я могу docker войти в мой домен регистрации и вытащить образ с рабочего узла
Что-то мне не хватает в конфигурации?