【云原生 | 16】Docker网络之NetWork网络隔离

简介: 每个容器启动时会创建一对虚拟网卡,一个网卡在容器内的虚拟空间内,一个在主机的docker网桥上,然后网卡一连接网卡二,网卡二连接网桥。其他容器的虚拟网卡也都连接到网桥(三层交换)上,就可以使不同的容器之间互相通信了

 作者简介:🏅云计算领域优质创作者🏅新星计划第三季python赛道TOP1🏅 阿里云ACE认证高级工程师🏅

✒️个人主页:小鹏linux

💊个人社区:小鹏linux(个人社区)欢迎您的加入!

目录

1. 进程隔离方式

2. NetWork网络隔离

2.1 传统虚拟化网络

2.2 容器级虚拟化

3. bridge网桥模式实验

3.1 bridge网桥模式实验原理

3.2 bridge网桥模式实验步骤

3.3 Docker NS 显示

3.4 firewalld 规则

👑👑👑结束语👑👑👑


网络

        联通性

                容器 与 容器间的通讯:veth Bridge

                容器与外部网络:SNAT

                外部网络与容器内部:DNAT

        隔离性

                NameSpace network

1. 进程隔离方式

image.gif

2. NetWork网络隔离

image.gif

netns 是在 linux 中提供网络虚拟化的一个项目,使用 netns 网络空间虚拟化可以在本地虚拟化出多个网络环境,目前 netns 在 lxc 容器中被用来为容器提供网络

使用 netns 创建的网络空间独立于当前系统的网络空间,其中的网络设备以及 iptables 规则等都是独立的,就好像进入了另外一个网络一样 .

2.1 传统虚拟化网络

image.gif

2.2 容器级虚拟化

image.gif

3. bridge网桥模式实验

3.1 bridge网桥模式实验原理

image.gif

每个容器启动时会创建一对虚拟网卡,一个网卡在容器内的虚拟空间内,一个在主机的docker网桥上,然后网卡一连接网卡二,网卡二连接网桥。其他容器的虚拟网卡也都连接到网桥(三层交换)上,就可以使不同的容器之间互相通信了。

3.2 bridge网桥模式实验步骤

[root@localhost ~]# ip netns add r1         # 创建虚拟网络空间,相当于分割出新的r1空间。
[root@localhost ~]# ip netns list         #可以查看到r1空间
[root@localhost ~]# ip link add veth1.1 type veth peer name veth1.2 #创建一对虚拟网络设备veth1.1和veth1.2
[root@localhost ~]# ip link set veth1.1 netns r1  #将veth1.1的虚拟网卡放入r1虚拟空间
[root@localhost ~]# ip netns exec r1 bash     #进入r1虚拟网络空间
[root@localhost ~]# ip link set veth1.1 name eth0 #更改网络名称
[root@localhost ~]# ip link set lo up       #启动本地回环接口,使其正常工作
[root@localhost ~]# ip link set eth0 up       #启动本地回环接口内的eth0虚拟网卡,使其正常工作
[root@localhost ~]# ip addr add 192.168.34.163/24 dev eth0  #设置ip地址
[root@localhost ~]# exit              #退出当前虚拟空间
[root@localhost ~]# ip netns add r2         # 再创建虚拟网络空间,相当于分割出新的r2空间。
[root@localhost ~]# ip link add veth2.1 type veth peer name veth2.2 #创建第二对虚拟网络设备veth2.1和veth2.2
[root@localhost ~]# ip link set veth2.1 netns r2  #将veth2.1的虚拟网卡放入r2虚拟空间
[root@localhost ~]# ip netns exec r2 bash     #进入r2虚拟网络空间
[root@localhost ~]# ip link set veth2.1 name eth0 #更改网络名称
[root@localhost ~]# ip link set lo up       #启动本地回环接口,使其正常工作
[root@localhost ~]# ip link set eth0 up       #启动本地回环接口内的eth0虚拟网卡,使其正常工作
[root@localhost ~]# ip addr add 192.168.34.164/24 dev eth0  #设置ip地址(两个虚拟空间的网卡必须同一网段)
[root@localhost ~]# exit              #退出当前虚拟空间
[root@localhost ~]# ip link add name br0 type bridge    #创建网桥br0
[root@localhost ~]# ip link set br0 up        #启动网桥br0
[root@localhost ~]# ip addr add 192.168.34.162/24 dev br0 #设置网桥ip
[root@localhost ~]# ip link set dev veth1.2  master br0 #将veth1.2虚拟网卡连接到网桥
[root@localhost ~]# ip link set dev veth2.2  master br0 #将veth2.2虚拟网卡连接到网桥
[root@localhost ~]# ip link set veth1.2 up        #启动虚拟网卡veth1.2
[root@localhost ~]# ip link set veth2.2 up        #启动虚拟网卡veth1.2

image.gif

互相ping一下查看网络是否连通

3.3 Docker NS 显示

docker inspect --format='{{.State.Pid}} ' $container_id     # 查看当前容器的名字空间 ID
mkdir /var/run/netns              # 创建目录,防止未创建
ln -s /proc/1234/ns/net /var/run/netns/1234     #在 /proc 目录(保存进程的所有相关信息)下,把对应的网络名字空间文件链接到 /var/run/netns 下面
ip netns show 
ip netns exec 1234 ifconfig eth0 172.16.0.10/16...    #查看或访问容器的名字空间

