docker跨网络-overlay,macvlan

目录

overlay

部署测试环境

环境信息

下载consul镜像

启动consul容器

加入consul服务器

测试

优势:

注意事项:

macvlan

节点开启网卡混杂模式

创建macvlan网络

node1

node2

验证网络

用子接口配置macvlan

分子接口

创建macvlan网络

创建容器指定网络

测试互通

优势:

注意事项:


overlay

Overlay 网络是一种网络虚拟化技术,它将容器网络流量封装在宿主机网络之上,从而允许容器跨主机通信。Overlay 网络使用封装协议(如 VXLAN)来封装原始网络包,使其能够在底层物理网络中传输。

consul

在 Docker 中使用 Overlay 网络时,可以通过 Consul 保存网络状态信息,以实现服务发现和配置管理。Consul 提供了键值存储、健康检查和服务发现等功能,可以帮助管理和维护分布式系统中的服务状态。

部署测试环境

环境信息

主机名IP地址操作系统版本
consul192.168.0.128ubuntu-20.04.5 LTS
docker-node01192.168.0.129ubuntu-20.04.5 LTS
docker-node02192.168.0.130ubuntu-20.04.5 LTS

下载consul镜像

docker search consul

docker pull progrium/consul

启动consul容器

docker run -d --restart always -p 8400:8400 -p 8500:8500 -p 8600:53/udp -h node1 progrium/consul -server --bootstrap -ui-dir /ui

下面是对 docker run 命令中各个参数的解释:

  • -d: 在后台运行容器,并打印容器 ID。
  • --restart always: 如果容器退出,总是重新启动容器。
  • -p 8400:8400: 将容器的 8400 端口映射到宿主机的 8400 端口。
  • -p 8500:8500: 将容器的 8500 端口映射到宿主机的 8500 端口。
  • -p 8600:53/udp: 将容器的 8600 端口映射到宿主机的 53 端口,并指定传输协议为 UDP。这是用于 DNS 查询的。
  • -h node1: 设置容器的主机名为 node1
  • progrium/consul: 使用 progrium/consul 镜像来创建容器。
  • -server: 指定当前节点为 Consul 服务器节点。
  • --bootstrap: 启动一个 Consul 服务器节点,并引导整个集群。
  • -ui-dir /ui: 指定 UI 文件所在的目录,用于启动 Consul 的 Web UI。

容器生成以后可以用浏览器访问验证服务是否正常运行,访问http://192.168.0.128:8500

加入consul服务器

三台服务器开启2376端口

ufw allow 2376

在另外两台docker节点修改docker启动文件,consul为安装了consul的那台主机

vim /usr/lib/systemd/system/docker.service

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock 后面加上

--cluster-store=consul://192.168.0.128:8500 --cluster-advertise=ens33:2376

重启docker

systemctl daemon-reload

systemctl restart docker

查看是否加入成功

192.168.0.128:8500/ui在主页的key/value下的docker下nodes看到其他节点的IP

测试

在任意一台创建一个overlay的网络,这个网络是全局,任意一台机器都可以看到

docekr network create -d overlay my_ovnet

docker network ls

创建容器时指定网络

docker run -dit -name test1 --network my_ovnet busybox

docker run -dit -name test2 --network my_ovnet busybox

Docker 跨网络 Overlay 的优势和注意事项如下:

优势:

  1. 跨主机通信:Overlay 网络允许容器在不同的宿主机上进行通信,这对于分布式应用程序和微服务架构非常关键。

  2. 封装和隔离:Overlay 网络使用网络虚拟化技术(如 VXLAN)来封装容器流量,提供了良好的隔离性,不同的 Overlay 网络之间的容器默认无法直接通信。

  3. 动态和可扩展:Overlay 网络可以动态地添加或移除宿主机,网络可以自动适应集群的变化。

  4. 服务发现和负载均衡:在 Docker Swarm 模式下,Overlay 网络支持自动服务发现和负载均衡,使得服务部署和访问更加简单。

  5. 安全性:Overlay 网络的封装提供了额外的安全性,因为容器流量在传输过程中被封装,不易被外部网络监控或篡改。

注意事项:

  1. 网络性能:由于 Overlay 网络对容器流量进行了封装,可能会对网络性能产生一定影响,尤其是在高负载或大规模集群中。

  2. 配置要求:Overlay 网络需要 Docker Swarm 集群的支持,并且要求所有宿主机都能够互相通信。

  3. 加密通信:为了提高安全性,Overlay 网络支持对容器间通信进行加密,但这可能会增加网络开销。

  4. 复杂性:Overlay 网络的配置和管理相对复杂,尤其是对于大规模或高度动态的环境。

  5. 与外部网络的通信:Overlay 网络中的容器默认无法与外部网络进行通信。如果需要与外部网络通信,可以使用 Docker 的 ingress 网络,或者通过配置网络策略来实现。

  6. 依赖外部键值存储:在 Docker Swarm 模式下,Overlay 网络依赖于外部键值存储系统(如 Consul、Etcd 或 ZooKeeper)来存储网络状态信息。

macvlan

Docker 中的 Macvlan 网络是通过在宿主机的网络接口上创建虚拟网络接口来实现的。这些虚拟接口(称为 Macvlan 接口)可以分配给容器,使每个容器看起来像是直接连接到物理网络上的独立设备。Macvlan 是 Linux 内核的一项功能,因此Macvlan 需要内核版本 3.9 或更高版本的支持。

接着上次环境继续

节点开启网卡混杂模式

ip link set ens33 promisc on

ip link show ens33

创建macvlan网络

node1

docker network create -d macvlan --subnet 10.1.1.0/24 --gateway 10.1.1.1 -o parent=ens33 my_mac

