1.下载对应目标操作系统的安装文件,建议使用此方法,下载地址如下:
https://github.com/istio/istio/releases
2.或Linux使用如下的脚本进行下载和自动解压缩:
curl -L https://git.io/getLatestIstio | ISTIO_VERSION=1.1.5 sh -
3.进入 Istio 包目录。例如,版本为1.1.5
cd istio-1.1.5
4.目录结构介绍:
5.添加环境变量
把 istioctl 客户端加入 PATH 环境变量,如,export PATH=$PWD/bin:$PATH
1.正确安装kubernetes
Kubernetes版本为1.9以上,Istio1.1.3被测试在1.11、1.12和1.13上正常运行,此处建议使用1.11以上的版本。本文kubernetes1.13.4,Istio1.1.3,docker17.06.0-ce
2.kubernetes中Pod需满足以下要求。
kubernetes1.13.4安装Istio1.1.3。
1.进入Istio1.1.3目录
cd istio-1.1.3
2.安装 Istio 的自定义资源定义(CRD),
for i in install/kubernetes/helm/istio-init/files/crd*yaml; do kubectl apply -f $i; done
3.使用mutual TLS 的宽容模式部署istio
如果使用 mutual TLS 的宽容模式,所有的服务会同时允许明文和双向 TLS 的流量。在没有明确配置客户端进行双向 TLS 通信的情况下,客户端会发送明文流量。
该场景适用于:
运行下面的命令即可完成这一模式的安装,该文件比较大,请自行查阅。
kubectl apply -f install/kubernetes/istio-demo.yaml
3.或使用mutual TLS 的严格模式部署istio
这种方案会在所有的客户端和服务器之间使用 双向 TLS。这种方式只适合所有工作负载都受 Istio 管理的 Kubernetes 集群。所有新部署的工作负载都会注入 Istio sidecar。运行下面的命令可以安装这种方案,该文件比较大,请自行查阅。
kubectl apply -f install/kubernetes/istio-demo-auth.yaml
4.确认部署结果
确认下列 Kubernetes 服务已经部署并都具有各自的 CLUSTER-IP
kubectl get svc -n istio-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
grafana ClusterIP 172.21.211.123 3000/TCP 2m
istio-citadel ClusterIP 172.21.177.222 8060/TCP,9093/TCP 2m
istio-egressgateway ClusterIP 172.21.113.24 80/TCP,443/TCP 2m
istio-galley ClusterIP 172.21.132.247 443/TCP,9093/TCP 2m
istio-ingressgateway LoadBalancer 172.21.144.254 80:31380/TCP,443:31390/TCP,31400:31400/TCP,15011:32081/TCP,8060:31695/TCP,853:31235/TCP,15030:32717/TCP,15031:32054/TCP 2m
istio-pilot ClusterIP 172.21.105.205 15010/TCP,15011/TCP,8080/TCP,9093/TCP 2m
istio-policy ClusterIP 172.21.14.236 9091/TCP,15004/TCP,9093/TCP 2m
istio-sidecar-injector ClusterIP 172.21.155.47 443/TCP 2m
istio-telemetry ClusterIP 172.21.196.79 9091/TCP,15004/TCP,9093/TCP,42422/TCP 2m
jaeger-agent ClusterIP None 5775/UDP,6831/UDP,6832/UDP 2m
jaeger-collector ClusterIP 172.21.135.51 14267/TCP,14268/TCP 2m
jaeger-query ClusterIP 172.21.26.187 16686/TCP 2m
kiali ClusterIP 172.21.155.201 20001/TCP 2m
prometheus ClusterIP 172.21.63.159 9090/TCP 2m
tracing ClusterIP 172.21.2.245 80/TCP 2m
zipkin ClusterIP 172.21.182.245 9411/TCP 2m
如果集群在一个没有外部负载均衡器支持的环境中运行(例如 Minikube),istio-ingressgateway 的 EXTERNAL-IP 会是
确认必要的 Kubernetes Pod 都已经创建并且其 STATUS 的值是 Running:
kubectl get pods -n istio-system
NAME READY STATUS RESTARTS AGE
grafana-f8467cc6-rbjlg 1/1 Running 0 1m
istio-citadel-78df5b548f-g5cpw 1/1 Running 0 1m
istio-cleanup-secrets-release-1.1-20190308-09-16-8s2mp 0/1 Completed 0 2m
istio-egressgateway-78569df5c4-zwtb5 1/1 Running 0 1m
istio-galley-74d5f764fc-q7nrk 1/1 Running 0 1m
istio-grafana-post-install-release-1.1-20190308-09-16-2p7m5 0/1 Completed 0 2m
istio-ingressgateway-7ddcfd665c-dmtqz 1/1 Running 0 1m
istio-pilot-f479bbf5c-qwr28 2/2 Running 0 1m
istio-policy-6fccc5c868-xhblv 2/2 Running 2 1m
istio-security-post-install-release-1.1-20190308-09-16-bmfs4 0/1 Completed 0 2m
istio-sidecar-injector-78499d85b8-x44m6 1/1 Running 0 1m
istio-telemetry-78b96c6cb6-ldm9q 2/2 Running 2 1m
istio-tracing-69b5f778b7-s2zvw 1/1 Running 0 1m
kiali-99f7467dc-6rvwp 1/1 Running 0 1m
prometheus-67cdb66cbb-9w2hm 1/1 Running 0 1m
举例,部署Istio 的发布包中的 示例应用Bookinfo。在使用 kubectl apply 进行应用部署的时候,如果目标命名空间已经打上了标签 istio-injection=enabled,Istio sidecar injector 会自动把 Envoy 容器注入到你的应用 Pod 之中。
kubectl label namespace istio-injection=enabled
kubectl create -n -f .yaml
如果目标命名空间中没有打上 istio-injection 标签, 可以使用 istioctl kube-inject 命令,在部署之前手工把 Envoy 容器注入到应用 Pod 之中:
istioctl kube-inject -f .yaml | kubectl apply -f -
删除 RBAC 权限、istio-system 命名空间及其所有资源。因为有些资源会被级联删除,因此会出现一些无法找到资源的提示,可以忽略。据启用的 mutual TLS 模式进行删除:
kubectl delete -f install/kubernetes/istio-demo.yaml
kubectl delete -f install/kubernetes/istio-demo-auth.yaml