image.gif

3.4 firewalld 规则

iptables -t nat -A POSTROUTING -s 172.17.0.0/16 -o docker0 -j MASQUERADE  #容器访问外部网络
docker run -d -p 80:80 apache   #外部网络访问容器
iptables -t nat -A  PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
iptables -t nat -A DOCKER ! -i docker0 -p tcp -m tcp --dport 80 -j  DNAT --to-destination 172.17.0.2:80

image.gif

👑👑👑结束语👑👑👑

为大家推荐一款刷题神奇 点击链接访问牛客网

各大互联网大厂面试真题。基础题库到进阶题库等各类面试题应有尽有!

牛客网面经合集,满足大厂面试技术深度,快速构建Java核心知识体系大厂面试官亲授,备战面试与技能提升,主要考点+主流场景+内功提升+真题解析

image.gif

目录
相关文章
|
16天前
|
负载均衡 网络协议 开发者
掌握 Docker 网络:构建复杂的容器通信
在 Docker 容器化环境中,容器间的通信至关重要。本文详细介绍了 Docker 网络的基本概念和类型,包括桥接网络、宿主网络、覆盖网络和 Macvlan 网络等,并提供了创建、管理和配置自定义网络的实用命令。通过掌握这些知识,开发者可以构建更健壮和灵活的容器化应用,提高应用的可扩展性和安全性。
|
1天前
|
Kubernetes Cloud Native 持续交付
云原生之旅:Docker容器化与Kubernetes集群管理
【9月更文挑战第33天】在数字化转型的浪潮中,云原生技术如同一艘航船,带领企业乘风破浪。本篇文章将作为你的航海指南,从Docker容器化的基础讲起,直至Kubernetes集群的高级管理,我们将一起探索云原生的奥秘。你将学习到如何封装应用、实现环境隔离,以及如何在Kubernetes集群中部署、监控和扩展你的服务。让我们启航,驶向灵活、可伸缩的云原生未来。
|
4天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker与Kubernetes入门
【9月更文挑战第30天】在云计算的浪潮中,云原生技术正以前所未有的速度重塑着软件开发和运维领域。本文将通过深入浅出的方式,带你了解云原生的核心组件——Docker容器和Kubernetes集群,并探索它们如何助力现代应用的构建、部署和管理。从Docker的基本命令到Kubernetes的资源调度,我们将一起开启云原生技术的奇妙之旅。
|
14天前
|
运维 Cloud Native Docker
云原生技术入门:Docker容器化实战
【9月更文挑战第20天】本文将引导你走进云原生技术的世界,通过Docker容器化技术的实战演练,深入理解其背后的原理和应用。我们将一起探索如何在云平台上利用Docker简化部署、扩展和管理应用程序的过程,并揭示这一技术如何改变现代软件的开发和运维模式。
|
1月前
|
Shell Linux Docker
自定义Docker网络
这篇文章介绍了如何使用Docker命令自定义网络,并通过创建和配置网络来实现容器间的通信。
30 6
自定义Docker网络
|
9天前
|
Cloud Native 持续交付 Docker
云原生技术入门与实践:Docker容器化部署示例
【9月更文挑战第25天】在数字化转型的浪潮下,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,为初学者揭示云原生技术的核心概念及其应用价值。我们将以Docker容器为例,逐步引导读者了解如何将应用程序容器化,并在云端高效运行。这不仅是对技术趋势的跟随,更是对资源利用和开发效率提升的探索。
29 4
|
18天前
|
Kubernetes Cloud Native 开发者
云原生入门:从Docker到Kubernetes的旅程
【9月更文挑战第16天】 本文将带你进入云原生的世界,从理解Docker容器的基础开始,逐步深入到Kubernetes集群管理。我们将通过简单的代码示例和实际操作,探索这两个关键技术如何协同工作,以实现更高效、灵活的应用程序部署和管理。无论你是云原生新手还是希望深化理解,这篇文章都将为你提供清晰的指导和实用的知识。
51 11
|
1月前
|
NoSQL 应用服务中间件 Redis
Docker跨宿主机容器通信-通过网络跨宿主机互联
这篇文章介绍了Docker容器跨宿主机通信的实现方法,包括Docker的四种网络模式(host、none、container、bridge)以及如何通过修改网络配置和添加路由规则来实现不同宿主机上的容器之间的互联。
91 0
Docker跨宿主机容器通信-通过网络跨宿主机互联
|
26天前
|
Kubernetes 安全 Docker
|
1月前
|
Cloud Native 持续交付 Docker
云原生技术实践:Docker容器化部署教程
【9月更文挑战第4天】本文将引导你了解如何利用Docker这一云原生技术的核心工具,实现应用的容器化部署。文章不仅提供了详细的步骤和代码示例,还深入探讨了云原生技术背后的哲学,帮助你理解为何容器化在现代软件开发中变得如此重要,并指导你如何在实际操作中运用这些知识。
下一篇
无影云桌面