关于 Ubuntu 节点 systemd 升级后容器网络异常的公告

ACK 集群中 Ubuntu 节点初始化过程中写入的网络配置与 systemd 软件包升级过程存在兼容性风险,导致 systemd 软件包升级过程中 Kubernetes 容器网络依赖的网卡配置被覆盖,继而造成 Pod 无法访问外部网络。

影响说明

阿里云已于 2025 年 06 月 11 日修复了该问题。新扩容的 Ubuntu 节点不受影响,但存量 Ubuntu 节点在部分场景下仍会触发此问题。

  • 部分早期(20241215日前)添加至 ACK 集群或由 ACK 集群扩容的 Ubuntu 节点默认开启了 apt 软件包自动升级功能。这些节点自动升级 systemd 软件包时可能触发此问题。

  • 登录 ACK 集群的 Ubuntu 节点后,通过apt命令手动执行 systemd 软件包升级时可能触发此问题。

您可执行以下脚本判断 Ubuntu 节点是否受到影响。

展开查看脚本

#!/bin/bash
set -e
set -x

if [[ -f /etc/systemd/network/99-default.link ]]; then
	if ! grep "MACAddressPolicy=none" /etc/systemd/network/99-default.link; then
		echo "/etc/systemd/network/99-default.link no correct"
		exit 1
	fi
else
	echo "/etc/systemd/network/99-default.link not exist"
	exit 1
fi

echo "/etc/systemd/network/99-default.link is correct"

if systemctl is-enabled apt-daily.timer; then
	echo "auto upgrade should not be enabled"
	exit 1
fi

if systemctl is-active apt-daily.timer; then
	echo "auto upgrade should not be enabled"
	exit 1
fi

if systemctl is-enabled apt-daily-upgrade.timer; then
	echo "auto upgrade should not be enabled"
	exit 1
fi

if systemctl is-active apt-daily-upgrade.timer; then
	echo "auto upgrade should not be enabled"
	exit 1
fi

echo "auto upgrade is disabled"

执行上述脚本后,如果返回/etc/systemd/network/99-default.link is correctauto upgrade is disabled,则表明 Ubuntu 节点不受影响。

解决方案

对 Ubuntu 节点池进行扩缩容替换

新添加到 ACK 集群或从 ACK 集群扩容的 Ubuntu 节点将无上述异常风险。您可以将 Ubuntu 节点移除再通过添加已有节点的方式重新添加到集群中,以规避上述异常风险。

逐个 Ubuntu 节点修复

您也可通过以下方式对每个 Ubuntu 节点进行检测和修复。

控制台

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择节点管理 > 节点池

  3. 单击受影响的节点池名称,在节点管理页签,勾选待修复的 Ubuntu 节点, 然后单击批量运维,选择执行 Shell 命令,单击确定

  4. 基本信息页面,保持默认配置,单击下一步:设置参数,在设置参数页面,填入以下 Shell 脚本,然后按照页面提示完成任务的提交。

    #!/bin/bash
    set -e
    set -x
    
    
    cat > /etc/systemd/network/99-default.link<< EOF
    [Match]
    OriginalName=*
    
    [Link]
    NamePolicy=keep kernel database onboard slot path
    AlternativeNamesPolicy=database onboard slot path
    MACAddressPolicy=none
    EOF
    
    systemctl disable --now apt-daily.service
    systemctl disable --now apt-daily.timer
    systemctl disable --now apt-daily-upgrade.service
    systemctl disable --now apt-daily-upgrade.timer

    提交任务后,在系统运维管理 OOS控制台的任务执行管理页面,查看任务执行情况。

命令行

您可以通过 SSH 等方式连接受影响的 Ubuntu 节点,执行以下修复脚本。

#!/bin/bash
set -e
set -x


cat > /etc/systemd/network/99-default.link<< EOF
[Match]
OriginalName=*

[Link]
NamePolicy=keep kernel database onboard slot path
AlternativeNamesPolicy=database onboard slot path
MACAddressPolicy=none
EOF

systemctl disable --now apt-daily.service
systemctl disable --now apt-daily.timer
systemctl disable --now apt-daily-upgrade.service
systemctl disable --now apt-daily-upgrade.timer

上述修复步骤完成后,新增调度到节点上的 Pod 将不受该问题影响。如果您发现节点上已有 Pod 存在网络联通性问题,您可手动重新部署该 Pod 进行修复。