我在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已经成功注入。

广告
将在 10 秒后关闭
bannerAds