《Istio实战指南》 by 马若飞 2019年9月第1版

书中的 Istio 为 1.1版

---

 

听说 Istio的官网是 https://istio.io ,只是还没能成功访问过。

后来发现了Istio中文社区:https://istio.cn/ ,其下还有 官方文档镜像 http://docs.istio.cn/

Github地址:https://github.com/istio/istio

 

索引

本地安装

云平台安装

 

安装Istio,本以为只是安装Istio,结果,还需要安装(准备工作):

  1. GO
  2. Docker
  3. 搭建Kubernetes平台

Kubernetes是Istio的 首推部署平台。

复杂的依赖关系》使用Helm安装

Helm:K8S下的包管理工具。

英文:heml——n.  舵,舵柄; 掌舵,掌管; (国家,企业等的)机要部门,领; 头盔;

 

除了在自己的计算机安装Istio,一些云平台也提供了K8S服务,比如:

  1. Amazon AWS的EKS
  2. Google Cloud的GKE
  3. 腾讯云的CIS
  4. 阿里云的Kubernetes容器服务

2、4 内置了Istio组件,可以使安装集成工作更简单。

 

本地安装

(书中 第3章)

安装GO

Istio是使用GO语言实现的

Linux安装

golang官网:https://golang.org/ ,访问不了

golang中文:https://golang.google.cn/

2021-10-05最新版本1.17.1

下载源码、解压;

Ubuntu中:sudo apt-get install golang-go

PATH环境变量,$HOME/.bash_profile 或 /etc/profile

GOPATH环境变量:$HOME/go

验证:go version

安装Docker

容器和镜像的相关操作都需要Docker支持

最新的Docker(什么版本?)桌面版已经集成了K8S环境》方便进行本地集群环境的搭建

Ubuntu安装:sudo apt-get install docker-ce 安装的是最新版本吗?

CentOS安装:sudo yum install docker-ce 安装的是最新版本吗?

验证:docker version

搭建Kubernetes平台

Istio被设计为支持多平台运行,但它目前只适用于K8S环境。

限制:完整的K8S环境》要求高》计算机配置不高的话,无法启动或正常运行一个集群

两种简单方法在 个人计算机 上启动一个 极简K8S集群:1)Docker桌面版自带的K8S环境,2)Minikube。适合本地开发。

Istio要求 K8S版本 1.9及以上

最新K8S:Latest Release: 1.22.2 (released: 2021-09-15)

安装:

命令行工具:Linux》kubectl;Mac》使用Homebrew安装。

启用Docker桌面版中的K8S:Docker 17.02的Edge版,2018年7月,Docker 18.06的稳定版提供K8S集成。

Docker图标》菜单-Kubernetes》Kubernetes is running;

查看K8S节点状况:kubectl get nodes

安装Minikube

推荐。更成熟和统一的集群操作方式。Linux系统。

Minikube使用Docker管理K8S虚拟机》虚拟机相关驱动》建议使用VirtualBox。

注意,由于网络环境问题,可能无法下载,可以选择我国大陆的镜像地址(是什么?

安装好后,启动一个K8S集群:minikube start

查看启动情况:minikube status

查看K8S运行状况

K8S的可视化仪表板(Dashboard)》对集群进行监控和管理

Minikube方式,启动仪表板:minikube dashboard

Docker桌面版:复杂一些,略

查看仪表板是否已运行:kubectl get pods  --namespace kube-system

访问链接:好长!略,,开头——http://localhost:8001...

K8S集群环境构建完成,准备工作结束。

安装Istio

Istio每个组件都是K8S集群中的Deployment,并以Pod的形式运行。

Helm安装

下载安装包:curl -L  https://git.io/getLatestIstio | sh -

注,浏览器中 git.io 访问失败

安装包内容:bin, install, samples, Istio.VERSION

istioctl命令 添加到 PATH:export PATH=$PWD/bin:$PATH

安装Helm

Istio官方推荐使用Helm安装:定制的方式灵活配置安装选项

Helm:客户端Helm、服务端Tiller。

为简单,只安装客户端。

curl安装 略

检查:helm version

使用Helm安装Istio

Istio的CRD(K8S的CRD,Custom Resource Definition),K8S API的扩展方法。

CRD初始化、注册、对象,Istio的初始化工作

Istio初始化了大约50个CRD,4大类:

*.authentication.Istio.io

*.config.Istio.io

*.networking.Istio.io

*.rbac.Istio.io

安装这些CRD:kubectl apply -f .../crds.yaml

Helm两种安装Istio的方式:helm template, helm install(需要服务端Tiller)。

Istio的Helm chart安装目录结构

--set key=value:自定义安装选项,附录A

helm template:

生成部署的清单文件——非常长

Istio-system命令空间

创建命名空间:kubectl create namespace Istio-system

查看Pod的状态:kubectl get pods -n Istio-system

helm install:

不用生成安装清单,但需要 服务端Tiller支持。

Tiller安装步骤繁琐,略。

确认安装结果

$ kubectl get svc -n Istio-system

$ kubectl get pods -n Istio-system

问题处理

1)Minikube虚拟机驱动

minikube start --vm-driver=none

2)Pilot启动失败

内存不够?默认需要2GB!

至少分配8GB内存!

调小内容需求:helm参数 --set pilot-resources.requests.memory="512Mi"

3)镜像获取错误

ImagePullBackOff这样的信息

我国大陆网络环境问题倒是无法下载镜像,需要搜索可用镜像

 

云平台安装

(书中 第9章)

理论上,任何云平台的K8S产品都可以部署Istio,只要导入Istio的CRD,并使用官方提供的Helm进行安装即可

需要花钱的

在Google Cloud GKE(Google Kubernetes Engine)上启用Istio

内置了Istio

注册Google账号(需要绑定信用卡)

下载Cloud SDK

安装gcloud命令

创建Istio集群:至少4个节点的集群

图形化界面安装、验证安装

……

使用阿里云Kubernetes容器服务

可视化方式搭建K8S集群

提供Istio作为组件

阿里云账号》支付宝账号

容器服务Kubernetes版,,当前为:服务网格 ASM

Istio读书笔记-03-安装_golang

创建集群、添加Istio组件,DONE

都是图形化安装,方便快捷,就是,费钱(阿里云这个 是不是有 试用版呢?)。

 

其它(书中 第9章):

高级流量控制

故障注入:延迟故障——fault标记,中断故障——abort关键字;

流量镜像;

调试和故障排查

通过日志和内置的命令来调试和排查问题

Istio的日志框架

范围:adapters, api, attributes, default, grpcAdapter

基本:none, error, warning, info, debug

通过ControlZ来进行日志设置:Istio ControlZ

调试(istioctl):proxy-status命令(网格状态),proxy-config命令(代理配置),使用GDB

故障排查:

Istio对Pod和服务的要求(端口命名、Pod端口、关联服务、Deployment标签、Applicatin UID、NET_ADMIN功能)

请求被Envoy拒绝:检查Envoy日志

设置目标规则后出现503:DestinationRule,服务的TLS冲突

Headless TCP服务连接丢失:如果部署了Istio-citadel,则Envoy会每隔15min重启一次,来完成证书的刷新任务——造成长连接以及TCP流中断。禁止TLS。(哇~)

Envoy崩溃:高并发大流量下Envoy有可能崩溃。ulimit -a检查。提高ulimit上限(ulimit -n 16384)。

Envoy无法连接HTTP/1.0服务:Nginx、proxy_http_version为1.1

---