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
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.