在K8s環境裡,當我們需要安裝第3方元件服務時,通常會使用 Helm 來安裝,省去寫一堆yaml,簡單來說Helm 將 yaml 檔打包裝起來,然後一鍵部署。前一篇文章提到在AKS裡,我使用了Helm 來安裝 prometheus ,但在另一個環璄裡卻遇到了這個錯誤
Error: INSTALLATION FAILED: failed to create resource: Internal error occurred: failed calling webhook "prometheusrulemutate.monitoring.coreos.com": failed to call webhook: Post "https://prometheus-kube-prometheus-operator.prometheus.svc:443/admission-prometheusrules/validate?timeout=10s": no endpoints available for service "prometheus-kube-prometheus-operator"
從錯誤訊息看起來,一眼就看到了443、failed to call webhook這些關鍵字,一度以為是網路問題,或是遠端伺服器無法連接,心想過個幾小時再試看看好了,畢竟後端開發久了,像是Nuget連不上也是很平常的事XD,然後幾個小時後的重試並沒有順利解決,錯誤訊息一樣,以下就快速說明怎麼處理它。
首先問題原因確實是webhook沒錯,但並不是網路問題,而是webhook設定值造成的,透過以下指令,你可以取得目前存在K8s環境裡已有建立的webhook,以我的case來說,會看到一個是prometheus的webhook
1) kubectl get validatingwebhookconfigurations.admissionregistration.k8s.io
這個環境先前已有裝過prometheus,所以會有這個 webhook存在,而這次要重裝時推測應該是新舊版本的設定值有做了調整,以致於使用Helm安裝時Webhook的叫用發生了錯誤,所以接下來使用以下指令,把這個Webhook進行刪除的動作
2) kubectl delete validatingwebhookconfigurations.admissionregistration.k8s.io prometheus-kube-prometheus-admission
完成之後,再重新使用 Helm 執行安裝 prometheus 就可以囉
3) helm install prometheus prometheus-community/kube-prometheus-stack -n prometheus
參考資源:
https://github.com/helm/charts/issues/21080
https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/
By No.18