Сбой контроллера входа Kubernetes NGINX при использовании Helm на AKS

Сбой контроллера входа Kubernetes NGINX при использовании Helm на AKS

При настройке контроллера входа K8, которая задокументированаздесь

Я не могу пройти этап «Создание Ingress-контроллера». Во время выполнения команды Helm и перевода команды в режим отладки я вижу, что на одном из этапов произошел тайм-аут:

не удалось выполнить предварительную установку: истекло время ожидания условия

После просмотра журналов K8 POD я обнаружил, что система K8 не может подключиться к реестру из-за ошибки аутентификации. Следующий вывод был изменен по соображениям безопасности, но показывает ошибку

Failed to pull image "myregistry.azurecr.io/jettech/kube-webhook-certgen:v1.5.1@sha256:...90bd8068": [rpc error: code = NotFound desc = failed to pull and unpack image "....azurecr.io/jettech/kube-webhook-certgen@sha256:....9b9e90bd8068": failed to resolve reference "myregistry.azurecr.io/jettech/kube-webhook-certgen@sha256:...190b1dcbcb9b9e90bd8068": ....azurecr.io/jettech/kube-webhook-certgen@sha256:...9b9e90bd8068: not found, rpc error: code = Unknown desc = failed to pull and unpack image "myregistry.azurecr.io/jettech/kube-webhook-certgen@sha256:...dcbcb9b9e90bd8068": failed to resolve reference "myregistry.azurecr.io/jettech/kube-webhook-certgen@sha256:...b9b9e90bd8068": failed to authorize: failed to fetch anonymous token: unexpected status: 401 Unauthorized]

Я проверил, что образы находятся в реестре контейнеров на основе команды "az acr import", и что если я выполняю стандартное развертывание K8 с помощью "kubectl", k8 может подключиться к acr. Я также проверил соединение между кластером и реестром с помощью следующей команды, оно работает так, как и ожидалось:

az aks check-acr -n <cluster> -g <rg>  --acr <acr>

Эта ошибка возникает только при использовании команды helm.

РЕДАКТИРОВАТЬ

После более детального изучения этого вопроса я нашел следующую статью

https://stackoverflow.com/questions/68949434/installing-nginx-ingress-controller-into-aks-cluster-cant-pull-image-from-azu

Похоже, возникла проблема с дайджестом. Я добавил/заменил следующее в команде helm:

--set controller.image.digest="sha256:e9fb216ace49dfa4a5983b183067e97496e7a8b307d2093f4278cd550c303899" \
--set controller.admissionWebhooks.patch.image.digest="sha256:950833e19ade18cd389d647efb88992a7cc077abedef343fa59e012d376d79b7" \

Однако при запуске измененной команды helm POD находятся в состоянии ошибки со следующей ошибкой

unknown flag: --controller-class

Я пробовал установить переменную env CONTROLLER_TAG=v1.0.0, как описано в статье, но это не помогает.

Другое решение — установить номер версии: 3.36.0 в команде. Это успешно, но требует пониженной версии

решение1

После обращения к службе обратной связи сайта документов MS мне предоставили следующее исправление для этого документа

https://github.com/MicrosoftDocs/azure-docs/issues/80321

После отката и повторного применения измененных изменений команда была успешной. Ключ был в удалении pod с помощью команды helm uninstall:

helm uninstall nginx-ingress --namespace ingress-basic

Затем удалите репозитории ACR из вашего ACR:

jettech/kube-webhook-certgen
defaultbackend-amd64
jetstack/cert-manager-controller
jetstack/cert-manager-webhook
jetstack/cert-manager-cainjector

которые были созданы с помощью команды «az acr import» и последующего повторного запуска измененных команд.

Надеюсь, кто-то найдет это ценным.

решение2

отключите аутентификацию в реестре контейнеров ACR на некоторое время:

az acr update --name my-acr-registry-name --anonymous-pull-enabled true

повторно выполните Helm Chart и повторно включите аутентификацию в реестре, поскольку контроллер создан.

az acr update --name my-acr-registry-name --anonymous-pull-enabled false

нет необходимости менять версию или что-то еще. Это спасет ваш день. Для тех из вас, кто думает, что публичное раскрытие реестра контейнеров acr на 9 секунд (время выполнения контроллера Ingress) приведет к ядерной войне, вы можете добавить в белый список только известные сети в сетевом разделе вашего acr, чтобы предотвратить нежелательный доступ.

Связанный контент