istio是google和ibm开发的一套基于k8s和docker技术的微服务架构,理论来自service mesh,参考资料
# curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.23.0/minikube-darwin-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
minikube支持xhyve、VirtualBox、VMwareFusion、hyperV、KVM等多种虚拟机驱动器,这里我们使用VirtualBox,请读者自行下载安装。
4、下载istio
到 Istio release 页面上,根据您的操作系统下载对应的发行
第一次执行会自动从服务器下载minikube的镜像文件,如果下载失败,重复执行多次即可。
启动成功后可以创建实例并部署(示例创建一个tomcat8.0的实例):
kubectl run hello-minikube --image=tomcat:8.0 --port=8080
发布hello-minikube
kubectl expose deployment hello-minikube --type=NodePort
查看 pods
kubectl get pods
这个过程中会发现pod一直处于ContainerCreating状态,说明过程中出现了错误
查看logs
minikube logs
通过日志可以看出是有一个镜像gcr.io/google_containers/pause-amd64:3.0 显示拉取失败,分析原因应该是 gcr.io 这个地址被墙了 。所以需要替换该镜像,设置minikube的镜像拉取策略为本地优先获取。
# 替换镜像
$ docker pull visenzek8s/pause-amd64:3.0$ docker tag visenzek8s/pause-amd64:3.0 gcr.io/google_containers/pause-amd64:3.0
# 显式设置拉取策略为 IfNotPresent
$ kubectl run hello-minikube --image=tomcat:8.0 --port=8080 --image-pull-policy=IfNotPresent
把所有出错的容器的按照这种方式修改,就可以正常启动了。
#查看k8s控制台
$ minikube dashboard
5、确认对应的 Kubernetes pod 已部署并且所有的容器都启动并运行:kubectl get pods -n istio-system
如图所示,istio已经正常启动了,如果遇到docker镜像下载失败的,可以手动去dockerstore下载相关镜像即可。
应用程序的端到端架构如下所示
kubectl get pods
所有的pod都是running状态就表示bookinfo的样例已经成功启动
3、Minikube:Minikube 不支持外部负载均衡器。您可以使用 ingress 服务的主机 IP 和 NodePort 来访问 ingress
export GATEWAY_URL=$(kubectl get po -l istio=ingress -o 'jsonpath={.items[0].status.hostIP}'):$(kubectl get svc istio-ingress -o'jsonpath={.spec.ports[0].nodePort}')
最后在浏览器访问:http://${GATEWAY_URL}/productpage
不断刷新页面,右侧的book reviews会根据配置的流量策略切换服务