网络作为数字化转型的基础设施中举足轻重的核心角色,过去10年在以“转控分离”、“控制平面松耦合”等理念倡导的SDN浪潮下,不断发展与演变,充分释放了信息技术的生产力。如今5G、AI、大数据等新基建元素给网络带来了新的挑战与机遇。
AI网络成为近年来网络发展趋势,新华三顺势而为面向AI发布下一代网络架构—先知网络架构(SeerNetwork Architecture)简称SNA(如图1所示)。
图1 下一代网络架构SeerNetwork Architecture
SNA网络融入网络分析器SeerAnalyzer、统一网络控制器SeerEngine、统一网络编排SNA Center平台以及全部网络节点设备。
SNA网络架构构建了包括网络数据采集、数据分析、AI决策与保障、自动化部署和配置发放的闭环网络系统,同时纳入深度纵向安全。SNA在业务模型上一方面实现了数据中心组件SeerEngine-DC、园区组件SeerEngine-Campus、广域网组件SeerEngine-WAN的统一融合,还能完成跨场景编排融合、AI网络端到端运维保障;另一方面实现传统网络与SDN网络的融合,能够向用户提供一种设计、仿真、部署、保障整链路、全流程的下一代网络架构。
了解SNA网络架构需要从架构基础和通信实现两个方面进行。
SNA整个闭环网络架构,实现的第一步是构建统一平台(容器、微服务),由SNA Center配合SNA Installer产品共同实现,以SNA三机单场景控制器举例(如图2所示)。
图2 SNA Center与SNA Installer
简单类比硬件产品的硬件,Comware,产品软件包(路由、交换产品)三层设计,SNA基础架构分为物理服务器,SNA Installer、SNA Center+组件三层。
SNA Installer包含H3Linux操作系统以及相关容器化的基础软件包组合。安装在物理服务器上,由多台Master+Work节点组成(此处仅描述三台Master节点)SNA集群,提供容器化平台部署能力与集群能力。
SNA Center在SNA Installer集群上进行部署与安装,提供数据持久、统一认证、UI、业务组件部署、消息队列注①、日志、授权、备份恢复基础功能。
控制器、先知分析器等以热插拔组件形式安装在SNA集群上,同时共享SNA Center提供的公共基础组件功能。
注①:SNA Center从E1108软件版本开始取消SNA Center产品的MQ子产品。
SNA Center产品作为SNA网络架构的核心产品,其自身依托容器技术,在kubernetes的编排下形成典型松耦合微服务架构。对整个SNA网络架构以及组件提供相关基础功能(如图3所示)。
图3 SNA Center内部服务结构
SNA架构包含:DC组件服务,提供数据中心控制器组件服务。Campus组件服务,提供园区网控制器组件服务。WAN组件服务,提供广域网控制器组件服务。Analyzer服务,提供分析器服务。SNA Center产品包含WEB服务,提供页面访问服务,组件部署服务,以及UI业务配置服务、业务编排服务。Log分析服务提供日志的检索与备份功能。Log服务提供业务组件日志存储与备份功能。DB服务提供数据库存储服务和一致性服务。消息服务注 提供消息同步和事件服务。负载均衡服务,提供L4、L7层负载均衡,满足集群内各组件间的可靠性和并发性要求。认证服务,提供统一的用户认证,用户授权,以及License服务。整个SNA Center北向提供统一API接口与云平台对接完成云平台Neutron功能实现。
单台SNA服务器上产品,工作负载,POD的关系(如图4所示)。
图4 单台SNA服务器上产品,工作负载,POD关系图
以SNA三机单场景控制器中第一台服务器为例,一台SNA服务器上,包含是三个产品分别是SNA Center,DC,vDHCP。其中SNA Center产品包含7个子产品(如表1所示)。
产品名称 | 产品组 | 产品组件 | 功能描述 |
SNA Center | Pxc | Pxc | 提供数据持久化服务 |
Iam | Ambassador | 提供统一网关功能 | |
Redis | 提供缓存数据功能,支持数据的高效读取和HA处理 | ||
cas-server | 提供认证服务功能 | ||
Iam | 提供用户管理及认证客户端功能 | ||
snacenter | snac-be | 提供后台基础服务 | |
snac-ui | 提供UI图形化操作界面服务 | ||
snac-deploy | 提供组件部署功能 | ||
mq注① | Mq | 提供高效的微服务间通信功能 | |
log-center | Es | 提供日志存储功能 | |
Log | 提供日志服务 | ||
logstash | 提供日志过滤功能 | ||
log-globaltask注② | 提供日志清理功能 | ||
filebeat | 提供日志收集功能 | ||
licc | Licc | 提供license功能 | |
backuprecovery | backuprecovery | 提供备份恢复功能 |
表1 单台SNA服务器上SNA Center与子产品表
与SNA Center平行产品还包含harbor容器镜像管理产品,和kubernetes内部组件产品,以及DC控制器组件产品,vDHCP产品(三台主机中仅2台存在vDHCP组件),vBGP产品(SNA Center后续支持混合Overlay方案时增加的新组件)。
SNA Center产品不断优化微服务结构,不同版本的工作负载和POD数目可能存在细微差别,以当前版本为准。
注②:log-center子产品从E1108开始新增log-globaltask子组件,提供日志清理功能。
SNA网络架构中不同产品之间,POD之间,SNA组件与网络节点设备,用户与SNA Center均存在通信过程,SNA络架构针对不同产品通信特点采用不同的通信方式,确保组件间通信最优,组网适应性最强。
标准Kubernetes POD之间通信,分为单主机容器与跨主机容器网络通信两种。单主机容器通信包含host类型,bridge类型。跨主机容器网络通信包含macvlan类型, calico类型。详细对比如图5所示。其他类型SNA Center不涉及,故不作详细介绍。
图5 kubernetes四种典型网络通信方式对比
SNA Center及其组件采用了不同的网络通信方式,参考举例说明如图6所示。
图6 SNA Center四种通信方式与组件情况
图6中包含四种通信方式。
ambassador:calico方式。容器启动时,分配一个eth0网卡,与服务器cali xx(xx为随机命名)的网卡,两张网卡通过veth pair进行连接。cali xx网卡连接内核网络协议栈。容器内默认路由与网关ARP情况如图7所示。
[root@sna01 ~]# docker exec -it 7162b7bfe5dc "route"
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 169.254.1.1 0.0.0.0 UG 0 0 0 eth0
169.254.1.1 * 255.255.255.255 UH 0 0 0 eth0
[root@sna01 ~]# docker exec -it 7162b7bfe5dc "arp"
? (169.254.1.1) at ee:ee:ee:ee:ee:ee [ether] on eth0
图7 容器内默认路由与网关ARP情况
容器通信时,IP地址为自己网卡IP,目的MAC为全e的MAC,源MAC为网卡真实MAC。
发往cali xx网卡后,执行三层转发查询物理服务器默认路由从主机网关发送报文,目的MAC地址封装成对应网关的MAC地址。从物理服务器eth0发送。
回程报文进入物理服务器eth0之后,查询主机路由与cali xx网卡接口进行转发。并进行一次源MAC替换成全e的动作将报文发送到容器内。
SNA Center的7个子产品全部采用Calico方式与外界通信。
redis:host直通。容器直接监听物理服务器物理网卡对应端口共享主机网络空间。
harbor:bridge直通,无bridge上行口。Harbor仅作为本地服务器镜像仓库管理,无需与外界通信,故直接采用bridge方式实现。
DC组件以及vDHCP组件:macvlan+calico方式。由于业务需要DC组件以及vDHCP需要同时与设备以及SNACenter内部容器通信,所以相关容器分配了2张网卡。通常我们将组件与设备通信的网卡称为南向网卡与IP,将DC组件与SNA Center交互通信,WEB配置的网卡称为北向网卡与IP。DC组件南向网卡通信方式与ambassador一致采用calico方式。南向网卡通信采用macvlan方式,通过veth pair进行直接连接到物理服务器的对应网卡中,并与物理服务器命令空间隔离。vDHCP与DC通信模型一致。
SNA网络架构中通信过程需要区分出北向通信与南向通信。南向通信方式较单一,即采用macvlan方式直接与网络设备进行通信。北向通信时通信过程涉及到iptables NAT表的多链之间转换,以ambassador为例描述详细过程,如图8所示。
图8 SNA Center四种通信方式与组件情况
Ambassador微服务Service IP类型为Node Port类型,全部POD仅ambassador采用此类型,其他微服务采用ClusterIP类型。直接访问实现步骤如下:
1. 用户向SNA集群IP发起http类型端口为10080的网页访问。
2. 请求到达物理服务器网卡之后匹配iptables NAT表的KUBE_NODEPORTS链(tcp,目的端口10080),执行动作送往KUBE-XLB-UYY6KTZNRO3IRC2X链继续处理,以及通过KUBE-MARK-MASQ标记为0x4000。
3. KUBE-XLB-UYY6KTZNRO3IRC2X两个匹配条件分别是:
匹配源IP为任意IP执行一个跳转到KUBE-SEP-YROBRDH6U3VXB2OC链动作
匹配源IP为IP177.177.0.0/16的0 IP执行跳转到KUBE-SVC-UYY6KTZNRO3IRC2X动作
用户访问一般源IP为客户的IP地址,故命中第一个条件。前往KUBE-SEP-YROBRDH6U3VXB2OC继续转发。
KUBE-SEP-YROBRDH6U3VXB2OC匹配条件为匹配任意IP执行一个DNAT到177.177.52.82:80完成单向通信。
回程时步骤:
1. ambassador容器发出对应目的IP为用户IP的回程报文。
2. 匹配KUBE-SEP-YROBRDH6U3VXB2OC链,并设置标记0x4000。
3. KUBE-POSTROUTING中抓取对应0x4000标记报文,执行SNAT动作回程经过上述一个来回完成一次通信过程。
整个通信过程与Linux iptables NAT表以及相关链密切结合,动作为kubernetes自动下发,无需人工干预自动完成通信与地址转换,标记工作。
POD间另外一种通信方式是通过POD的Cluster IP类型的Service IP通信,改方式与ambassador通信类似,区别在于链表设计了负载均衡过程,通过链表实现内部流量负载。
SNA网络架构与上一代控制器产品仅需要几个地址存在差异,进行组网时需要进行细致规划。
SNA网络架构中涉及到的IP地址类型如表2所示。
类型 | 数目 |
SNA Center主机 | 3+N(N=work节点数目) |
集群内部虚IP | 1(32位) |
北向业务虚IP | 1(32位) |
Service IP地址池 | 一段16位子网 默认10.96.0.0/16 |
容器IP地址池 | 一段16位子网 默认177.177.0.0/16 |
组件南向网络 (DC,Campus,vDHCP,vBGP) | 网络及其子网网段 推荐32个地址池 |
表2 SNA网络架构中涉及到的IP
SNA Center主机:服务器物理口/Bond口地址,数目等于3+N,N=Worker节点数目。
集群内部虚IP:1个(32位掩码),通常与SNA Center主机地址同一网段。
北向业务虚IP:1个(32位掩码),通常与SNA Center主机地址同一网段。
Service IP地址池: 通常一段16位掩码子网, 默认10.96.0.0/16。地址内部使用,仅跟管理网地址冲突才需要更换。
容器IP地址池:通常一段16位掩码子网,默认177.177.0.0/16。地址内部使用,仅跟管理网地址冲突才需要更换。
组件南向网络(DC,Campus,vDHCP,vBGP):用户创建的网络中占用IP地址。可选与SNA Center主机同一网段,组件地址从“组件>组件>网络配置”从分配。如图9中的网络:
图9 SNA Center组件>组件>网络配置 网络配置情况
地址规划时通常采用如下方案:
方案一不区分南北向:172.16.0.0/27,IP地址富足分配1个27位掩码地址用户组件南向网络,IP地址紧缺,后续组件扩容需要考虑IP地址数目问题。
类型 | 数目 |
SNA Center主机 | 172.16.0.1-3 |
集群内部虚IP | 172.16.0.4 |
北向业务虚IP | 172.16.0.5 |
Service IP地址池 | 一段16位子网 默认10.96.0.0/16 |
容器IP地址池 | 一段16位子网 默认177.177.0.0/16 |
组件南向网络 (DC,Campus,vDHCP,vBGP) | 子网配置172.16.0.0/27,地址池将1-5地址剔除 推荐32个地址池 |
表3 SNA网络架构方案一IP地址规划
方案二区分南北向共用网卡:172.16.0.0/27,10.10.10.0/24(南向组件,结合南向网络配置VLAN进行区分)。
方案三区分南北向不共用网卡:172.16.0.0/27,10.10.10.0/24(南向组件,结合不同物理网口可以实现物理隔离)。
上述三种方案为常见三种SNA Center组网规划,示意图如图10所示。
图10 SNA Center组网规划示意
数字化转型过程不能一蹴而就,整体架构演进过程中SNA网络架构凭借其灵活弹性,稳定可靠的特征,满足了各个组件的敏捷迭代。它是打开智能网络未来的一把钥匙。