Назад | Перейти на главную страницу

Kubernetes - ошибка авторизации развертывания imagePullSecrets

Я пытаюсь развернуть контейнер 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>