场景:由于需要做PBR策略路由,每个docker需要分配不同的系统IP地址,使用macvlan组网实现

# 除系统网卡外,再增加2张空白网卡,流量默认走第一张空白网卡,灾备切换走第二张空白网卡
# docker network create -d macvlan --subnet=103.1.1.0/25 --gateway=103.1.1.1 -o parent=eth1 macvlan-net
# 这里的eth1网卡不需要分配IP,二层穿透
#
# docker network create -d macvlan --subnet=103.2.2.0/25 --gateway=103.2.2.1 -o parent=enp5s0f1 macvlan-net-backup

# docker network ls
NETWORK ID     NAME                 DRIVER    SCOPE
ac915d2d9a38   bridge               bridge    local
f27594853b18   host                 host      local
be4dd5a0bb72   macvlan-net          macvlan   local
975f6c7ab8fb   macvlan-net-backup   macvlan   local
3bb4ac58083e   none                 null      local

# docker network inspect macvlan-net
[
    {
        "Name": "macvlan-net",
        "Id": "be4dd5a0bb72b0705e88501603f0285d0070314100c31a1b6dbc8c1d004520d4",
        "Created": "2024-09-03T14:52:08.01388903+08:00",
        "Scope": "local",
        "Driver": "macvlan",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "103.1.1.0/25",
                    "Gateway": "103.1.1.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "067619eeb324659e3d3ae83060c8eb5024fa7586de5affb862f7603da242579a": {
                "Name": "roland-berger",
                "EndpointID": "a5082f1fde9d4d6ebd15e8646dc032674bb8d7a4d770f301bf3eb6017fc7b14f",
                "MacAddress": "02:42:67:27:e4:08",
                "IPv4Address": "103.1.1.8/25",
                "IPv6Address": ""
            },
            "0bd21796c23870f6c8f2b8d1cec394e588232e1cced707d8bd7f3760b78be64e": {
                "Name": "longbridge-research",
                "EndpointID": "ffd648bd71003f4f48ca0d7d2eccac6dc6475902029a52149caff3e41c8df8a9",
                "MacAddress": "02:42:67:27:e4:0c",
                "IPv4Address": "103.1.1.12/25",
                "IPv6Address": ""
            },
            "0d3fad48b9ba04e41d04696cf51dc04b8ef117e05b2fe84c97f4c25863beff75": {
                "Name": "soundhound-ai",
                "EndpointID": "8390d707becf0250e1f17bbae78a74fdc18b6edb754f1927aca146484e39ee98",
                "MacAddress": "02:42:67:27:e4:10",
                "IPv4Address": "103.1.1.16/25",
                "IPv6Address": ""
            }
        },
        "Options": {
            "parent": "eth1"
        },
        "Labels": {}
    }
]

# docker network inspect macvlan-net-backup
[
    {
        "Name": "macvlan-net-backup",
        "Id": "975f6c7ab8fb4aee9f02e2a2a1e732ea79e1d8251770f4a3575c871c214fe239",
        "Created": "2024-10-30T18:09:53.983483572+08:00",
        "Scope": "local",
        "Driver": "macvlan",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "103.2.2.0/25",
                    "Gateway": "103.2.2.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "39579667f33c8c8cb90a6a19137a9758b16dd1faa613d130f7fb520db52a4034": {
                "Name": "backup-server",
                "EndpointID": "575b2902ec9ee3f9cfd56733190711629dfd29a2179f04e3ca1f9cd711b01a93",
                "MacAddress": "02:42:67:2c:ff:03",
                "IPv4Address": "103.44.255.3/28",
                "IPv6Address": ""
            }
        },
        "Options": {
            "parent": "enp5s0f1"
        },
        "Labels": {}
    }
]

# 创建业务容器
# docker run -itd --name poc-test1 --ip=103.1.1.2 --network macvlan-net --privileged --cap-add NET_ADMIN --cap-add NET_BROADCAST --cap-add SYS_ADMIN --cap-add SYS_TIME -v /sys/fs/cgroup:/sys/fs/cgroup  -v /export/Logs/nginx/:/export/Logs/nginx/ blueduck-nginx /usr/sbin/init
# 创建灾备切换容器
# docker run -itd --name backup-server --ip=103.2.2.2 --network macvlan-net-backup --privileged --cap-add NET_ADMIN --cap-add NET_BROADCAST --cap-add SYS_ADMIN --cap-add SYS_TIME -v /sys/fs/cgroup:/sys/fs/cgroup  -v /export/Logs/nginx/:/export/Logs/nginx/ blueduck-nginx /usr/sbin/init