资讯专栏INFORMATION COLUMN

Cisco思科网络插件Contiv (三) Plugin 实现原理

DevTalking / 2401人阅读

摘要:网络结构上图为的网络模型,大体上可分为和两个组件其中运行在每台宿主机上主要负责与交互实现插件逻辑配置底层进程实现具体的网络功能组件是与交互的核心逻辑以常用的为例该逻辑即是实现框架下所规定的种种接口实现与的消息交互关于和请查看与框架与实现同

Contiv网络结构

上图为Contiv的网络模型,大体上可分为MasterHost Agent两个组件,其中Plugin运行在每台宿主机上, 主要负责1. 与Container Runtime交互实现插件逻辑. 2. 配置底层 open vswitch进程实现具体的网络功能.

Contiv-Plugin组件 Plugin Logic

Plugin Logic 是与Container Runtime交互的核心逻辑, 以常用的 docker 为例, 该逻辑即是实现CNM框架下所规定的种种接口, 实现与Libnetwork的消息交互, 关于CNMLibnetwork, 请查看Libnetwork与CNM框架与实现

Distributed KV Store

Master 中的作用一样, 下文将以etcd表示该数据库

Linux Host Routing/Switching

待完成

ARP/DNS Responder

待完成

Service LB

待完成

Route Distribution

待完成

Contiv-Plugin源码分析 plugin daemon 初始化

Plugin 进程的入口在 /netplugin/netd.go , 主要完成命令行参数的解析. 然后创建一个Agent

plugin agent 创建

Agent的创建入口在 /netplugin/agent/agent.go,

Cluster 初始化
创建一个名为 objdbClient 的 etcd client, 它的作用是处理cluster级别的消息, 比如一台宿主机上的Plugin进程启动后需要让其他宿主机上的Master进程和Plugin进程感知到自己的存在,那么就需要通过这个client向etcd写入自己运行的服务, 这个过程也称为Service注册, 同时反过来,Plugin进程也可以通过该client侦测到其他plugin的启动, 这个过程称为 Peer Discovery. 言而言之,cluster 初始化使得plugin进程成为整个系统的一部分.

Netplugin 初始化
Netplugin的初始化主要包括State driver的初始化和Network driver的初始化.
State driver的初始化主要是从etcd中获取Master进程写入的转发模式(Fwd Mode)和私有子网(PvtSubnet)等信息并校验和Plugin进程启动时的命令行一致, 如果没有得到, 说明 Master进程还没有启动, 需要等待.
Network driver的初始化, 实际上是底层ovs的驱动的初始化, Plugin进程需要等待ovs进程连接上来.

Container runtime plugin 初始化
这部分要根据插件模式(k8s 或者 docker) 进行插件逻辑的初始化, k8s对应CNI模型的插件. docker对应CNM模型的插件
docker为例, 这部分将启动一个Http Server, 用以响应 docker 进程发送过来的各类消息, 比如CreateNetwork, CreateEndpoint等等

状态恢复


Contiv是跨主机容器网络, 因此, 当某台宿主机上的Plugin进程启动后, 需要将系统中其他节点已经创建的Contiv网络和容器加入网络的情况同步到本地, 这个过程就是状态恢复. 除了基本的network和endpoint信息, 可以看到这一步还需要同步BGPEGPServiceLBSvcProvider这些信息.

Post 初始化


Post初始化完成两项工作.

启动Cluster 初始化时创建的 objdbClient, 使其完成Service注册和并开始Peer Discovery.

启动一个REST Http Server, 开放9090端口, 用户可以通过这个端口查看Plugin的一些工作情况

启动外部事件响应循环


在前面, Plugin进程从etcd中同步当前整个系统中的状态作为初始状态. 那么, 当网络状态发生变化后,Plugin进程也应该及时响应. 所以Plugin最后会启动外部事件响应循环, 这里根据事件类型的不同,实际会启动若干个Go routine, 在这些routine里, Plugin进程监视etcd中相应Key的变换, 并作出响应.

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/27527.html

相关文章

  • Cisco思科网络插件Contiv (二) Master实现原理

    摘要:在当前版本中会注册和两个服务,前者开放端口供控制整个系统,后者开放端口供控制器使用。 Contiv网络结构 showImg(http://contiv.github.io/assets/images/Contiv-HighLevel-Architecture-a619d55a.png); 上图为Contiv的网络模型,大体上可分为Master和Host Agent两个组件,其中Mast...

    Pluser 评论0 收藏0
  • Cisco思科网络插件Contiv (四) 网络策略实践

    摘要:网络策略的作用可以通过网络策略来限制容器之间的访问行为,以实现用户对安全性的方面的要求。搭建过程环境准备参考思科网络插件一环境部署搭建环境,由于本文并不关注网络的跨主机特性,因此只在一台宿主机上启动进程和进程就够了。 网络策略的作用 Contiv可以通过网络策略来限制容器之间的访问行为,以实现用户对安全性的方面的要求。比如,我可以限制容器仅对源IP在特定范围的其他容器开放特定的端口,而...

    jackzou 评论0 收藏0
  • Cisco思科网络插件Contiv (一) 安装

    摘要:什么是官网是一个用于跨虚拟机裸机公有云或私有云的异构容器部署的开源容器网络架构。作为业界最强大的容器网络架构,具有层层和模式,能够与思科基础设施进行本地集成,并使用丰富的网络和安全策略将应用意图与基础设施功能进行映射。 什么是Contiv Contiv (官网)是一个用于跨虚拟机、裸机、公有云或私有云的异构容器部署的开源容器网络架构。作为业界最强大的容器网络架构,Contiv具有2层、...

    EasonTyler 评论0 收藏0
  • 基于OVN的Kubernetes网络架构解析

    摘要:它最基本的功能是实现了虚拟交换机,可以把虚拟网卡和虚拟交换机的端口连接,这样一个交换机下的多个网卡网络就打通了,类似的功能。最基础的分布式虚拟交换机,这样可以将多台机器上的容器组织在一个二层网络下,看上去就好像所有容器接在一台交换机上。 【编者的话】Kubernetes经过了几年的发展,存在着很多的网络方案。然而网络虚拟化在Kubernetes出现前就一直在发展,其中基于OpenVsw...

    dingding199389 评论0 收藏0

发表评论

0条评论

DevTalking

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<