我在Istio 1.0.5和Minikube上尝试了Automatic sidecar injection
总结
在macOS上使用minikube安装了istio 1.0.5后,我尝试了自动注入sidecar。由于istio的安装过程中遇到了一些问题,我将其记录下来以备忘。
验证环境
-
- macOS – High Sierra 10.13.6
-
- minikube – v0.32.0
-
- kubectl – 1.13.1
- helm – 2.11.0
启动minikube
如果只是进行最小的Istio安装,只需分配8 MB的内存和4个CPU启动minikube即可。但是,如果想尝试自动注入Sidecar功能,光这样是不够的。
首先,官方文件的启动命令如下。
$ minikube start --memory=8192 --cpus=4 --kubernetes-version=v1.10.0 \
--extra-config=controller-manager.cluster-signing-cert-file="/var/lib/localkube/certs/ca.crt" \
--extra-config=controller-manager.cluster-signing-key-file="/var/lib/localkube/certs/ca.key" \
--vm-driver=`your_vm_driver_choice`
由于虚拟机中证书和密钥的路径不正确,istio的Pod无法启动。据报告,这个问题在问题追踪系统中也有提到。
需要使用 minikube ssh 登录到自己的虚拟机,以确认证书和密钥的路径。对于我来说,它们位于 /var/lib/minikube/certs 目录下。因此,启动命令将类似于以下内容。
$ minikube start --memory=8192 --cpus=4 --kubernetes-version=v1.10.0 \
--extra-config=controller-manager.cluster-signing-cert-file="/var/lib/minikube/certs/ca.crt" \
--extra-config=controller-manager.cluster-signing-key-file="/var/lib/minikube/certs/ca.key" \
--vm-driver=`your_vm_driver_choice`
Istio 安装
根据下载发行版的指示,在下面的命令中下载istio。
$ curl -L https://git.io/getLatestIstio | sh -
接下来,按照 minimal istio install 的参考,执行相应的命令。
$ kubectl apply -f istio-1.0.5/install/kubernetes/helm/istio/templates/crds.yaml
这次我想尝试自动侧车注入,所以我设置了Helm对清单进行渲染的配置如下。
$ helm template istio-1.0.5/install/kubernetes/helm/istio --name istio --namespace istio-system \
--set security.enabled=false \
--set ingress.enabled=false \
--set gateways.istio-ingressgateway.enabled=false \
--set gateways.istio-egressgateway.enabled=false \
--set galley.enabled=false \
--set mixer.enabled=false \
--set prometheus.enabled=false \
--set global.proxy.envoyStatsd.enabled=false \
--set pilot.sidecar=false | kubectl apply -f -
然而,无论过了多久,在这个命令中 istio-sidecar-injector 的 Pod 都不会运行…
在“issue”的评论中,提到了可能是原因的事项。根据评论,我们尝试去除“–set security.enabled=false”的选项。
$ helm template istio-1.0.5/install/kubernetes/helm/istio --name istio --namespace istio-system \
--set ingress.enabled=false \
--set gateways.istio-ingressgateway.enabled=false \
--set gateways.istio-egressgateway.enabled=false \
--set galley.enabled=false \
--set mixer.enabled=false \
--set prometheus.enabled=false \
--set global.proxy.envoyStatsd.enabled=false \
--set pilot.sidecar=false | kubectl apply -f -
在我的环境中创建 Pod 需要花费一些时间。大约5分钟后进行确认…
$ kubectl get pods -n istio-system
NAME READY STATUS RESTARTS AGE
istio-citadel-cb5b884db-2pvhl 1/1 Running 0 6m
istio-cleanup-secrets-dgrlx 0/1 Completed 0 6m
istio-pilot-8668c69c84-lx2p7 1/1 Running 0 32m
istio-security-post-install-mkg4c 0/1 Completed 0 6m
istio-sidecar-injector-7f4c7db98c-bqfgp 1/1 Running 0 32m
Istio所需的Pod已创建。
试用自动侧车注入功能。
根据文档的指示,使用示例文件来注入 istio-proxy。
$ kubectl label namespace sandbox istio-injection=enabled
namespace/sandbox labeled
$ kubectl get namespace -L istio-injection
NAME STATUS AGE ISTIO-INJECTION
default Active 39m
istio-system Active 37m
kube-public Active 39m
kube-system Active 39m
sandbox Active 37m enabled
$ kubectl apply -f ./istio-1.0.5/samples/sleep/sleep.yaml
service/sleep created
deployment.extensions/sleep created
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
sleep-79cc87b6b9-t7rlp 2/2 Running 0 2m
容器数量增加到了两个。Istio-proxy已经成功注入。