

 **帮助改进此页面** 

要帮助改进本用户指南，请选择位于每个页面右侧窗格中的**在 GitHub 上编辑此页面**链接。

# 混合节点的安全更新修补
<a name="hybrid-nodes-security"></a>

本主题介绍为在混合节点上运行的特定程序包和依赖项执行就地安全更新修补的过程。作为一项最佳实践，我们建议您定期更新混合节点以获取 CVE 和安全补丁。

有关升级 Kubernetes 版本的步骤，请参阅[升级集群的混合节点](hybrid-nodes-upgrade.md)。

可能需要安装安全补丁的软件的一个例子是 `containerd`。

## `Containerd`
<a name="_containerd"></a>

 `containerd` 是适用于 EKS 混合节点功能的标准 Kubernetes 容器运行时和核心依赖项，用于管理容器生命周期，包括提取映像和管理容器执行等。在混合节点上，您可以通过 [nodeadm CLI](https://docs.aws.amazon.com/eks/latest/userguide/hybrid-nodes-nodeadm.html) 来安装 `containerd`，也可以手动安装。`nodeadm` 将从操作系统分发的程序包或 Docker 程序包安装 `containerd`，具体取决于节点使用的操作系统。

`containerd` 中的 CVE 发布后，您可以使用以下方案，在混合节点上升级到 `containerd` 的修补版本。

## 第 1 步：检查补丁是否已发布
<a name="_step_1_check_if_the_patch_published_to_package_managers"></a>

您可以参考相应的安全公告，检查 `containerd` CVE 补丁是否已发布到相应的各个操作系统程序包管理器：
+  [Amazon Linux 2023](https://alas.aws.amazon.com/alas2023.html) 
+  [RHEL](https://access.redhat.com/security/security-updates/security-advisories) 
+  [Ubuntu 20.04](https://ubuntu.com/security/notices?order=newest&release=focal) 
+  [Ubuntu 22.04](https://ubuntu.com/security/notices?order=newest&release=jammy) 
+  [Ubuntu 24.04](https://ubuntu.com/security/notices?order=newest&release=noble) 

如果将该 Docker 存储库作为 `containerd` 的来源，您可以检查 [Docker 安全公告](https://docs.docker.com/security/security-announcements/)，来确定已修补版本是否在 Docker 存储库中可用。

## 第 2 步：选择安装补丁的方法
<a name="_step_2_choose_the_method_to_install_the_patch"></a>

在节点上就地修补和安装安全升级的方法有三种。具体可以使用的方法，取决于程序包管理器中的操作系统是否提供补丁：

1. 使用 `nodeadm upgrade` 发布到程序包管理器的安装补丁，详情请参阅[第 2 a 步](#hybrid-nodes-security-nodeadm)。

1. 直接使用程序包管理器安装补丁，详情请参见[第 2 b 步](#hybrid-nodes-security-package)。

1. 安装未在程序包管理器中发布的自定义补丁。对于[第 2 c 步](#hybrid-nodes-security-manual) 中 `containerd` 的自定义补丁，有一些特殊注意事项需要注意。

## 第 2 a 步：使用 `nodeadm upgrade` 修补
<a name="hybrid-nodes-security-nodeadm"></a>

确认 `containerd` CVE 补丁已发布到操作系统或 Docker 存储库（Apt 或 RPM）后，您可以使用 `nodeadm upgrade` 命令升级到最新版本的 `containerd`。由于这不属于 Kubernetes 版本升级，因此您必须将当前的 Kubernetes 版本传递给 `nodeadm` 升级命令。

```
nodeadm upgrade K8S_VERSION --config-source file:///root/nodeConfig.yaml
```

## 第 2 b 步：使用操作系统程序包管理器修补
<a name="hybrid-nodes-security-package"></a>

您也可以通过相应的程序包管理器来获取更新，并使用该更新来升级 `containerd` 程序包，如下所示。

 **Amazon Linux 2023** 

```
sudo yum update -y
sudo yum install -y containerd
```

 **RHEL** 

```
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
sudo yum update -y
sudo yum install -y containerd
```

 **Ubuntu** 

```
sudo mkdir -p /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update -y
sudo apt install -y --only-upgrade containerd.io
```

## 第 2 c 步：`Containerd` CVE 补丁未在程序包管理器中发布
<a name="hybrid-nodes-security-manual"></a>

如果修补后的 `containerd` 版本只能通过其他方式获取，而未在程序包管理器中提供，例如对于 GitHub 发行版，可以从 GitHub 官方网站安装 `containerd`。

1. 如果计算机已作为混合节点加入集群，则需要运行 `nodeadm uninstall` 命令。

1. 安装官方 `containerd` 二进制文件。您可以使用 GitHub 上的[官方安装步骤](https://github.com/containerd/containerd/blob/main/docs/getting-started.md#option-1-from-the-official-binaries)。

1. 运行 `nodeadm install` 命令并将 `--containerd-source` 参数设置为 `none`，这将跳过通过 `nodeadm` 安装 `containerd` 的过程。对于节点运行的任何操作系统，您可以在 `containerd` 来源中使用 `none` 的值。

   ```
   nodeadm install K8S_VERSION --credential-provider CREDS_PROVIDER --containerd-source none
   ```