容器网络简介

简介: 容器网络简介

今天我们来简单谈一谈容器的网络知识,这其实是一个很有意思且非常重要的知识点!

在容器内,可以看见的“网络栈”其实就是隔离在该容器内 Network Namespace 当中的,其中就包括了网卡(Network Interface)、回环设备(Loopback Device)、路由表(Routing Table)和iptables 规则。这些要素,就构成了网络请求的基本环境。

host 模式

对于 docker 容器来说,可以在启动的时候声明直接使用宿主机的网络栈,即不开始 Network Namespace

docker run -d -net=host --name nginx-host nginx

像上面的这种启动方式,会直接监听宿主机的80端口,虽然这种情况下,可以为容器提供良好的网络性能,但也不可避免的引入共享网络资源的问题,比如端口冲突等。

所以在大多数情况下,我们都希望容器进程能使用自己的 Network Namespace 里的网络栈,即拥有自己的 IP 地址和端口。

Network Namespace 模式

那么在介绍这种网络模式前,我们需要首先解决一个问题,就是这个被隔离的容器进程,该怎么和其他 Network Namespace 里的容器进程进行交互呢?

为了解决这个问题,我们可以把每一个容器看做一台主机,那么现在的问题就变成了如何让两台主机进行通信,其实解决方案就是把两台主机分别连接到一台交换机上就可以了。

那么在 Linux 系统中,能够起到虚拟交换机作用的网络设备,就是网桥(Bridge)。他是一个工作在数据链路层的设备,主要功能是根据 MAC 地址学习来将数据包转发到网桥的不同端口上。

为了实现上面的目的,Docker 项目会默认在宿主机上创建一个名叫 dokcer0 的网桥,凡是连接在 docker0 网桥上的容器,都可以通过它来进行通信。

那么下面我们就来看看这个 docker0 又是如何工作的,是怎么实现网桥的作用的呢?

在这里使用到了一个虚拟设备:Veth Pair,它的特点就是被创建出来后,总是以两张虚拟网卡(Veth Peer)的形式成对出现,并且从其中一个“网卡”发出的数据包,直接可以出现在与它对应的另一张“网卡”上,即使这两个网卡在不同的 Network Namespace 当中。

下面我们来用一个例子来具体看看这个过程

我们启动一个 nginx-1 的容器

docker run -d --name nginx-1 nginx

然后我们进入到该容器,查看一下它的网络设备

# 宿主机
docker exec -it nginx-1 sh
# 容器中
#ifconfig


可以看到,在容器里有一张 eth0 的网卡,它就是 Veth Pair 设备在容器当中的一端,而通过 route 命令可以看到,容器的路由表里,eth0 网卡是这个容器里的默认路由设备:所有对 172.17.0.0/16 网段的请求,都会被交给 eth0 来处理。

而这个 Veth Pair 设备的另一端,就在宿主机上。

# 宿主机
ifconfig


也可以看到,在宿主机上,Veth Pair 设备是一张虚拟网卡,叫做 vetha59a54c。

那么我们如何来确定这张虚拟网卡就是对应于容器中的 eth0 呢,我们可以通过如下的两个命令来确认

如果此时我们再在宿主机上启动一个容器,那么这两个容器默认一定是互通的,其实原理也很简单,因为在容器中发出的数据包,默认都会通过 Veth Pair 设备出现在 docker0 网桥上,因为这是一个网桥,所有“插在”其上面的设备都是互通的,所以两个容器默认网络也是互通的。

以上,就是最为基本的容器网络知识,当然,对于 K8S 项目,会存在更加复杂的网络插件,我们在后面的文章中在慢慢介绍吧!


相关文章
|
10天前
|
人工智能 弹性计算 运维
ACK Edge与IDC:高效容器网络通信新突破
本文介绍如何基于ACK Edge以及高效的容器网络插件管理IDC进行容器化。
|
3月前
|
负载均衡 网络协议 开发者
掌握 Docker 网络:构建复杂的容器通信
在 Docker 容器化环境中,容器间的通信至关重要。本文详细介绍了 Docker 网络的基本概念和类型,包括桥接网络、宿主网络、覆盖网络和 Macvlan 网络等,并提供了创建、管理和配置自定义网络的实用命令。通过掌握这些知识,开发者可以构建更健壮和灵活的容器化应用,提高应用的可扩展性和安全性。
|
21天前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
54 7
|
28天前
|
安全 网络安全 数据安全/隐私保护
利用Docker的网络安全功能来保护容器化应用
通过综合运用这些 Docker 网络安全功能和策略,可以有效地保护容器化应用,降低安全风险,确保应用在安全的环境中运行。同时,随着安全威胁的不断变化,还需要持续关注和研究新的网络安全技术和方法,不断完善和强化网络安全保护措施,以适应日益复杂的安全挑战。
42 5
|
1月前
|
网络协议 安全 算法
网络空间安全之一个WH的超前沿全栈技术深入学习之路(9):WireShark 简介和抓包原理及实战过程一条龙全线分析——就怕你学成黑客啦!
实战:WireShark 抓包及快速定位数据包技巧、使用 WireShark 对常用协议抓包并分析原理 、WireShark 抓包解决服务器被黑上不了网等具体操作详解步骤;精典图示举例说明、注意点及常见报错问题所对应的解决方法IKUN和I原们你这要是学不会我直接退出江湖;好吧!!!
网络空间安全之一个WH的超前沿全栈技术深入学习之路(9):WireShark 简介和抓包原理及实战过程一条龙全线分析——就怕你学成黑客啦!
|
2月前
|
弹性计算 Kubernetes 网络协议
阿里云弹性网络接口技术的容器网络基础教程
阿里云弹性网络接口技术的容器网络基础教程
阿里云弹性网络接口技术的容器网络基础教程
|
2月前
|
Docker 容器
docker中检查容器的网络模式
【10月更文挑战第5天】
225 1
|
2月前
|
网络协议 Shell 网络安全
docker容器网络问题
【10月更文挑战第4天】
205 2
|
2月前
|
监控 Kubernetes 测试技术
掌握Docker网络模式:构建高效容器通信
【10月更文挑战第3天】本文深入探讨了Docker的网络模式,包括它们的工作原理、使用场景以及如何配置和优化容器间的通信。希望能够帮助开发者在项目中有效地应用Docker网络模式,构建高效的容器化应用。
|
1月前
|
网络协议 安全 算法
网络空间安全之一个WH的超前沿全栈技术深入学习之路(9-2):WireShark 简介和抓包原理及实战过程一条龙全线分析——就怕你学成黑客啦!
实战:WireShark 抓包及快速定位数据包技巧、使用 WireShark 对常用协议抓包并分析原理 、WireShark 抓包解决服务器被黑上不了网等具体操作详解步骤;精典图示举例说明、注意点及常见报错问题所对应的解决方法IKUN和I原们你这要是学不会我直接退出江湖;好吧!!!
下一篇
DataWorks