GridIstioIstio是一个开源的ServiceMesh实现,一般用于Kubernetes集群容器中的连接、监控和保护。其核心特点是:流量管理通过简单的配置实现服务之间的流量;简化服务级别的属性,例如断路器、超时和重试;支持A/B测试、金丝雀发布等安全通信层面的安全控制;开发人员只需要专注于应用程序开发。可观察性指标;记录;追踪。平台支持Kubernetes;各种云平台。Istio的架构分为数据平台和控制平面。数据平面通过Sidecar代理工作,如下:2在Kubernetes上安装istio2.1创建服务器。为了避免图片下载慢或者不可用的问题,我们以阿里云香港的服务器为例。为了省钱,我用的是抢占式实例,8CPU16GB内存,大概0.28/小时,用完了就删掉。CPU:8核内存:16GB系统:Ubuntu20.0464位价格:0.28/小时公网IP:有带宽计费方式:按流量使用峰值带宽:最大测试登录如下:sshroot@xx.xxx.xxx。xxx$free-htotalusedfreesharedbuff/cacheavailableMem:15Gi153Mi15Gi2.0Mi325Mi15Gi连接正常,现在可以使用了。2.2安装Kubernetes这里不打算创建Kubernetes集群,所以只用一台机器。有兴趣的可以看看文章《详细记录用kubeadm在Ubuntu上安装Kubernetes集群》。这里通过minikube启动kubernetes,我们一步步安装:#必要的更新$apt-getupdate-y$apt-getupgrade-y#下载kubectl命令行工具$curl-LO"https://dl.k8s.io/release/$(curl-L-shttps://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"#执行权限$chmoda+xkubectl$mv./kubectl/usr/local/bin/kubectl#安装Docker$apt-getinstall-ydocker.io#检测Docker安装$docker--versionDockerversion20.10.7,build20.10.7-0ubuntu1~20.04.1#下载minikube$curl-Lominikubehttps://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64#执行权限$chmod+xminikube$mvminikube/usr/local/bin#installconntrackdependencies$apt-getinstall-yconntrack#启动kubernetes,需要等待一小段时间,因为需要下载镜像,启动kubernetes$minikubestart--driver=none#查看是否启动成功kubectlversionClientVersion:version。信息{主要:“1”,次要:“22”,GitVersion:“v1.22.0”,GitCommit:“c2b5237ccd9c0f1d600d3072634ca66cefdf272f”,GitTreeState:“clean”,BuildDate:“2021-08-04T18:03:20Z”,GoVersion:“go1.16.6”,cCompiler:“g”,平台:“linux/amd64”}服务器版本on:version.Info{Major:"1",Minor:"21",GitVersion:"v1.21.2",GitCommit:"092fbfbf53427de67cac1e9fa54aaa09a28371d7",GitTreeState:"clean",BuildDate:"2021-06-16T12:53:14Z",GoVersion:"go1.16.5",Compiler:"gc",Platform:"linux/amd64"}我们看到对应的Pod也起来了:2.3Installistio安装好Istio之后,我们就可以开始安装Istio了。过程如下:#下载安装包:$curl-Lhttps://istio.io/downloadIstio|sh-#添加到路径$exportPATH="$PATH:/root/istio-1.10.3/bin"#检查是否可以正常安装$istioctlxprecheck?检查集群没有发现问题。Istio可以安全地安装或升级!#执行安装$istioctlinstall安装成功后会出现如下界面:检查命名空间,会多出一个istio-system:3使用istio,下面通过安装官方示例看看如何使用首先,标记相应的命令空间,以便istio识别它并注入代理:$kubectllabelnamespacedefaultistio-injection=enabled然后我们安装相应的示例代码:kubectlapply-fistio-1.10.3/samples/bookinfo/platform/kube/bookinfo.yaml可以看到所有的应用都起来了,每个Pod都有两个Container:为了更好的监控我们的应用,我们来添加一些组件或者插件:$kubectlapply-fistio-1.10.3/samples/addons这样我们就有了很多新的组件,比如Grafana,Jaeger,Kiali,Prometheus等:下面我们以Kiali为例来暴露服务,看看它给我们带来了什么:#AddNodePort$kubectlexposedeploymentkiali--type=NodePort--name=kiali-nodeport-nistio-system#找到对应端口kubectlgetservice-nistio-system|grepkiali#在其他外部访问中,注意IP为服务器的公网IP$curl47.242.151.110:31015
