#docker #kubernetes #docker-registry
#докер #kubernetes #docker-реестр
Вопрос:
У меня есть registry:2
развернутый модуль as в моем кластере kubernetes (работает на docker-for-win, WSL2). У меня есть две службы для этого модуля, как показано ниже:
apiVersion: v1
kind: Service
metadata:
name: registry-external
spec:
type: NodePort
selector:
app: registry
ports:
- protocol: TCP
port: 5000
nodePort: 32020
---
apiVersion: v1
kind: Service
metadata:
name: registry
spec:
selector:
app: registry
ports:
- name: http
protocol: TCP
port: 2100
targetPort: 5000
Итак, первый для доступа к реестру извне кластера (на порту 32020, так что я могу docker login localhost:32020
на хост-компьютере) и один для доступа к реестру изнутри (на порту 2100).
Вход в систему извне работает просто отлично. Я проверил nslookup registry
в кластере, что реестр должен быть доступен registry.default.svc.cluster.local
. Итак, я создал свой образ pull secrets с помощью
{
"auths": {
"registry.default.svc.cluster.local:2100": {
"auth": "......"
},
...
}
Когда я пытаюсь развернуть модуль с этим изображением, извлеките секрет и изображение registry.default.svc.cluster.local:2100/animage:latest
, с которым он завершается с ошибкой
dial tcp: lookup registry.default.svc.cluster.local on 192.168.65.1:53: no such host
Я озадачен этим: разве URL-адрес не должен быть действительным во время извлечения изображения?
Комментарии:
1. Хост
registry.default.svc.cluster.local
— это имя хоста, управляемое DNS Kubernetes. Когда рабочий узел извлекает изображение, он использует DNS рабочего узла. Вы пробовали разрешить узелregistry.default.svc.cluster.local
на рабочем узле в терминале (НЕ внутри модуля). Это было бы полезно для репликации проблемы. Я подозреваю, что вам нужно будет указать порт узла и хост.2. Спасибо за ваш комментарий, @JustinTamblyn. Похоже, это может быть проблемой. Знаете ли вы, как я могу выполнить nslookup на рабочем узле в кластере k8s в docker-for-win? Вся настройка k8s выполняется автоматически, поэтому я не знаком с тем, как напрямую взаимодействовать с рабочими узлами.
3. Ммм. Это сложно. Мне нравится Docker Desktop K8s, но, боюсь, я не знаю, как запускать там команды. Я подозреваю, что это то же самое, что запускать команды на рабочем столе?
4. Это приводит к отказу в подключении, но я предполагаю, что это может быть из-за отсутствия секретов извлечения изображений. Я попробую добавить это.
5. Возможно, опубликуйте это в качестве ответа — кто-то может извлечь из этого пользу в будущем 🙂
Ответ №1:
Проблема здесь в том, что извлечение выполняется в среде, где кластерный DNS-сервер kubernetes недоступен, т.Е. На узле кластера, но не в кластерном модуле (в случае kubernetes на docker-for-win он выполняется в той же сети, что и хост).
Поскольку реестр также доступен с NodePort
помощью службы, к нему можно получить nodePort
доступ через порт 32020 на localhost. Поэтому секрет извлечения изображения необходимо настроить на
{
"auths": {
"localhost:32020": {
"auth": "......"
},
...
}
и изображение для извлечения становится localhost:32020/animage:latest
.