背景: 版本: istio-1.11.0,使用 istio operator 進行安裝,全程根據官方文檔進行 link
部署 istio operator
istio operator init
建立 IstioOperator
$: kubectl apply -f - <<EOF
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
namespace: istio-system
name: example-istiocontrolplane
spec:
profile: demo
EOF
這時檢視 pod 的狀态都是正常的,但是檢視 iop 的狀态卻是錯誤的,而且這時無法建立 istio 的任何資源,比如:dr、vs 等等
[root networking]# kubectl get pod -n istio-system
NAME READY STATUS RESTARTS AGE
istio-egressgateway-f55b8c8fd-dwgtz 1/1 Running 0 17m
istio-ingressgateway-75cd9dc88b-wngvr 1/1 Running 0 17m
istiod-d746f686f-hxf6p 1/1 Running 0 17m
[root networking]# kubectl get iop -A
NAMESPACE NAME REVISION STATUS AGE
istio-system example-istiocontrolplane ERROR 9m11
直接檢視 istio operator 或者 example-istiocontrolplane 都可以看出原因都是因為一下原因,從圖中可以看出很多配置因為找不到 istiod 而建立失敗。
failed to update resource with server-side apply for obj EnvoyFilter/istio-system/tcp-stats-filter-1.11: Internal error occurred: failed calling webhook "validation.istio.io": Post https://istiod.istio-system.svc:443/validate?timeout=30s: service "istiod" not found
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIwczX0xiRGZkRGZ0Xy9GbvNGL2EzXlpXazxSP9cGZ1VzVZBHazIGaKJjYopkMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLwMDOwkDNzkTMmF2M1YjNhNWN0QjN2ATM2kjM2ATO0MzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
着手修複,兩個辦法
- 一個是繞過 istiod 驗證,
- 另一個就是一點點 debug 确認問題并修複了
因為急需使用我這裡使用了 1,但是我個人不推薦使用 1,繞過 istiod 驗證會導緻所有配置的下發都不會驗證,比如說你的 yaml 不符合規範這類最簡單的問題都不會驗證,如果大家有時間盡量不要使用方法 1
直接删除驗證配置即可,删除前儲存一份副本以防萬一…
kubectl get validatingwebhookconfiguration istiod-istio-system -o yaml > temp.yaml
kubectl delete validatingwebhookconfiguration istiod-istio-system
然後等待 istio-operator 去同步 iop,如果等不及直接删除 istio-operator,再次重新開機就會将 iop 的狀态同步為健康的。
[root networking]# kubectl get iop -A
NAMESPACE NAME REVISION STATUS AGE
istio-system example-istiocontrolplane HEALTHY 27m
這是方式不推薦,有時間的話我會 debug 看一下如何修複,更新部落格。