为什么隧道封装是Docker多数网络项目的共同选择

简介:

为什么隧道封装是Docker多数网络项目的共同选择

背景

在我之前weave的运行原理的文章中,介绍到 weave在跨主机的容器通信过程中,会使用pcap截获容器发送和接收的 网络包,然后按照自定义的格式将这些包重新封装为UDP报文再次注入到bridge上的接口发送出去。实际上这不是weave独有的选择,CoreOS的 fannel网络项目也是一样的方法。最近被docker公司收购的初创项目socketplane,采用基于openvswitch的vxlan的隧道技术来实现相同的过程。那么,就有一个疑问:实际上只要使用主机port mapping或是将docker原生网桥docker0的上行链路连通网卡,容器的流量都可以从主机发送出去,为什么这么多的docker网络项目都不约而同地选择使用隧道技术将网络负载再次封装发送,接收的时候再解封装呢?

解析原因

隧道封装是目前最简单的穿透docker容器复杂网络环境安全设置的方法

实际上这个问题最重要的原因是与docker容器运行环境的多样复杂性是直接相关的。我们都知道docker容器可以运行在公有云、私有云、虚拟化以及裸机上。为了网络的安全,这些环境上都应该有严格的安全组和防火墙设置来保障只有合法流量能够通过端口。这些带来了网络安全的同时,也给docker 容器的部署和可移动性带来了麻烦。每次部署启动一个容器,就要将其相应使用的端口上的安全设置更新为开放。尤其是混合云场景下这个问题就更为麻烦了。我举一个具体的例子:当前很多的PaaS服务提供商都没有自己的数据中心,他们直接从公有云的IaaS提供商那里获得虚拟机,那么这个时候就需要PaaS提供方调用公有云IaaS提供方的网络安全设置的API来打开端口。PaaS提供商是不会把自己绑定死的,会选择多家公有云的 IaaS(AWS,GCE,Azure等),这些IaaS提供商的API全都不一样,这得多麻烦啊。这还没有考虑私有云,自己数据中心的虚拟化和裸机环境的端口ACL设置的复杂。

网络安全的设置还不仅仅只有这些,比如最常见的ip与mac绑定,这是openstack的默认设置,要修改可以,同样也要调用openstack neutron的API增加端口允许的ip-mac pair。这里额外提一下,docker主机的port mapping方式由于限制了容器移动后的可访问性,不被大多数跨主机docker网络项目采用,多数项目还是希望能给每个容器一个ip,容器间访问使用这个ip,而不是docker容器所在主机的ip。

结论

通过上面的解析,可以想象,如果是在混合云场景下,使用隧道封装技术后,从虚拟机流出的流量ip和mac都是唯一的,且只使用固定的端口,那docker容器运行环境的安全设置就可以固定下来,简便多了。

其实,docker网络中使用隧道封装技术还可以有利于一些其他问题的解决:

1. 容器相较于虚拟机在一台主机上的密度大大增加,至少多出一个量级,要说两个量级我也信。在这样的情况下机架上的接入交换机的port-mac表容量是否足够呢,这里使用了隧道封装了负载后,就不用担心这个问题了。

2. 此外,就如同虚拟机使用了vxlan后一样,有利于打破ip地址网段对二层网络规模的限制,打造出一个大二层的网络。


本文作者:佚名

来源:51CTO

目录
打赏
0
0
0
0
192
分享
相关文章
在数字化时代,网络项目的重要性日益凸显。本文从前期准备、方案内容和注意事项三个方面,详细解析了如何撰写一个优质高效的网络项目实施方案,帮助企业和用户实现更好的体验和竞争力
在数字化时代,网络项目的重要性日益凸显。本文从前期准备、方案内容和注意事项三个方面,详细解析了如何撰写一个优质高效的网络项目实施方案,帮助企业和用户实现更好的体验和竞争力。通过具体案例,展示了方案的制定和实施过程,强调了目标明确、技术先进、计划周密、风险可控和预算合理的重要性。
92 5
深入理解Docker:为你的爬虫项目提供隔离环境
本教程介绍如何使用Docker构建隔离环境,运行Python爬虫项目,采集小红书视频页面的简介和评论。主要内容包括: 1. **Docker隔离环境**:通过Docker容器化爬虫,确保环境独立、易于部署。 2. **代理IP技术**:利用亿牛云爬虫代理突破反爬限制。 3. **Cookie与User-Agent设置**:伪装请求头,模拟真实用户访问。 4. **多线程采集**:提高数据采集效率。 前置知识要求:Python基础、Docker基本操作及HTML解析(可选)。教程还涵盖常见错误解决方法和延伸练习,帮助你优化爬虫代码并避免陷阱。
深入理解Docker:为你的爬虫项目提供隔离环境
Java网络编程,多线程,IO流综合小项目一一ChatBoxes
**项目介绍**:本项目实现了一个基于TCP协议的C/S架构控制台聊天室,支持局域网内多客户端同时聊天。用户需注册并登录,用户名唯一,密码格式为字母开头加纯数字。登录后可实时聊天,服务端负责验证用户信息并转发消息。 **项目亮点**: - **C/S架构**:客户端与服务端通过TCP连接通信。 - **多线程**:采用多线程处理多个客户端的并发请求,确保实时交互。 - **IO流**:使用BufferedReader和BufferedWriter进行数据传输,确保高效稳定的通信。 - **线程安全**:通过同步代码块和锁机制保证共享数据的安全性。
72 23
|
1月前
|
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
90 20
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
232 56
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
Docker——阿里云服务器使用Docker部署python项目全程小记
本文记录了我在阿里云服务器上使用Docker部署python项目(flask为例)的全过程,在这里记录和分享一下,希望可以给大家提供一些参考。
Java网络编程封装
Java网络编程封装原理旨在隐藏底层通信细节,提供简洁、安全的高层接口。通过简化开发、提高安全性和增强可维护性,封装使开发者能更高效地进行网络应用开发。常见的封装层次包括套接字层(如Socket和ServerSocket类),以及更高层次的HTTP请求封装(如RestTemplate)。示例代码展示了如何使用RestTemplate简化HTTP请求的发送与处理,确保代码清晰易维护。
利用Docker的网络安全功能来保护容器化应用
通过综合运用这些 Docker 网络安全功能和策略,可以有效地保护容器化应用,降低安全风险,确保应用在安全的环境中运行。同时,随着安全威胁的不断变化,还需要持续关注和研究新的网络安全技术和方法,不断完善和强化网络安全保护措施,以适应日益复杂的安全挑战。
150 61
实战~如何组织一个多容器项目docker-compose
本文介绍了如何使用Docker搭建Nginx、PHP和MySQL的环境。首先启动Nginx容器并查看IP地址,接着启动Alpine容器并安装curl测试连通性。通过`--link`方式或`docker-compose`配置文件实现服务间的通信。最后展示了Nginx配置文件和PHP代码示例,验证了各服务的正常运行。
126 3
实战~如何组织一个多容器项目docker-compose
|
3月前
|
docker的默认网络模式有哪些
Docker 默认网络模式包括:1) bridge:默认模式,各容器分配独立IP,可通过名称或IP通信;2) host:容器与宿主机共享网络命名空间,性能最优但有安全风险;3) none:容器隔离无网络配置,适用于仅需本地通信的场景。
117 6
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等