前言
这篇文章主要是对istio官方Quick Start的实践的操作记录,大致内容与官方文档一致,但是可能会加入一些在部署中可能会遇到的问题;我进行操作的平台是k8s,所以如果你想照着此文章快速的开始部署istio,你先要确保已有一个k8s的集群,同事CNI插件与kube-dns也必须被正确的安装( 验证kube-dns是否被正确的部署);此次安装基于istio 0.6版本;
快速开始
- 首先我们需要获取到最新的版本的istio release包,可以通过
curl -L https://git.io/getLatestIstio | sh -
命令快速的获取到istio的最新版本包,同时也可以通过istio github releases下载相关对应版本与操作系统的包并进行解压,最后我们会得到一个istio-0.6.0的文件夹;
- 接下来我们需要进入到我们刚刚解压的文件夹中并将istioctl二进制文件添加到我们的PATH路径下方便之后我们调用
cd istio-0.6.0
# 如果我们希望以后都能够在任何目录使用istioctl命令
# 我们可以将下面一句添加到~/.bash_rc文件中
export PATH=$PWD/bin:$PATH
- 此时我们需要将istio的相关服务部署到k8s中,通过以下命令我们可以方便快速的进行部署
kubectl apply -f install/kubernetes/istio.yaml
- 验证部署是否成功
# 查看istio-system namespace下包含的service
kubectl get svc -n istio-system
理想结果应该是这样子的
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
istio-ingress 10.83.245.171 35.184.245.62 80:32730/TCP,443:30574/TCP 5h
istio-pilot 10.83.251.173 <none> 8080/TCP,8081/TCP 5h
istio-mixer 10.83.244.253 <none> 9091/TCP,9094/TCP,42422/TCP 5h
# 查看istio-system namespace下包含的pod
kubectl get pods -n istio-system
理想结果应该是这样子的
istio-ca-3657790228-j21b9 1/1 Running 0 5h
istio-ingress-1842462111-j3vcs 1/1 Running 0 5h
istio-sidecar-injector-184129454-zdgf5 1/1 Running 0 5h
istio-pilot-2275554717-93c43 1/1 Running 0 5h
istio-mixer-2104784889-20rm8 2/2 Running 0 5h
注意:
- 正常情况下我们能够看到kubectl的反馈信息是一大堆东西已经被创建,但是在
istio-0.6.0中可能会出现最后有一些资源没有被创建,但是这个不影响我们之后正常的使用istio;这个问题对应istio-issues-4189; - 还有一个问题就是可能我们我们创建之后,所有的情况都是看起来是正常的,但是
istio-ingress pod会一直不断的重启,在istio-0.6.0中这种情况可能是你没有正确配置kube-dns或者没有正确安装CNI插件导致的;这个问题对应istio-issues-173;
部署bookinfo验证
运行以下命令部署bookinfo实例应用
kubectl apply -f <(istioctl kube-inject --debug -f samples/bookinfo/kube/bookinfo.yaml)
验证部署:
kubectl get services
正确的输出应该想下面这样子的:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
details 10.0.0.31 <none> 9080/TCP 6m
kubernetes 10.0.0.1 <none> 443/TCP 7d
productpage 10.0.0.120 <none> 9080/TCP 6m
ratings 10.0.0.15 <none> 9080/TCP 6m
reviews 10.0.0.170 <none> 9080/TCP 6m
和
kubectl get pods
正确的输出应该想下面这样子的:
NAME READY STATUS RESTARTS AGE
details-v1-1520924117-48z17 2/2 Running 0 6m
productpage-v1-560495357-jk1lz 2/2 Running 0 6m
ratings-v1-734492171-rnr5l 2/2 Running 0 6m
reviews-v1-874083890-f0qf0 2/2 Running 0 6m
reviews-v2-1343845940-b34q5 2/2 Running 0 6m
reviews-v3-1813607990-8ch52 2/2 Running 0 6m
使用以下命令获取访问的服务地址:
export GATEWAY_URL=$(kubectl get po -l istio=ingress -n istio-system -o 'jsonpath={.items[0].status.hostIP}'):$(kubectl get svc istio-ingress -n istio-system -o 'jsonpath={.spec.ports[0].nodePort}')
验证bookinfo实例应用是否正常运行:
curl -o /dev/null -s -w "%{http_code}\n" http://${GATEWAY_URL}/productpage
# 应该输出以下值,如果输出为000或者其他500以上数字为部署失败
200