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,讓他自己根據(jù)新的配置文件重新啟動(注意:如果是用kubeadm安裝的修改內(nèi)容如果錯誤,可能會導致k8s集群中的kube-apiserver全部掛掉,導致無法訪問集群,這時就需要從官網(wǎng)下載kube-apiserver二進制文件,重新拉起一個進程,再執(zhí)行刪除pod的操作),修改后文件內(nèi)容如下:
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 失敗內(nèi)容請搜索腳本之家以前的文章或繼續(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調(diào)度系統(tǒng)的案例詳解
這篇文章主要介紹了基于云服務MRS構建DolphinScheduler2調(diào)度系統(tǒng),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-05-05
阿里云kubernetes查找鏡像中jar包的方法(docker查看鏡像中的jar)
這篇文章主要給大家介紹了關于阿里云kubernetes查找鏡像中jar包的方法,也就是在docker查看鏡像中的jar,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2022-09-09
K8S內(nèi)部pod之間相互調(diào)用案例以及詳解
這篇文章主要給大家介紹了關于K8S內(nèi)部pod之間相互調(diào)用案例的相關資料,Pod是Kubernetes中最小的可部署單元,它是一個或多個容器的集合,它們共享網(wǎng)絡和存儲資源,并在同一節(jié)點上運行,需要的朋友可以參考下2023-08-08

