一、Istio 介绍
官方文档:
中文官方文档:
Github 地址:
官当解释: An open platform to connect, secure, control and observe services.
翻译过来,就是”连接、安全加固、控制和观察服务的开放平台“。开放平台就是指它本身是开源 的,服务对应的是微服务,也可以粗略地理解为单个应用。

1、连接(Connect):智能控制服务之间的调用流量,能够实现灰度升级、AB测试和蓝绿部署等功能
2、安全加固(Secure):自动为服务之间的调用提供认证、授权和加密。
3、控制(Control):应用用户定义的policy,保证资源在消费者中公平分配。
4、观察(Observe):查看服务运行期间的各种数据,比如日志、监控和tracing,了解服务的运行情况。
Istio 是 ServiceMesh 的产品化落地,可以通过在现有的服务器新增部署边车代理(sidecar proxy),应用程序不用改代码,或者只需要改很少的代码,就能实现如下基础功能:
1、帮助微服务之间建立连接,帮助研发团队更好的管理与监控微服务,并使得系统架构更加安全;
2、帮助微服务分层解耦,解耦后的proxy层能够更加专注于提供基础架构能力,例如:
(1)服务发现(discovery);
(2)负载均衡(load balancing);
(3)故障恢复(failure recovery);
(4)服务度量(metrics);
(5)服务监控(monitoring);
(6)A/B 测试(A/B testing);
(7)灰度发布(canary rollouts);
(8)限流限速(rate limiting);
(9)访问控制(access control);
(10)身份认证(end-to-end authentication)。
二、Istio架构
istio 服务网格从逻辑上分为数据平面和控制平面。
1、数据平面由一组以 Sidecar 方式部署的智能代理(Envoy+Polit-agent)组成。这些代理承载并控 制微服务之间的所有网络通信,管理入口和出口流量,类似于一线员工。 Sidecar 一般和业务容器 绑定在一起(在 Kubernets 中以自动注入的方式注入到到业务 pod 中),来劫持业务应用容器的流 量,并接受控制面组件的控制,同时会向控制面输出日志、跟踪及监控数据。 Envoy 和 pilot-agent 打在同一个镜像中,即 sidecar Proxy。
2、控制平面负责管理和配置代理来路由流量。 istio1.5+中使用了一个全新的部署模式,重建了控制平面,将原有的多个组件整合为一个单体结构 istiod,这个组件是控制平面的核心,管理 Istio 的所有功能,主要包括 Pilot、Mixer、Citadel 等服务组件。
三、K8S平台安装Istio
3.1 环境准备
需要提前准备Istio 安装包与istio 相关镜像
安装包:
istio
镜像包:
proxyv2
pilot
kennethreitz/httpbin
官网下载地址: 这里安装采用 i stio1.10.1 版本为例。
|
1、 把压缩包上传到 k8s 的控制节点 master1 , 并手动解压安装包 tar zxvf istio-1.10.1-linux-amd64.tar.gz -C / opt 切换到istio 包所在目录下 cd /opt/istio-1.10.1 安装目录包含如下内容: samples/ 目录下,有示例应用程序 bin/ 目录下,包含istioctl 的客户端文件。istioctl 工具用于手动注入Envoy sidecar 代理。 2 、把istioctl 这个可执行文件拷贝到 /usr/bin/ 目录 cd /opt/istio-1.10.1/bin/ cp -ar istioctl /usr/bin/ |
3.2 安装 Istio
|
1、下载镜像 安装istio 需要的镜像默认从官网拉取,然后上传到自己 k8s 集群的各个节点,通过 docker load -i 手动解压镜像: docker load -i istio-1-10-1.tar.gz docker load -i engress-proxyv2-1-10-1.tar.gz docker load -i httpbin.tar.gz
2.安装在K8s的控制节点master1 操作 istioctl install --set profile=demo -y 看到如下,说明istio 初始化完成: Detected that your cluster does not support third party JWT authentication. Falling back to less secure first party JWT. See https://istio.io/docs/ops/bestpractices/security/#configure-third-party-service-account-tokens for details. - Applying manifest for component Base... ✔ Finished applying manifest for component Base. - Applying manifest for component Pilot... ✔ Finished applying manifest for component Pilot. Waiting for resources to become ready... Waiting for resources to become ready... - Applying manifest for component EgressGateways... - Applying manifest for component IngressGateways... - Applying manifest for component AddonComponents... ✔ Finished applying manifest for component EgressGateways. ✔ Finished applying manifest for component IngressGateways. ✔ Finished applying manifest for component AddonComponents. ✔ Installation complete. 3.验证istio是否部署成功 kubectl get pods -n istio-system 显示如下,说明部署成功 istio-egressgateway-d84f95b69-5gtdc 1/1 Running 0 15h istio-ingressgateway-75f6d79f48-fhxjj 1/1 Running 0 15h istiod-c9f6864c4-nrm82 1/1 Running 0 15h |
3.3 添加自动注入
|
# 如下创建应用的命名空间,并加入 i stio 自动注入
Kubectl create ns
kubectl label namespace |
例如:对默认的default 命名空间允许自动注入
kubectl label namespace default istio-injection=enabled
四、K 8S 平台 卸载istio集群 (暂不用执行 )
|
istioctl manifest generate --set profile=demo | kubectl delete -f - |
