从零搭建一个基于Istio的服务网格

640?wxfrom=5&wx_lazy=1


上篇文章从微服务1.0时代的三大痛点(技术门槛高,多语言支持不足和代码侵入性强)说起,由此引出服务网格的起源和演化历史。但古语有云纸上得来终觉浅,绝知此事要躬行,不亲自撸一遍命令,怎敢跟人提服务网格?本篇将教大家如何在本地从零搭建一个基于Istio的服务网格,从而对服务网格有一个更直观的认识。
1 通关密码:上上下下左左右右ABAB

640?wxfrom=5&wx_lazy=1


  • 原料:Mac一台,VPN账号一枚

  • 做法:依序安装和运行Kubernetes,Minikube,Istio


640?wxfrom=5&wx_lazy=1

2 穿墙大法:Shadowsocks

640


无论是Kubernetes、Minikube还是Istio,官方提供的安装文档都非常详尽,只要英文过关,依葫芦画瓢基本上都能跑通。但如果你在国内,还得加一个必要条件,学会如何突破网络审查[1],俗称翻墙。
Mac下的翻墙软件我首推Shadowsocks,同时支持Socks5代理和HTTP代理,最新版本可以从GitHub[2]下载。
3 小Boss:kubectl

640

3.1 安装
Kubernetes是Istio首推的运行平台,因此作为第一步,我们首先来安装kubectl,Kubernetes的命令行工具,用来控制Kubernetes集群。根据官方文档[3],Mac下安装kubectl只需要一行命令,brew install kubectl,这简单、极致的用户体验让你感动的想哭。But wait…
3.2 穿墙1:Brew
你敲完命令,踌躇满志的按下回车之后,可能会发现,屏幕迟迟没有输出,10秒、30秒、1分钟、3分钟、10分钟……恭喜你,你被墙了!
Brew[4]默认的镜像源是GitHub,而GitHub时不时会被墙,即使不被墙访问速度有时也慢的令人发指,导致Brew命令也常常超时甚至失败。解决办法要么换源,要么给GitHub配上Socks5代理。对码农而言,我更推荐后一种,方法如下:
1) 打开~/.gitconfig文件,如果不存在则新建。
2) 在文件末尾添加如下配置并保存:
[http "https://github.com"]
 proxy = socks5://127.0.0.1:1086
[https "https://github.com"]
 proxy = socks5://127.0.0.1:1086
注:socks5://127.0.0.1:1086是Shadowsocks默认开启的Socks5代理地址。
配上Socks5代理之后,一般就可以妥妥的运行Brew命令了。
3.3 验证
安装好kubectl之后,直接运行kubectl version查看版本号。完整的kubectl命令列表在这里[5]可以找到。如果想进一步学习常见的kubectl命令,可以访问Kubernetes Playground[6]完成在线练习。
4 中Boss:Minikube

640

4.1 安装
安装完kubectl,接下来就是在本地搭建Kubernetes集群,Minikube是最简单的一种搭建方式,它通过VM模拟了一个单节点的Kubernetes集群。官方文档[7]给出了Mac下的安装命令。
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64 && \
chmod +x minikube && \
sudo mv minikube /usr/local/bin/

Minikube默认使用的VM Driver是VirutalBox[8],因此启动Minikube之前,还要安装VirtualBox。
4.2 启动
安装好Minikube和VirutalBox之后,可运行如下命令第一次启动Minikube:
minikube start --docker-env HTTP_PROXY=http://<本机IP>:1087 --docker-env HTTPS_PROXY=http://<本机IP>:1087

注:官方文档给出的启动命令带有--vm-driver=xhyve,而事实上最新版本的Minikube已经废弃了xhyve driver,应去除。
4.3 穿墙2:Docker
你可能已经注意到,上面的启动命令中带了两个--docker-env参数,都指向了Shadowsocks开启的HTTP代理,为啥呢?还是因为墙。Minikube默认使用Docker作为容器运行时,并在VM中内置了一个Docker守护进程,使用的镜像源是DockerHub。如果你经常使用Docker,那你一定知道在国内使用Docker一般都要修改镜像源(比如阿里云的容器镜像服务)或者使用代理,否则拉取速度也是慢的令人发指。由于Minikube使用的是内置的Docker守护进程,使用代理更为方便,但要注意,开启Shadowsocks HTTP代理时,需要修改代理的侦听地址为本机IP,而不是默认的127.0.0.1,否则在VM中的Docker守护进程是无法访问到这个代理的。
注:--docker-env参数只有在第一次启动Minikube时需要,之后启动直接运行minikube start即可。如果需要修改代理地址,可编辑~/.minikube/machines/minikube/config.json文件。
4.4 验证
安装完Minikube之后,就可以试着创建第一个Kubernetes服务了,具体步骤参考官方文档[9]。
5 大Boss:Istio

