Skip to main content

场景三:强制清理并回收死锁 IP 地址

适用场景: 云主机在平台已被删除,但由于底层异常,导致虚拟网卡端口(Port)成为“孤儿”,死锁占用了特定 IP(提示 IP 冲突或无法分配)。

操作节点: iStack 的主控制节点(Controller Node)

示例死锁 IP: 192.168.92.141

操作步骤:

  1. 登录控制节点并加载鉴权环境

    SSH 登录到控制节点,加载 OpenStack 管理员环境变量(防止出现 Missing value auth-url 报错):

    Bash

    source /etc/kolla/admin-openrc.sh
    # 备用路径:source ~/admin-openrc.sh
  2. 查询目标 IP 绑定的端口 ID

    执行以下命令,在网络组件(Neutron)中找出占用该 IP 的网卡:

    Bash

    openstack port list --fixed-ip ip-address=192.168.92.141

    在输出的表格中,复制第一列的 ID 值(例如 d8a2b1...)。

  3. 强制删除端口释放 IP

    使用刚刚复制的端口 ID 执行删除命令:

    Bash

    openstack port delete <复制的端口ID>
  4. 验证 IP 是否已释放

    再次执行查询命令:

    Bash

    openstack port list --fixed-ip ip-address=192.168.92.141

    如果返回结果为空表格,说明该 IP 已成功释放,可供其他云主机使用。

补充步骤:清理底层僵尸虚拟机外壳(可选)

如果该死锁 IP 是由于我们手动修改过底层 XML(例如加了 UEFI),导致云管平台下发删除指令时 libvirt 拒绝删除引发的,你需要回到该云主机原本所在的计算节点(宿主机),彻底抹除它的尸体:

  1. 登录该宿主机并进入容器:docker exec -it gostack_libvirt bash

  2. 强制抹除虚拟机定义及 NVRAM 残留:

    Bash

    virsh undefine <云主机ID> --nvram