近日,谐云发布了基于LinuxBridge的Kubernetes网络组件HCBridge,并正式将其在Github上开源。相比于Overlay网络和三层网络模式,L2的网络模式更加能够适应网络安全监管的要求。项目地址为https://github.com/harmonycloud/hcbridge
在这里插入图片描述
至于为什么还要HCBridge?相比于Kubernetes自带的BridgeCNI,HC Bridge完善了VLAN的功能,使得容器网络能够按照Namespaces、Servic划分不同的VLAN和IP地址范围,细化IP地址监控和管理。虽然一些BGP的容器网络也具备ServiceSpecIPPool的功能,但是需要精细管理服务IP地址和提高资源的使用率,IP地址分配不能够影响资源的调度,最后会导致Pod路由会分散在不同的主机,路由条目无法聚合,路由条目数量是成为集群的规模的瓶颈。

社区overlay和路由的三层CNI较多,而L2相关的容器网络较少被提及,而在实际的应用过程中,L2由于对底层物理环境和网络环境有依赖,遇到问题也更加难以排查,希望通过开源HCBridge容器网络,一起分享和讨论谐云科技在实践L2容器网络遇到的问题和解决方法。

对于高可用物理组网结构,当物理主机双网卡运行在bond1模式,在双上联主机连接不同的交换机设备时,发生主备网络切换,会导致外部无法正常的访问Pod;HCBridge通过利用Linuxnotify的机制,通过内核模块监听主备网卡切换时间,然后通知应用进程,在Bridge所连接Pod所在的ns发送GratuitousARP,更新交换机Mac:Port映射关系,使得容器网络在出现物理网线故障、交换机掉电的情况下能够实现故障秒级切换。

对于ClusterIP,由于ClusterIP主要是使用IPVS或者IPTABLES实现的,在启用LinuxBridge开启VLANfilter之后,在经过Netfilter的DNAT之后是会导致VLANtag、目的Mac和交换机的端口匹配不上,所以需要ClusterIP时,无法使用VLANfilter。
在这里插入图片描述
如图所示HCBridge主要由以下四个组件:

  • HC-bridgecni-负责在主机上创建和配置linux网桥的CNI插件。
  • HC-ipam-负责分配IP地址的组件,使用ETCD存储。
  • network-controller-组件提供IP池配置restfulapi,监听kubernetes
    APIServer事件以回收异常的IP。
  • HADaemon–监控高可用组网结构下的主备网卡切换,能够让容器网络能够感知物理主备网卡故障切换。

目前HCBridge已经在github上开源,HCBridge安装虽然比较简单,但是由于需要使用真实IP地址,会导致安装体验会相对其他overlay和路由模式的CNI略显复杂,我们也会致力于优化快速按照体验。近期工作主要实现以下目标:

  • 在CNI层面支持IPv6双栈,由于公网IPv4地址已经耗尽,为了平滑过渡到IPv6,双栈无疑是最好的选择;
  • 丰富IPAM的功能,支持浮动IP,随着有状态服务也逐渐迁移到容器浮动IP的需求也越来越多;
  • 在启用VLANfilter的情况下支持ClusterIP,对于使用Dubbo、SpringCloud的应用,对ClusterIP需求虽然不强烈,但是就需要其他方式来替代Kubernetes自带的负载均衡方式,增加了运维的工作量。
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