奢侈的 Neutron

众所周知,Neutron 需要两块网卡才能实现最基本的功能:管理网络计算网络但是我们这些穷人根本养不起她,所以我们想办法拿一块网卡糊弄下她,略~

前置知识准备

Linux Tap、Bridge

实践整活(雾

创建一个 Linux Bridge 和 veth,把 eth0 和 veth1 加入到 brige,用 veth 的另一端 veth1 作为 external 网络连接网口。

brctl addbr ${Bridge}
brctl addif ${Bridge} ${唯一的一块网卡}

ip link add ${本端} type veth peer name ${对端}
brctl addif ${Bridge} ${对端}

brctl addbr tunnel
brctl addif tunnel eno1

ip link add inner type veth peer name outer
brctl addif tunnel outer

!!!第二个命令会导致物理机网络中断!!! 因为后续我们需要把 ${唯一的一块网卡} 上的网络配置转移到 ${Bridge} 上,所以如果不具备远程管理条件的话,请小心使用,并请编写脚本在 Screen 中一次性完成运行

网桥的每个物理/虚拟网卡作为一个端口,运行于混杂模式,而且是在链路层工作,所以 ${唯一的一块网卡} 就不需要IP了,改为给 Bridge ${Bridge} 分配外网地址:

在我们的实践中,因为使用的 Ubuntu 系统使用 NetPlan 管理网络,我们仅需要将 ${唯一一块网卡} 的属性全部转移到 ethbr 上即可,然后给 ${唯一一块网卡} 加上 dhcp4: false 属性防止自动分配 IP 造成浪费即可

# This is the network config written by 'subiquity'
network:
  ethernets:
    tunnel:
      addresses:
      - 172.18.41.2/24
      - 192.168.2.99/24
      gateway4: 172.18.41.254
      nameservers:
        addresses:
        - 223.5.5.5
        - 223.6.6.6
        search: []
    eno1:
      dhcp4: false
    eno2:
      dhcp4: true
    eno3:
      dhcp4: true
    eno4:
      dhcp4: true
  version: 2

这时候物理机应该就已经恢复网络了

最后在 Kolla 中将 veth0 作为 external 网络连接网口。

neutron_external_interface: "veth0"

完结撒花~

最后修改:2022 年 09 月 19 日
如果觉得我的文章对你有用,请随意赞赏