K8S集群部署Istio实施文档

一、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 t istio-injection=enabled

例如:对默认的default 命名空间允许自动注入

kubectl label namespace default istio-injection=enabled

四、K 8S 平台 卸载istio集群 (暂不用执行 )

istioctl manifest generate --set profile=demo | kubectl delete -f -

 



请使用浏览器的分享功能分享到微信等