Istio
- istio/istio
- connect, manage, and secure microservices by Google, IBM, and Lyft
- 注意
- ingressgateway 默认需要 LoadBalaner - 因此需要集群能获取到 IP - 在不更改配置的前提下可以使用 metallb
- 架构
- 数据层
- 控制服务之间的网络通信
- 控制层
- 管理配置路由
- 配置策略和采集
- 数据层
- 组件
- Envoy 代理/Sidecar
- 动态服务发现
- 负载均衡
- TLS 终止
- HTTP/2 gRPC 代理
- 熔断
- 健康检查
- 阶段发布 - 百分比流量切分
- 错误注入
- 指标监控
- Mixer - 策略和远程控制
- Pilot - 配合 Envoy 工作
- 服务发现
- 流量管理 - A/B 测试、灰度发布
- 弹性 - 超时控制、重试、熔断
- Citadel
- 服务到服务、服务到用户 鉴权
- 可将网格服务内的未加密通信升级为加密通信
- 控制谁能访问什么 - 而不是简单的依赖底层的 IP 限制
- Galley
- 配置校验、读取、处理分发
- 将底层系统的配置(例如 k8s)应用到 istio 体系中
- Envoy 代理/Sidecar
- 设计目标
- 最大的透明性
- 扩展性
- 便携性 - 降低对底层的感知、运行在任何云上
- 统一的策略控制
- 组件
- base
- pilot
- proxy
- telemetry
- policy
- ingressGateways
- egressGateways
- cni
- istiod
- 服务发现
- 配置管理
- 证书管理
- pilot citadel galley
- 架构
- Performance and Scalability
- envoy
- 0.35 vCPU, 40 MB / 1000 rps
- +2.65 ms 90% latency
- istio-telemetry - 0.6 vCPU / 1000 mesh-wide requests / second for deployments that use Mixer.
- pilot - 1 vCPU, 1.5 GB
- istiod - 1 vCPU, 1.5 GB - 1000 services, 2000 sidecars
- envoy
- 资源
- 至少准备 4 CPU 8G
- 参考
常用配置项
配置 | 值 |
---|---|
values.global.mtls.enabled | mTLS - 不建议开启 |
安装
# 配置列表
# demo empty minimal preview remote default
# https://istio.io/latest/docs/setup/additional-setup/config-profiles/
istioctl profile list
# 查看配置的内容
# 所有的选项可以在 apply 的时候使用 set 修改
istioctl profile dump demo
# 查看某项配置
istioctl profile dump --config-path trafficManagement.components.pilot demo
# 安装 demo 配置
# 可选 default demo minimal sds remote
# https://istio.io/docs/setup/additional-setup/config-profiles/
istioctl manifest apply --set profile=demo
# 查看安装的服务
kubectl get svc -n istio-system
# 为空间开启注入
kubectl label namespace default istio-injection=enabled
# 或者在创建应用的时候配置注入
kubectl create -n <namespace> -f <app-spec>.yaml
# 手动注入
istioctl kube-inject -f <app-spec>.yaml | kubectl apply -f -
# 卸载
istioctl manifest generate --set profile=demo | kubectl delete -f -
# 删除空间
kubectl delete namespace istio-system
自定义安装
# 可以生成 Manifest 然后 kubectk 安装 - 也可以看到做了什么
istioctl manifest generate
istioctl manifest generate > istio-manifest.yaml
# 可以验证配置
istioctl verify-install -f istio-manifest.yaml