容器云平台建设难点之网络如何选择?如果选SDN网络,那么SDN网络实现方案又应该如何选择?
容器云平台的网络一直是一个技术难题,是采用SDN网络还是桥接到Underlay网络;如果使用SDN网络,那么多的SDN网络实现方案,如何选择?
问题来自@Dongxin 某银行股份有限企业系统架构师,下文来自twt社区众多同行实践经验分享,欢迎大家参与交流,各抒己见。
@liufengyi 某互联网银行 App架构设计师:
优先考虑企业整个网络扁平化,互联互通,这样对应用改造成本要小很多,即基于企业原来的网络打通来进行。如果容器的应用是一个相对独立的服务,可以考虑overlay。规模不大的情况下一些开源网络组件可以考虑采用。
@某金融企业 系统工程师:
calico、bgp、ingress、nginx等都是可以的
1、calico将集群内与集群外网络打通,但是随着集群外访问集群内的节点越来越多,运维难度会加大
2、bgp需配置内部路由协议,性能上有损耗
3、ingress、nginx道理类似,将需要被外部访问的应用使用这两个组件外部负载进到集群内部
4、hostnetwork方式
5、nodeport方式
……
如何选择要根据自身IT架构及监管要求定了
@zhuqibs App开发工程师:
关于SDN还是underlay,如果你是自建的,一定不会选用SDN, 成本啊,兄弟们!Cisco去年要给大家搭建个ACI, 一个交换机就是1万多,如果是银行钱多没有关系,中小企业资金紧张加上疫情,哪会选择。
VMware的NST-G大家也用过,有bug,这个PKS每个月都会有一次“月经”,每次网络存储全堵死,IO基本龟速,厂商派人解决了大半年,连交换机都换了都没有解决,结果赔了3台服务器,帮大家全换成普通的vcentor。
SDN听上去美好,现实很骨感,当然如果你有钱并愿意试错,又追求新技术,当然也是没问题的。比如阿里云、Tencent云这些公有云,基本必然是SDN,人家有钱有人,来填坑。
所以,一般企业Underlay就可以了,加上Kubernetes自己的calico,fannel,或cattle,一般都没问题,就是网络上没有硬隔离,没有客户化的东东,但大家可以用公有云的啊,自己去建,多费钱。
@xiaoping378 某行科技企业 系统架构师:
1. 既然是说容器云平台建设,肯定已经有了网络基础设施,那不考虑数据中心级别的SDN方案。只考虑在已有的网络建设成果上建设。
2. 不用迷信商业方案,无论是开源还是商业方案,大家都得遵守k8s的cni接口。不建议在容器网络方案中寄托太多的功能,如网络限速、安群策略等等。
3. 考虑目前主机层面大都可以保障二层是通的。最简单方案方案可以选flannel。目前flannel发展到现在,已经支撑vxlan模式下启用DR网络了,通俗讲,就是同一子网下,走hostgw,宿主机充当软路由,性能接近裸网,垮子网的情况走vxlan。即兼顾了性能,又考虑了可扩展性。另外flannel目前也重点优化了大规模容器云的路由表或arp占用过多问题,做到了:每扩展一个主机只增加一个路由项、一个fdb项、一个arp项。
4. 如果考虑容器网络隔离和安全策略的话(其实没必要,网络隔离,可以从项目级别来设置调度策略做到物理隔离),可以考虑Canal网络方案,他是calico和flannel的结合体。
@Garyy 某保险 系统工程师:
关于容器网络的建设思路:
容器网络发展到现在,已经是双雄会的格局。双雄会其实指的就是Docker的CNM和谷歌、CoreOS、Kuberenetes主导的CNI。首先明确一点,CNM和CNI并不是网络实现,他们是网络规范和网络体系,从研发的角度他们就是一堆接口,你底层是用Flannel也好、用Calico也好,他们并不关心,CNM和CNI关心的是网络管理的问题。
网络需求调研发现,业务部门主要关注以下几点:1、容器网络与物理网络打通;2、速度越快越好;3、改动越少越好;4、尽可能少的风险点。
容器的网络方案大体可分为协议栈层级、穿越形态、隔离方式这三种形式
协议栈层级:二层比较好理解,在以前传统的机房或虚拟化场景中比较常见,就是基于桥接的 ARP+MAC 学习,它最大的缺陷是广播。因为二层的广播,会限制节点的量级;三层(纯路由转发),协议栈三层一般基于 BGP,自主学习整个机房的路由状态。它最大的优点是它的 IP 穿透性,也就是说只要是基于这个 IP 的网络,那此网络就可以去穿越。显而易见,它的规模是非常有优势,且具有良好的量级扩展性。但在实际部署过程中,因为企业的网络大多受控。比如,有的企业网络的 BGP 是基于安全考虑不给开发者用或者说企业网络本身不是 BGP,那这种情况下你就受限了;协议栈二层加三层,它的优点是能够解决纯二层的规模性扩展问题,又能解决纯三层的各种限制问题,特别是在云化 VPC 场景下,可以利用 VPC 的跨节点三层转发能力。
穿越形态:这个与实际部署环境十分相关。穿越形态分为两种:Underlay、Overlay。
Underlay:在一个较好的可控的网络场景下,大家一般利用 Underlay。可以这样通俗的理解,无论下面是裸机还是虚拟机,只要整个网络可控,容器的网络便可直接穿过去 ,这就是 Underlay。
Overlay:Overlay 在云化场景比较常见。Overlay 下面是受控的 VPC 网络,当出现不属于 VPC 管辖范围中的 IP 或者 MAC,VPC 将不允许此 IP/MAC 穿越。出现这种情况时,大家可利用 Overlay 方式来做。
Overlay网络使物理网络虚拟化、资源池化,是实现云网融合的关键。把Overlay网络和SDN技术结合使用,把SDN控制器作为Overlay网络控制平面的控制器,这种方式更容易使网络与计算组件整合,是网络向云平台服务转变的理想选择。
隔离方式:隔离方式通常分为VLAN和VXLAN 两种。
VLAN:VLAN 机房中使用偏多,但实际上存在一个问题。就是它总的租户数量受限。众所周知,VLAN 具有数量限制。
VXLAN:VXLAN 是现今较为主流的一种隔离方式。因为它的规模性较好较大,且它基于 IP 穿越方式较好。
@Steven99 App架构设计师:
容器网络选择我个人觉得不是重点,其实不管哪种网络,都应该对终端用户透明,所以不应该纠结于网络模型。
需要考虑的重点可能是安全性,稳定性,易用性等,大家使用calico网络,发现也是很多问题,在考虑替换。开源产品总是需要很多额外的工作,测试验证,逐步优化,不实际使用,很难说哪种更合适,在使用过程中可能会逐步清晰自己的需求。
容器安全,容器网络安全可能是重点,特别上生产业务,服务数量达到一定量后,会有很多想不到的问题,当然,不实际做过,也很难选择,所以可以尝试先用起来,经常使用会逐步清晰明白自己要什么。