mcp-over-xds
在今年五月份社区已经添加了 MCP-OVER-XDS的实现 ,在当前的master代码中已经 移除了mcp 协议 的实现代码,将全部转换为MCP-OVER-XDS实现,也就意味着istio 1.9将不再支持原有MCP协议,具体参考 XDS-OVER-MCP设计
initConfigSources
当我们配置的ConfigSource为XDS类型时,将创建XDS client,用于发起请求
// 初始化一个ads client
xdsMCP, err := adsc.New(srcAddress.Host, &adsc.Config{
Meta: model.NodeMetadata{
Generator: "api",
}.ToStruct(),
InitialDiscoveryRequests: adsc.ConfigInitialRequests(),
})
if err != nil {
return fmt.Errorf("failed to dial XDS %s %v", configSource.Address, err)
}
// 初始化一个configstore
store := memory.Make(collections.Pilot)
// 初始化config controller
configController := memory.NewController(store)
// 初始化istio config stroe
xdsMCP.Store = model.MakeIstioStore(configController)
// 运行
err = xdsMCP.Run()
if err != nil {
return fmt.Errorf("MCP: failed running %v", err)
}
s.ConfigStores = append(s.ConfigStores, configController)
log.Warn("Started XDS config ", s.ConfigStores)InitialDiscoveryRequests 用于进行建联后的初始请求,代表着istio所需要关注的资源,
Pilot 涉及的所有资源
ads run
ads run主要进行发送初始发现请求,然后接收返回的数据
handleMCP
因为adsc是一个通用的ads客户端,我们不需要关注其它的逻辑主要关注handleMCP
获取请求的gvk
判断cache内是否有对应的对象,有则更新,无则创建
当envoy连接时,将从configstore 获取配置列表下发到客户端,当连接后,对于Create或者update类型触发对应的handler,对应的为confighandler来进行push
MCP-OVER-XDS简单示例
部署istio
istioctl manifest generate --set profile=demo > demo.yaml 修改 istio.istio-system configmap添加以下内容
添加xds configsource
部署istio
实现ads server
对于原生的envoy-control-plane,使用xds.newserver,利用snapshotcache来实现ads server的方式在istio中不适用,因为envoy-control-plane只能管理原生envoy的xds资源,而mcp-over-xds涉及到istio的crd资源
对于一个adsserver 来说需要实现AggregatedDiscoveryServiceServer接口
pushall主要了推送对应数据的逻辑,istio会根据TypeUrl进行反解析
这里我们统一为客户端也就是istio推送一个PeerAuthentication策略
检查
查看配置是否生效
我们访问istiod的debug接口可以看到已经收到了对应的策略
访问服务
部署测试实例
访问服务已经无法正常的访问
Last updated
Was this helpful?