此命令用于创建一个新的 Macvlan 网络。下面是命令中各部分的含义:

  • docker network create:这是 Docker 的子命令,用于创建一个新的网络。
  • -d macvlan-d 选项用于指定网络驱动。这里使用 macvlan,表示将使用 Macvlan 网络驱动来创建网络。
  • --subnet 10.1.1.0/24:这个选项指定了网络的 IP 地址范围。在这个例子中,网络将使用 10.1.1.0 到 10.1.1.255 的 IP 地址,子网掩码为 255.255.255.0。
  • --gateway 10.1.1.1:这个选项指定了网络的默认网关。在这个例子中,网关的 IP 地址是 10.1.1.1。
  • -o parent=ens33-o 选项用于指定 Macvlan 网络的父接口。parent=ens33 表示父接口是宿主机上的 ens33 网络接口。
  • my_mac:这是新创建的 Macvlan 网络的名称。

node2

两个节点一致使用同一网络

docker network create -d macvlan --subnet 10.1.1.0/24 --gateway 10.1.1.1 -o parent=ens33 my_mac

验证网络

分别在两个节点创建容器,验证网络是否互通

node1

docker run -it --name mac1 --network my_mac --ip 10.1.1.10 busybox /bin/sh

node2

docker run -it --name mac2 --network my_mac --ip 10.1.1.11 busybox /bin/sh

用子接口配置macvlan

分子接口

1、ip link add link ens33 name ens33.100 type macvlan mode bridge

此命令用于在 Linux 系统中创建一个 Macvlan 网络接口的。下面是该命令的各个部分及其含义:

  • ip link add:这个命令用于创建新的网络接口。
  • link ens33 name ens33.100:这里指定了一个新的接口名 ens33.100,它将连接到已存在的网络接口 ens33
  • type macvlanmacvlan 是一个 Linux 内核模块,用于创建虚拟网络接口,并将其连接到物理网络接口。
  • mode bridge:指定 macvlan 接口的工作模式为 bridge。在这种模式下,macvlan 接口被视为一个网络桥接器,可以连接到其他 macvlan 接口或物理网络接口。

2、ip addr add 192.168.0.126/24 brd + dev ens33.100

此命令用于在 Linux 系统中为网络接口分配 IP 地址的。下面是该命令的各个部分及其含义:

  • ip addr add:这个命令用于向现有的网络接口分配 IP 地址。
  • 192.168.0.126/24:这表示分配的 IP 地址为 192.168.0.126,子网掩码为 255.255.255.0,即 /24 子网。
  • brd +brd 选项用于设置广播地址。这里的 + 表示自动计算广播地址,即 192.168.0.255
  • dev ens33.100:指定分配 IP 地址的网络接口为 ens33.100,这是之前通过 ip link add 命令创建的 Macvlan 网络接口。

3、ip link set dev ens33.100 up

此命令用于在 Linux 系统中启用一个网络接口。下面是该命令的各个部分及其含义:

  • ip link set:这个命令用于设置网络接口的状态。
  • dev ens33.100:指定要设置状态的网络接口为 ens33.100,这是之前通过 ip link add 命令创建的 Macvlan 网络接口。
  • up:指定要将 ens33.100 接口的状态设置为启用。

ip link add link ens33 name ens33.200 type macvlan mode bridge

ip addr add 192.168.0.127/24 brd + dev ens33.200

ip link set dev ens33.200 up

创建macvlan网络

docker network create -d macvlan --subnet 10.1.1.0/24 --gateway 10.1.1.1 -o parent=ens33.100 mynet01

docker network create -d macvlan --subnet 10.1.2.0/24 --gateway 10.1.2.1 -o parent=ens33.100 mynet02

创建容器指定网络

测试互通

Docker 跨网络 Macvlan 的优势和注意事项如下:

优势:

  1. 高性能和低延迟:由于 Macvlan 容器直接连接到物理网络,它们能够提供与物理机相同的网络性能,这意味着较低的网络延迟和较高的数据传输速率。

  2. 独特的 MAC 和 IP:每个 Macvlan 容器都有自己的 MAC 地址和 IP 地址,这对于需要固定网络标识的应用程序非常重要。

  3. 网络隔离:Macvlan 提供了基于 Layer 2 的网络隔离,不同的 Macvlan 网络之间的容器默认无法直接通信,增强了安全性。

  4. 直接路由:Macvlan 容器的网络流量可以直接路由到物理网络,无需额外的网络封装或转换。

  5. 易于集成:Macvlan 网络易于与现有的网络基础设施集成,因为它们使用标准的网络协议和地址。

注意事项:

  1. 物理网络接口要求:Macvlan 需要宿主机上的物理网络接口支持,且这些接口必须处于 UP 状态。

  2. IP 地址管理:由于 Macvlan 容器使用物理网络的 IP 地址,因此需要确保 IP 地址的分配不会与网络上的其他设备发生冲突。

  3. 网络配置:创建 Macvlan 网络可能需要在宿主机上进行额外的网络配置,例如关闭父接口的 DHCP 客户端服务。

  4. 有限的网络隔离:Macvlan 网络上的容器与物理网络上的其他设备共享相同的广播域,因此网络隔离主要依赖于 Layer 3(IP)防火墙规则。

  5. 宿主机兼容性:并非所有的 Linux 发行版都默认支持 Macvlan,需要确保宿主机的内核版本支持 Macvlan。

  6. 动态网络变化:在 Docker Swarm 环境中,使用 Macvlan 网络时,需要注意容器在不同宿主机之间的迁移可能会导致网络配置的变化。

  7. 安全性:由于 Macvlan 容器直接暴露在物理网络上,因此需要确保适当的安全措施,如防火墙规则和网络安全策略,以保护容器和宿主机。

  • 29
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值