知识卡片
SMI与UDPA两个规范分别标准化控制平面上下两侧的交互
内容
服务网格本质是数据平面产品与控制平面产品的集合,规范制定也自然分成 两条线,且两者关系类似容器运行时领域CRI和OCI的关系——目标不重叠、 可以和平共处。SMI(Service Mesh Interface,2019年5月微软联合Linkerd、 HashiCorp等厂商发布)标准化的是”外部环境(即Kubernetes)与控制平面” 之间的交互——用SMI定义的标准资源(可以类比Istio里VirtualService、 DestinationRule等私有概念的行业标准版本),应用就能在支持SMI的不同 控制平面产品间无缝迁移。SMI”Kubernetes Native”(完全靠部署SMI定义的 CRD落地,不考虑非Kubernetes场景)却”Provider Agnostic”(不绑定任何 控制平面),这个定位对消费者有利、对行业龙头Istio不利,因此Istio及其 背后的Google/IBM/Lyft没有加入SMI阵营,反而几乎所有其他服务网格玩家都 参与了进来。UDPA(Universal Data Plane API,2019年5月CNCF创立工作组) 标准化的是”控制平面与数据平面”之间的交互,目标类似SDN领域的OpenFlow 协议——实际上[[xDS协议族的Listener-Cluster-Router三种资源如何标准化 配置化通信]]描述的Envoy xDS协议族已经基本满足这个需求,UDPA的定位就是 把xDS的经验沉淀成更正式的标准,未来xDS会逐渐向UDPA靠拢并最终基于UDPA 实现,但截至书中写作时UDPA仍处早期设计阶段,连Alpha状态都未达到,原计划 2020年发布的基于UDPA的xDS v4也确定跳票。这两个规范合起来覆盖了服务网格 “上(应用到控制平面)”“下(控制平面到数据平面)”两侧的标准化缺口,各自 解决不同层次的互操作性问题,不存在竞争关系。