Istio 自動注入 sidecar 失敗導致無法訪問webhook服務的解決方法
最近工作中在部署Istio環(huán)境的過程中發(fā)現(xiàn)官方示例啟動的pod不能訪問不到Istio的webhook,這個問題也是困擾了我一天,我把他歸類到sidecar注入失敗的情況下,特此記錄,便于日后查閱。
1、第一種可能(我遇到的情況)
如果自動注入時,報如下錯誤信息:
Error from server (InternalError): error when creating "STDIN": Internal error occurred: failed calling webhook "rev.validation.istio.io": failed to call webhook: Post "https://istiod.istio-system.svc:443/validate?timeout=10s": dial tcp 10.101.106.199:443: i/o timeout
造成上述問題的原因是 kube-apiserver 的 --enable-admission-plugins 沒有配置 MutatingAdmissionWebhook,ValidatingAdmissionWebhook參數(shù),所以解決問題的方法就是找到 kube-apiserver.yaml 配置文件,我是通過kubeadm安裝的,所以路徑在 /etc/kubernetes/manifests 下,把 --enable-admission-plugins 修改為 NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook 后保存文件,刪掉 kube-apiserver 的pod,讓他自己根據新的配置文件重新啟動(注意:如果是用kubeadm安裝的修改內容如果錯誤,可能會導致k8s集群中的kube-apiserver全部掛掉,導致無法訪問集群,這時就需要從官網下載kube-apiserver二進制文件,重新拉起一個進程,再執(zhí)行刪除pod的操作),修改后文件內容如下:
apiVersion: v1 kind: Pod metadata: annotations: kubeadm.kubernetes.io/kube-apiserver.advertise-address.endpoint: 192.168.1.61:6443 creationTimestamp: null labels: component: kube-apiserver tier: control-plane name: kube-apiserver namespace: kube-system spec: containers: - command: - kube-apiserver - --advertise-address=192.168.1.61 - --allow-privileged=true - --authorization-mode=Node,RBAC - --client-ca-file=/etc/kubernetes/pki/ca.crt - --enable-admission-plugins=NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook - --enable-bootstrap-token-auth=true - --etcd-cafile=/etc/kubernetes/pki/etcd/ca.crt - --etcd-certfile=/etc/kubernetes/pki/apiserver-etcd-client.crt - --etcd-keyfile=/etc/kubernetes/pki/apiserver-etcd-client.key - --etcd-servers=https://127.0.0.1:2379 - --kubelet-client-certificate=/etc/kubernetes/pki/apiserver-kubelet-client.crt - --kubelet-client-key=/etc/kubernetes/pki/apiserver-kubelet-client.key - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname - --proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.crt - --proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client.key - --requestheader-allowed-names=front-proxy-client - --requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt - --requestheader-extra-headers-prefix=X-Remote-Extra- - --requestheader-group-headers=X-Remote-Group - --requestheader-username-headers=X-Remote-User - --secure-port=6443 - --service-account-issuer=https://kubernetes.default.svc.cluster.local - --service-account-key-file=/etc/kubernetes/pki/sa.pub - --service-account-signing-key-file=/etc/kubernetes/pki/sa.key - --service-cluster-ip-range=10.96.0.0/12 - --tls-cert-file=/etc/kubernetes/pki/apiserver.crt - --tls-private-key-file=/etc/kubernetes/pki/apiserver.key - --feature-gates=RemoveSelfLink=false image: registry.aliyuncs.com/google_containers/kube-apiserver:v1.23.0 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 8 httpGet: host: 192.168.1.61 path: /livez port: 6443 scheme: HTTPS initialDelaySeconds: 10 periodSeconds: 10 timeoutSeconds: 15 name: kube-apiserver readinessProbe: failureThreshold: 3 httpGet: host: 192.168.1.61 path: /readyz port: 6443 scheme: HTTPS periodSeconds: 1 timeoutSeconds: 15 resources: requests: cpu: 250m startupProbe: failureThreshold: 24 httpGet: host: 192.168.1.61 path: /livez port: 6443 scheme: HTTPS initialDelaySeconds: 10 periodSeconds: 10 timeoutSeconds: 15 volumeMounts: - mountPath: /etc/ssl/certs name: ca-certs readOnly: true - mountPath: /etc/pki name: etc-pki readOnly: true - mountPath: /etc/kubernetes/pki name: k8s-certs readOnly: true hostNetwork: true priorityClassName: system-node-critical securityContext: seccompProfile: type: RuntimeDefault volumes: - hostPath: path: /etc/ssl/certs type: DirectoryOrCreate name: ca-certs - hostPath: path: /etc/pki type: DirectoryOrCreate name: etc-pki - hostPath: path: /etc/kubernetes/pki type: DirectoryOrCreate name: k8s-certs status: {}
2、第二種可能
安裝 Istio 時,配置了 enableNamespacesByDefault: false
sidecarInjectorWebhook: enabled: true # 變量為true,就會為所有命名空間開啟自動注入功能。如果賦值為false,則只有標簽為istio-injection的命名空間才會開啟自動注入功能 enableNamespacesByDefault: false rewriteAppHTTPProbe: false
解決方法:
# 設置標簽 $ kubectl label namespace default istio-injection=enabled --overwrite # 查看 $ kubectl get namespace -L istio-injection NAME STATUS AGE ISTIO-INJECTION default Active 374d enabled
如果要重新禁用注入istio sidecar,執(zhí)行下面命令:
$ kubectl label namespace default istio-injection=disabled --overwrite
3、第三種可能
安裝 Istio 時,設置 autoInject: disabled
proxy: includeIPRanges: 192.168.16.0/20,192.168.32.0/20 # 是否開啟自動注入功能,取值enabled則該pods只要沒有被注解為sidecar.istio.io/inject: "false",就會自動注入。如果取值為disabled,則需要為pod設置注解sidecar.istio.io/inject: "true"才會進行注入 autoInject: disabled
解決方法:
- 第一個方法:設置
autoInject: enabled
- 第二個方法:在
Pod
或者Deployment
聲明sidecar.istio.io/inject: "true"
到此這篇關于Istio 自動注入 sidecar 失敗導致無法訪問webhook服務的文章就介紹到這了,更多相關Istio 自動注入 sidecar 失敗內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
kubernetes(k8s)安裝metrics-server實現(xiàn)資源使用情況監(jiān)控方式詳解
這篇文章主要介紹了kubernetes(k8s)安裝metrics-server實現(xiàn)資源使用情況監(jiān)控,包括Metrics?Server下載方式,?k8s集群安裝部署metrics的問題,本文給大家介紹的非常詳細,需要的朋友可以參考下2022-04-04基于云服務MRS構建DolphinScheduler2調度系統(tǒng)的案例詳解
這篇文章主要介紹了基于云服務MRS構建DolphinScheduler2調度系統(tǒng),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-05-05阿里云kubernetes查找鏡像中jar包的方法(docker查看鏡像中的jar)
這篇文章主要給大家介紹了關于阿里云kubernetes查找鏡像中jar包的方法,也就是在docker查看鏡像中的jar,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2022-09-09