Skip to main content

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 体系中
  • 设计目标
    • 最大的透明性
    • 扩展性
    • 便携性 - 降低对底层的感知、运行在任何云上
    • 统一的策略控制
  • 组件
    • 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
  • 资源
    • 至少准备 4 CPU 8G
  • 参考

常用配置项

配置
values.global.mtls.enabledmTLS - 不建议开启

安装

# 配置列表
# 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