48 解析 istio
1.Envoy 以sidecar的形式,注入到K8s应用的pod中
2.修改iptables的转发规则,Envoy就可以代理接管应用服务的出入的流量
Istiod : 负责对所有的Envoy proxy进行集中配置管理
Pilot : 对Envoy 下发功能,路由,限流熔断
Citadel : 下发安全配置
Galley : 对 istiod本身进行配置管理
Envoy 看作是数据访问层,Pilot 和 Citadel 看做是对应到web的业务逻辑层
istio : 最大的卖点,提供精细化的流量治理能力,实现灰度发布,或者金丝雀发布
虚拟服务被认为是对服务不同版本的抽象
DestinationRule : 可以控制流量
K8s Service 是和 服务集群cluster相对应的概念,一个集群会有多个pod,每个service都有唯一的clusterIP
通过service实现对Cluster的负载均衡访问,同时service还可以做服务发现
转发的pod2实例
istio 给每个实例pod 注入一个边车istio-proxy
把信息下发到istio-proxy
Ingress 接外部流量,并且把流量路由到内部的service
49 Ingress 和 gateway 和 API gateway选择
pod 认为是K8s的虚拟机资源,是K8s调度和发布的最基本单位
pod ip可能会变,service把请求转发到某个目标pod上
UserSpace Proxy Mode 用户空间代理模式
kube-proxy会为每一个service创建一个监听端口
kube-proxy会根据负载均衡算法,选择一个目标pod
kube-proxy相当于一个穿透的四层反向代理,后端pod不可用时,kube-proxy可以重试其它的pod
新版K8s支持iptables mode
对后端的每一个pod创建iptables规则,通过iptables 直接转发到目标pod,kube-proxy并不直接承担这个负载均衡和转发任务,只是创建对应的iptables规则;流量并不穿透kube-proxy,所以效率比较高,少了一些内核的数据copy操作
但是iptables转发不提供灵活的负载均衡策略,后端pod不可用的时候,无法提供重试
K8s集群规模比较大时,需要同步的iptables规则的数量和开销也比较大,所以对集群规模有一定的限制
新版K8s,还支持IPVS mode
kube-proxy会监控pod的变化,并且创造相对应的IPVS规则,IPVS也是内核模式下,通过NetFilter来实现的;使用Hash表来存储规则
IPVS还支持高级的负载均衡算法,操作系统中需要安装ipvs内核模块
K8s和Istio进行集成,实现精细化的流量治理
istio通过iptables和 sideCar Proxy接管服务之间的通讯,然后把请求流量转发到目标pod
kube-proxy工作在四层,但是sideCar Proxy是工作在七层的,可以对Http1,Http2这些协议实现更灵活的流量治理功能