SELinux

RKE2 可以在支持 SELinux 的系统上运行,这是安装在 CentOS/RHEL 7 & 8 时的默认设置。 支持该设置的策略container-selinux 策略的一个特殊版本,用于 containerd。它解释了 containerd 安装在非标准位置的原因,以及为什么使用持久和短暂状态。

自定义上下文标签

RKE2 将 control plane 服务作为静态 pod 运行,需要访问多个 container_var_lib_t 位置。etcd 容器必须能够在 /var/lib/rancher/rke2/server/db 下读写,并与 kube-apiserverkube-controller-managerkube-scheduler 一起从 /var/lib/rancher/rke2/server/tls 读取。 为了不过度授权,例如 spc_t,RKE2 SELinux 策略引入了 rke2_service_db_trke2_service_t 上下文标签,分别为读写和只读访问。这些标签将仅适用于 RKE2 control plane 静态 pod。

配置

RKE2 对 SELinux 的支持相当于一个配置项,即 --selinux 布尔标志。这是一个通向 containerd/cri toml 的 CRI 部分的 enable_selinux 布尔值的通道。如果 RKE2 是通过 tarball 安装的,那么 SELinux 将不会在没有额外配置的情况下启用。推荐的配置方法是使用 RKE2 config.yaml 中的一个条目,例如:

# /etc/rancher/rke2/config.yaml is the default location
selinux: true

这相当于将 --selinux 标志传递给 rke2 serverrke2 agent 命令行或设置 RKE2_SELINUX=true 环境变量。