Azure

在 AKS 上使用 Helm 的 Kubernetes NGINX 入口控制器失敗

  • September 20, 2021

設置 K8 入口控制器時,此處記錄

我無法通過“創建入口控制器”步驟在 Helm 命令步驟並將命令置於調試模式期間,我看到其中一個步驟超時:

預安裝失敗:等待條件超時

查看K8 POD日誌後發現K8系統因為auth錯誤無法連接registry。出於安全原因,以下輸出已被修改,但顯示錯誤

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”命令驗證了圖像位於容器系統資料庫中,並且如果我使用“kubectl”進行標準 K8 部署,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

我嘗試設置環境變數 CONTROLLER_TAG=v1.0.0,如文章中所述,但這無濟於事

另一種解決方法是在命令中設置版本號:3.36.0。這是成功的,但需要降級的版本

在聯繫 MS 文件站點回饋後,他們為我提供了此文件的以下修復

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

回滾並重新應用修改後的更改後,命令成功。關鍵是使用 helm uninstall 命令刪除 pod:

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”命令創建的,然後重新執行修改後的命令。

希望有人發現這個有價值的東西

引用自:https://serverfault.com/questions/1078100