Istio简介
通过负载均衡、服务间的身份验证、监控等方法,Istio 可以轻松地创建一个已经部署了服务的网络,而服务的代码只需很少更改甚至无需更改。
通过在整个环境中部署一个特殊的 sidecar 代理为服务添加 Istio 的支持,而代理会拦截微服务之间的所有网络通信,然后使用其控制平面的功能来配置和管理 Istio,包括:
- 为 HTTP、gRPC、WebSocket 和 TCP 流量自动负载均衡。
- 通过丰富的路由规则、重试、故障转移和故障注入对流量行为进行细粒度控制。
- 可插拔的策略层和配置 API,支持访问控制、速率限制和配额。
- 集群内(包括集群的入口和出口)所有流量的自动化度量、日志记录和追踪。
- 在具有强大的基于身份验证和授权的集群中实现安全的服务间通信。
在Istio官方文档中,安装Istio是以Linux或MacOS系统为例的,对于Windows用户不是很友好,不过真难不倒我们。
安装 Hyper-V
Hyper-V是微软提出的一种系统管理程序虚拟化技术,能够实现桌面虚拟化。Hyper-V 可用于 64 位 Windows 10 专业版、企业版和教育版。 它无法用于家庭版。
点击“小窗户”,然后再点击“设置”,如下图:
在搜索框中输入“启用或关闭Windows功能”,如下图:
点击“启用或关闭Windows功能”后,勾选“Hyper-V”所有选项,如下图:
点击“确定”,等一会儿就安装好了。(可能需要重启电脑)
安装 Docker Desktop
访问https://desktop.docker.com/win/stable/amd64/Docker%20Desktop%20Installer.exe下载,双击Docker Desktop Installer.exe运行安装程序。按照安装向导上的说明授权安装程序并继续进行安装。
安装完成后,启动Docker Desktop,等一会儿初始化完成后,将启动入门教程:
这个教程包括一个简单的练习,以构建示例Docker镜像,将其作为容器运行,将映像推送并保存到Docker Hub。
开启 Kubernetes
在Docker Desktop的设置中,为 Kubernetes 配置 CPU 和 内存资源,建议分配4核或更多CPU,8GB或更多内存,如下图:
在Docker Desktop的设置中,勾选开启 Kubernetes 和 显示系统容器,如下:
重启Docker Desktop后,等待Kubernetes启动,启动成功后,可以看到Kubernetes的标签变成绿色,并且在容器列表中可以看到Kubernetes相关的容器,如下图:
安装
到Istio的官方网站(https://github.com/istio/istio/releases)下载windows系统的安装包,如下图:
把压缩包解压到你觉得安逸的目录里,然后把istio-1.14.0\bin
目录添加到环境变量中。
打开命令提示符,执行istioctl version
命令可以看到IIstio的版本信息,说明环境变量设置成功,如下图:
执行如下命令,安装Istio:
istioctl install --set profile=demo -y
本次安装采用 demo 配置组合。 选择它是因为它包含了一组专为测试准备的功能集合,另外还有用于生产或性能测试的配置组合。
稍等片刻,我们就可以看到:
C:\万猫学社> istioctl install --set profile=demo -y
✔ Istio core installed
✔ Istiod installed
✔ Egress gateways installed
✔ Ingress gateways installed
✔ Installation complete
执行如下命令,查看Istio是否安装成功:
kubectl get pods -n istio-system
可以看到 Istio 相关的 Pod 都处于 Running 状态,如下图:
给命名空间添加标签,指示 Istio 在部署应用的时候,自动注入 Envoy 边车代理:
kubectl label namespace default istio-injection=enabled
至此,Istio已经在在Windows上安装完成了。如果你还想进行一些学习或者测试Istio的功能,可以部署示例应用。
部署示例应用
进入istio-1.14.0
目录中,执行一下命令,部署 Bookinfo 示例应用:
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
如下图:
稍等几分钟后,执行kubectl get pods
命令我们就可以看到Bookinfo 示例应用相关的 Pod 都处于 Running 状态,如下图:
最后,我们通过检查返回的页面标题,来验证应用是否已在集群中运行,并已提供网页服务:
# 获取ratings的Pod名称
kubectl get pod -l app=ratings -o jsonpath={.items[0].metadata.name}
# 替换掉ratings的Pod名称
kubectl exec ratings的Pod名称 -c ratings -- curl -s productpage:9080/productpage | findstr /r "<title>.*</title>"
具体操作如下图:
返回的页面标题为:<title>Simple Bookstore App</title>
。