Я пытаюсь развернуть контейнер Kubernetes, извлекая образ из удаленного реестра (quay.io). Хотя он отлично работает при развертывании модуля, возникает непредвиденная проблема с авторизацией на причале при развертывании его в качестве развертывания. Не знаю, какая неправильная конфигурация в yaml вызывает проблему. Во всяком случае, вот рабочий pod yaml:
apiVersion: v1
kind: Pod
metadata:
name: private-reg
spec:
containers:
- name: private-reg-container
image: quay.io/xxx/yyy
imagePullPolicy: Always
imagePullSecrets:
- name: test-secret
и вот неработающий yaml развертывания:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: random-name-deployment
namespace: test-ns
spec:
selector:
matchLabels:
app: random-name
replicas: 1
template:
metadata:
labels:
app: random-name
spec:
restartPolicy: Always
containers:
- name: random-name
image: quay.io/xxx/yyy
imagePullPolicy: Always
ports:
- containerPort: 8080
resources:
requests:
memory: 10Mi
cpu: 0.1
limits:
memory: 10Mi
cpu: 0.1
volumeMounts:
- mountPath: /etc/config/config.yaml
name: random-name-config
subPath: config.yaml
imagePullSecrets:
- name: test-secret
volumes:
- name: random-name-config
configMap:
name: random-name-config
Выходит из строя с ошибкой:
kubectl describe:
Failed to pull image "quay.io/xxx/yyy": rpc error: code = Unknown desc = Error response from daemon: unauthorized: access to the requested resource is not authorized
Однако секрет, похоже, загружен правильно (и секрет не изменился между развертыванием модуля и развертыванием - в первом сценарии авторизация работает как шарм):
kubectl get -o yaml:
(...)
imagePullSecrets:
- name: test-secret
Что я делаю не так? Будем очень признательны за любые предложения, спасибо!
Обнаружил проблему - мой секрет был развернут в пространстве имен DEFAULT, а не TEST-NS, как должно быть. Если кто-то хочет проверить все секреты и их пространства имен:
kubectl get secrets --all-namespaces
Забавно, что Kubectl никогда не регистрировал, что секрет не может быть найден - такая информация была бы очень полезна :(
К сожалению, вы не предоставили использованные команды. Вероятно, вы забыли добавить флаг --namespace во время развертывания POD.
В Kubernetes любая команда, такая как создание, запуск, объяснение, описание, получение ... и т. Д., Автоматически ссылается на дефолт пространство имен, пока вы не укажете другое.
Итак, если вы будете использовать kubectl apply -f <pod.yaml>
pod будет создан в дефолт пространство имен. Но если вы будете использовать kubectl apply -f <pod.yaml> -n test
pod будет создан в тест пространство имен.
Вы всегда можете проверить, что содержится в указанном пространстве имен
kubectl get all --namespace <namespace_name>
Вот вы можете узнать, какие есть пространства имен.
Кроме того, для отладки очень полезны команды: kubectl describe pod <pod_name> -n <namespace>
kubectl describe deployment <name> -n <namespace>
или kubeclt get events -n <namespace>