5

LXC更新到Docker之后的IP部分修改

 9 months ago
source link: https://bajie.dev/posts/20231214-lxc_ip/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

LXC更新到Docker之后的IP部分修改

2023-12-14 2 分钟阅读

在k8s没有出来之前,我们用的就是LXC,古早版本了。

跑的LXC,基于docker进行管理,网络部分独立。

进化到新版本的Docker后,网络部分需要修改,我们决定采用macvlan方式扁平直接接入本地网络:

Docker装好以后,系统中会出现一个Docker0的网络,用来NAT,我们不用这个

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:14:ee:63 brd ff:ff:ff:ff:ff:ff
    inet 172.18.31.33/24 brd 172.18.31.255 scope global eth0
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:ef:af:de:98 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever

我们要做的是对eth0做macvlan,不做任何iptable,直接接入本地网络

宿主机ip: 172.18.31.33 Docker1: 172.18.31.35

一、建macvlan

docker network create -d macvlan \
    --subnet=172.18.31.0/24 --gateway=172.18.31.254 \
    -o parent=eth0 \
    macvlan0

docker network ls

docker inspect macvlan0
...
"Config": [
    {
        "Subnet": "172.18.31.0/24",
        "Gateway": "172.18.31.254"
    }
 ]

二、按指定ip建立容器

docker run --rm -dit --name=t35 --net macvlan0 --ip=172.18.31.35 alpine:latest ash

随后我们可以用docker exec取得shell

docker exec -it t35 ash
ip a
ping 172.18.31.35
ping 172.18.31.2

注意:这个时候从宿主机ping容器 ping 172.18.31.35,或者是从容器ping宿主机 ping 172.18.31.33,都是不通的,这是macvlan的特性,我们必须做个操作来解决这个问题

三、解决宿主机和容器之间的网络问题

给eth0做个子接口,解决宿主机和容器之间的通讯问题

ip link add macvlan0-shim link eth0 type macvlan  mode bridge
ip addr add 172.18.31.34/32 dev macvlan0-shim
ip link set macvlan0-shim up
ip route add 172.18.31.0/24 dev macvlan0-shim

这样就可以通了

注意,这样宿主机占了两个IP,eth0子接口的ip不能胡乱,必须跟独立ip同段。 浪费了一个IP,但是解决了宿主机和容器之间的网络问题。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK