Fehler beim Kubernetes NGINX Ingress Controller bei Verwendung von Helm auf AKS

Fehler beim Kubernetes NGINX Ingress Controller bei Verwendung von Helm auf AKS

Bei der Einrichtung eines K8-Ingress-Controllers, der dokumentiert istHier

Ich komme nicht über den Schritt „Ingress-Controller erstellen“ hinaus. Während des Helm-Befehlsschritts und beim Versetzen des Befehls in den Debug-Modus sehe ich, dass bei einem der Schritte eine Zeitüberschreitung auftritt:

Vorinstallation fehlgeschlagen: Zeitüberschreitung beim Warten auf die Bedingung

Nach Überprüfung der K8 POD-Protokolle stellte ich fest, dass das K8-System aufgrund eines Authentifizierungsfehlers keine Verbindung zur Registrierung herstellen kann. Die folgende Ausgabe wurde aus Sicherheitsgründen geändert, zeigt jedoch den Fehler

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]

Ich habe überprüft, dass sich die Bilder in der Containerregistrierung befinden, basierend auf dem Befehl „az acr import“, und dass, wenn ich eine Standard-K8-Bereitstellung mit „kubectl“ durchführe, der K8 eine Verbindung zum ACR herstellen kann. Ich habe auch die Verbindung zwischen dem Cluster und der Registrierung mit dem folgenden Befehl überprüft, es funktioniert wie erwartet:

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

Dieser Fehler tritt nur bei Verwendung des Helm-Befehls auf.

BEARBEITEN

Nach eingehender Recherche fand ich den folgenden Artikel

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

Es scheint, dass es ein Problem mit dem Digest gibt. Ich habe im Helm-Befehl Folgendes hinzugefügt/ersetzt:

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

Beim Ausführen des geänderten Helm-Befehls befinden sich die PODs jedoch in einem Fehlerzustand mit dem folgenden Fehler

unknown flag: --controller-class

Ich habe versucht, die Umgebungsvariable CONTROLLER_TAG=v1.0.0 festzulegen, wie im Artikel beschrieben, aber das hilft nicht

Eine andere Lösung besteht darin, die Versionsnummer 3.36.0 im Befehl festzulegen. Dies ist erfolgreich, erfordert jedoch eine heruntergestufte Version

Antwort1

Nachdem ich auf der MS-Dokumentenseite Feedback eingeholt hatte, wurde mir folgender Fix für dieses Dokument bereitgestellt

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

Nach dem Zurücksetzen und erneuten Anwenden der geänderten Änderungen war der Befehl erfolgreich. Der Schlüssel bestand darin, den Pod mit dem Befehl „helm uninstall“ zu entfernen:

helm uninstall nginx-ingress --namespace ingress-basic

Entfernen Sie anschließend die ACR-Repositorys aus Ihrem ACR:

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

die mit dem Befehl „az acr import“ erstellt wurden, und führen Sie die geänderten Befehle anschließend erneut aus.

Hoffentlich findet das jemand wertvoll

Antwort2

Deaktivieren Sie für eine Weile die Authentifizierung in Ihrem ACR-Container-Registrierung:

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

Führen Sie das Helm-Diagramm erneut aus und aktivieren Sie die Authentifizierung in Ihrer Registrierung erneut, während der Controller erstellt wird.

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

Sie müssen die Version oder andere nicht ändern. Das wird Ihnen den Tag retten. Für diejenigen unter Ihnen, die glauben, dass die öffentliche Offenlegung eines ACR-Containerregisters für 9 Sekunden (die Zeit, in der der Ingress-Controller ausgeführt wird) einen Atomkrieg auslösen wird, können Sie nur bekannte Netzwerke im Netzwerkbereich Ihres ACR auf die Whitelist setzen, um unerwünschten Zugriff zu verhindern.

verwandte Informationen