640

5.1 安装
拿到了kubectl和Minikube两大神器,搭建Istio可以说是水到渠成了。基本步骤如下:
1) 启动Minikube
minikube start \
 --extra-config=controller-manager.ClusterSigningCertFile="/var/lib/localkube/certs/ca.crt" \
 --extra-config=controller-manager.ClusterSigningKeyFile="/var/lib/localkube/certs/ca.key" \
 --extra-config=apiserver.Admission.PluginNames=NamespaceLifecycle,LimitRanger,ServiceAccount,PersistentVolumeLabel,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota \
 --kubernetes-version=v1.9.0

2) 下载并解压Istio安装包
curl -L https://git.io/getLatestIstio | sh -

3) 进入安装目录(假设为istio-0.7),将bin/目录添加到PATH环境变量
cd istio-0.7
export PATH=$PWD/bin:$PATH

4) 部署Istio的核心组件(包括外部流量网关Ingress,管理Envoy实例生命周期的Pilot以及执行访问控制和使用策略的Mixer)到Kubernetes
kubectl apply -f install/kubernetes/istio.yaml

注:如果你需要启用Istio的Mutual TLS Authentication[10](服务身份验证)功能,可以改为运行kubectl apply -f install/kubernetes/istio-auth.yaml。
至此,一个基于Istio的服务网格就算安装完成了。One more thing,还记得上篇文章提到的服务网格所独有的边车模式吗?为了将一个具体的服务接入Istio,需要为每一个服务实例创建一个配套的边车进程。根据官方文档[11],Istio提供手动和自动两种方式来创建边车进程,前者发生于部署阶段,而后者发生于Pod创建阶段,推荐使用后者,具体步骤参考官方文档,限于篇幅,这里就不再赘述。
5.2 验证
安装完Istio之后,可运行kubectl get pods -n istio-system查看所有Istio相关的Pods,确保这些Pods都处于Running状态。然后,你就可以开始Istio的探索之旅了,建议从官方提供的Bookinginfo[12]示例应用起步,这里就不再展开。
NAME                                      READY     STATUS    RESTARTS   AGE
istio-ca-59f6dcb7d9-5mll5                 1/1       Running   18         42d
istio-ingress-779649ff5b-x2qmn            1/1       Running   26         42d
istio-mixer-7f4fd7dff-6l5g5               3/3       Running   54         42d
istio-pilot-5f5f76ddc8-6867m              2/2       Running   36         42d
istio-sidecar-injector-7947777478-gzcfz   1/1       Running   9          41d
6 小结

640


以上就是搭建一个基于Istio的服务网格的基本教程,希望能够帮助你对服务网格有一个更直观的认识。有关服务网格的进一步介绍,以后有机会我再跟你分享。
参考:
  • Istio - Overview,https://istio.io/docs/concepts/what-is-istio/overview.html

  • 数人云|万字解读:Service Mesh服务网格新生代–Istio,https://zhuanlan.zhihu.com/p/29586032


相关链接:
  1. https://zh.wikipedia.org/zh-hans/突破网络审查

  2. https://github.com/shadowsocks/ShadowsocksX-NG/releases

  3. https://kubernetes.io/docs/tasks/tools/install-kubectl/

  4. https://brew.sh/

  5. https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands

  6. https://www.katacoda.com/courses/kubernetes/playground

  7. https://kubernetes.io/docs/tutorials/stateless-application/hello-minikube/

  8. https://www.virtualbox.org/

  9. https://kubernetes.io/docs/getting-started-guides/minikube/#quickstart

  10. https://istio.io/docs/concepts/security/mutual-tls.html

  11. https://istio.io/docs/setup/kubernetes/sidecar-injection.html

  12. https://istio.io/docs/guides/bookinfo.html


原文链接:http://emacoo.cn/devops/istio-tutorial/
Kubernetes入门与进阶实战培训

640?


本次培训内容包括:Docker基础、容器技术、Docker镜像、数据共享与持久化、Docker三驾马车、Docker实践、Kubernetes基础、Pod基础与进阶、常用对象操作、服务发现、Helm、Kubernetes核心组件原理分析、Kubernetes服务质量保证、调度详解与应用场景、网络、基于Kubernetes的CI/CD、基于Kubernetes的配置管理等, 点击了解具体培训内容

640?


5月11日正式上课,点击阅读原文链接即可报名。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值