《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,结果,还需要安装(准备工作):
- GO
- Docker
- 搭建Kubernetes平台
Kubernetes是Istio的 首推部署平台。
复杂的依赖关系》使用Helm安装。
Helm:K8S下的包管理工具。
英文:heml——n. 舵,舵柄; 掌舵,掌管; (国家,企业等的)机要部门,领; 头盔;
除了在自己的计算机安装Istio,一些云平台也提供了K8S服务,比如:
- Amazon AWS的EKS
- Google Cloud的GKE
- 腾讯云的CIS
- 阿里云的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组件,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
---