关于容器云的三种网络设计

简介: 【2月更文挑战第9天】容器网络设计:隧道、路由、VLAN。

Docker一直以来的理念都是“以简单为美”,从Docker对Linux网络协议栈的操作可以看到,Docker一开始并没有考虑到多主机互联的网络解决方案。之后Docker收购了一家网络解决方案公司Socketplane,将原有的网络部分抽离,独立成Docker的网络库,即libnetwork。libnetwork实现了5种驱动,通过插件的形式允许用户根据自己的需求来实现网络驱动,但libnetwork组件只是将Docker平台中的网络子系统模块化为一个独立库的简单尝试,离成熟和完善还有一段距离。


随着容器技术在企业生产系统的逐步落地,用户对于容器云的网络特性要求也越来越高,跨主机容器间的网络互通已经成为最基本的要求。跨主机的容器网络解决方案不外乎三大类。


1、隧道方案

比如Flannel的VXLAN,特点是对底层的网络没有过高的要求,一般来说只要是三层可达即可——只要是在一个三层可达网络里,就能构建出一个基于隧道的容器网络。不过问题也很明显,一个得到大家共识的是随着节点规模的增长,复杂度会提升,而且出现网络问题后跟踪起来也比较麻烦。在大规模集群情况下,这是需要考虑的。


2、路由方案

路由技术从三层实现跨主机容器互通,没有NAT,效率比较高,与目前的网络能够融合在一起,每一个容器都可以像虚拟机一样分配一个业务的IP。但路由网络也有问题,路由网络对现有网络设备影响比较大,路由器的路由表应该有空间限制,一般是两三万条,而容器的大部分应用场景是运行微服务,数量集很大。如果几万个新的容器IP冲击到路由表中,会导致下层的物理设备无法承受;而且每一个容器都分配一个业务IP,业务IP会很快消耗完。


3、VLAN方案

所有容器和物理机在同一个VLAN中。基于主机的端口冲突和网络资源竞争比较麻烦,相对来说Calico的是纯三层的SDN实现,它基于BPG协议和Linux自己的路由转发机制,不依赖特殊硬件,没有使用NAT或Tunnel等技术。


它能够方便地部署在物理服务器、虚拟机(如OpenStack)或者容器环境下,同时它自带的基于Iptables的ACL管理组件非常灵活,能够满足比较复杂的企业安全隔离需求。关于容器应用的网络隔离还有多种解决方案,基本上就是把不同的应用容器放置在不同的VLAN/VXLAN中,通过让不同的VLAN/VXLAN不能互访而实现隔离。


可以尝试用Docker自带的Overlay来简单地解决,首先创建不同的网络,然后在启动不同应用的容器时,使用--net参数指定容器所在的对应的VXLAN即可。结果是同一个网络中的容器是互通的,不同网络中的容器是隔离的。目前应用OVS/Linux-bridge+VLAN方案的企业比较多,但长远看来Calico方案前景不错。

相关文章
|
9月前
|
存储 Linux 容器
【Container App】在容器中抓取网络包的方法
本文介绍在Azure Container App中安装tcpdump抓取网络包,并通过Storage Account上传抓包文件的方法。内容包括使用curl和nc测试外部接口连通性、长Ping端口、安装tcpdump、抓取网络包、以及通过crul命令上传文件至Azure Storage。适用于需要分析网络请求和排查网络问题的场景。
261 0
|
10月前
|
Docker 容器
Docker网关冲突导致容器启动网络异常解决方案
当执行`docker-compose up`命令时,服务器网络可能因Docker创建新网桥导致IP段冲突而中断。原因是Docker默认的docker0网卡(172.17.0.1/16)与宿主机网络地址段重叠,引发路由异常。解决方法为修改docker0地址段,通过配置`/etc/docker/daemon.json`调整为非冲突段(如192.168.200.1/24),并重启服务。同时,在`docker-compose.yml`中指定网络模式为`bridge`,最后通过检查docker0地址、网络接口列表及测试容器启动验证修复效果。
1575 39
|
11月前
|
Kubernetes Cloud Native 区块链
Arista cEOS 4.30.10M - 针对云原生环境设计的容器化网络操作系统
Arista cEOS 4.30.10M - 针对云原生环境设计的容器化网络操作系统
342 0
|
人工智能 弹性计算 运维
ACK Edge与IDC:高效容器网络通信新突破
本文介绍如何基于ACK Edge以及高效的容器网络插件管理IDC进行容器化。
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
1354 8
|
网络协议 Ubuntu 前端开发
好好的容器突然起不来,经定位是容器内无法访问外网了?测试又说没改网络配置,该如何定位网络问题
本文记录了一次解决前端应用集成到主应用后出现502错误的问题。通过与测试人员的沟通,最终发现是DNS配置问题导致的。文章详细描述了问题的背景、沟通过程、解决方案,并总结了相关知识点和经验教训,帮助读者学习如何分析和定位网络问题。
814 1
|
Docker 容器
docker中检查容器的网络模式
【10月更文挑战第5天】
1559 1
|
网络协议 Shell 网络安全
docker容器网络问题
【10月更文挑战第4天】
1864 2
|
Linux 调度 Docker
容器网络概述
【9月更文挑战第9天】容器技术利用如命名空间(namespace)和控制组(cgroup)等技术创建隔离环境,实现资源限制与独立运行。命名空间避免命名冲突,cgroup则能对CPU、内存等资源进行限制。容器状态可通过镜像保存并标准化,确保在任何环境中都能复现相同状态。
|
NoSQL 应用服务中间件 Redis
Docker跨宿主机容器通信-通过网络跨宿主机互联
这篇文章介绍了Docker容器跨宿主机通信的实现方法,包括Docker的四种网络模式(host、none、container、bridge)以及如何通过修改网络配置和添加路由规则来实现不同宿主机上的容器之间的互联。
1404 0
Docker跨宿主机容器通信-通过网络跨宿主机互联