macvlan 的作用:
通过给 docker 下的容器一个单独的 mac 地址,获取独立的 ip 进行访问控制
默认情况下,使用了 macvlan 的容器,与宿主机之间不会互通。可以通过添加路由的方式来实现与宿主机之间的通信
创建:使用 docker 命令
docker network create -d macvlan --subnet 192.168.x.x --gateway=192.168.x.x -o parent=ovs_eth0 name#网络的名称
# 创建macvlan网络,分配地址192.168.x.x 这个是基于已经连了网线的网口实现,geteway使用主路由网关。ove_eth0这个是基于群晖的vswitch实现
docker network ls # 查看创建的网络
docker network rm # 删除某个网络 docker创建macvlan命令
使用:命令行方式
# docker 使用命令启动容器,使用macvlan作为网络
docker run -d --name=xxx --net=macvlan --ip=分配的地址 -v 挂载目录 docker命令启动使用macvlan的方法
上面有提到:Macvlan 宿主机与容器互相 ping 不通的问题
解决方法如下:
# 添加一个macvlan与macvlan进行桥接
ip link add macvlan_bridge link ovs_eth0 type macvlan mode bridge
# 设置macvlan_bridge的接口地址
ip addr add 192.168.x.x dev macvlan_bridge
# 启动接口
ip link set macvlan_bridge up
# 配置路由 使用了几个macvlan的容器就配置几个ip route
ip route add 192.168.x.x dve macvlan
ssh使用命令添加桥接
上述方案是临时配置,需要配合启动是使用脚本启动上面的命令
# 添加一个macvlan与macvlan进行桥接
ip link add macvlan_bridge link ovs_eth0 type macvlan mode bridge
# 设置macvlan_bridge的接口地址
ip addr add 192.168.x.x dev macvlan_bridge
# 启动接口
ip link set macvlan_bridge up
# 配置路由 使用了几个macvlan的容器就配置几个ip route
ip route add 192.168.x.x dve macvlan_bridge 系统启动执行脚本
群晖系统服务脚本
[Unit]
Description=Macvlan shim to allow docker to route to host
# After=pkgctl-Docker.service
# BindsTo=pkgctl-Docker.service
ReloadPropagatedFrom=pkgctl-Docker.service
PartOf=pkgctl-Docker.service
[Service]
Type=oneshot
ExecStart=/bin/bash /usr/local/bin/macvlan_start.sh
ExecStop=/bin/bash /usr/local/bin/macvlan_stop.sh
RemainAfterExit=yes
Restart=no
[Install]
WantedBy=pkgctl-Docker.service 添加系统服务
配置 macvlan 通信脚本
start.sh
ip link add macvlan_bridge link eth0 type macvlan mode bridge # 根据网口创建一个macvlan桥接网络
ip addr add 根据接入的网线配置地址 dev macvlan_bridge # 配置桥接网络的IP地址
ip link set macvlan_bridge up # 激活桥接网络
ip route add 需要通过路由的设备 dev macvlan_bridge # 添加需要经过此桥接网络的IP地址设备 start.sh
停止的脚本
stop.sh
ip route del 路由的设备 dev macvlan_bridge || true # 删除通过macvlan_bridge的路由
ip link set macvlan_bridge down || true # 将桥接网络下线
ip addr del 桥接的地址 dev macvlan_bridge || true # 删除用于桥接的IP地址
ip link del macvlan_bridge || true # 删除创建的桥接网络 stop.sh
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于