本文介绍如何出于故障排除目的,在 Azure Kubernetes 服务 (AKS) 中的 Azure Container Linux (ACL) 节点上,将 SELinux(Security-Enhanced Linux)从 enforcing 模式 切换为 宽容模式。 当您需要收集诊断信息或验证在 ACL 节点上被 SELinux 强制机制阻止的工作负载行为时,这会很有用。
症状
您需要收集诊断信息或验证工作负载行为,但 SELinux 强制模式会阻止对 ACL 节点执行相关操作。
原因
默认情况下,ACL 节点在强制模式下运行 SELinux。 若要更改行为,必须在节点池上应用 ACL 安全配置文件标记。
先决条件
- 已安装并登录 Azure CLI。
- 你知道 AKS 群集名称、资源组和节点池名称。
- 可以访问节点进行验证。 有关详细信息,请参阅 使用 kubectl 调试连接到 AKS 节点。
解决方案
若要将 SELinux 从强制模式切换到 ACL 节点上的宽松模式,可以 创建新的 ACL 节点池 ,或使用相应的标记 更新现有的 ACL 节点池 。 要设置的标记为 acl-node-security-profile=selinux=permissive.
选项 1:在宽松模式下创建新的 ACL 节点池
使用带 参数的
az aks nodepool add命令设置 ACL 安全配置文件标签,从而以--tags创建新的 ACL 节点池。az aks nodepool add \ --resource-group <resource-group-name> \ --cluster-name <cluster-name> \ --name <node-pool-name> \ --node-count 1 \ --tags acl-node-security-profile="selinux=permissive" \ --no-wait使用
az aks show命令验证标记是否已应用,以检查节点池配置文件及其标记。az aks show \ --resource-group <resource-group-name> \ --name <cluster-name> \ --query "agentPoolProfiles[].{nodepoolName:name,tags:tags}"示例输出:
[ { "nodepoolName": "<node-pool-name>", "tags": { "acl-node-security-profile": "selinux=permissive" } } ]
选项 2:更新现有的 ACL 节点池
使用带有 参数的
az aks nodepool update命令,将现有 ACL 节点池更新为--tags,以设置 ACL 安全配置文件标签。az aks nodepool update \ --resource-group <resource-group-name> \ --cluster-name <cluster-name> \ --name <node-pool-name> \ --tags acl-node-security-profile="selinux=permissive" \ --no-wait使用
az aks show命令验证标记是否已应用,以检查节点池配置文件及其标记。az aks show \ --resource-group <resource-group-name> \ --name <cluster-name> \ --query "agentPoolProfiles[].{nodepoolName:name,tags:tags}"示例输出:
[ { "nodepoolName": "<node-pool-name>", "tags": { "acl-node-security-profile": "selinux=permissive" } } ]重启节点池中的节点,使新的 SELinux 模式生效。
验证
使用
kubectl debug连接到目标池中的一个节点,并切换到主机文件系统。sestatus运行以下命令以检查当前的 SELinux 模式:sestatus在输出中,确认
Current mode显示permissive。 例如:SELinux status: enabled SELinuxfs mount: /sys/fs/selinux SELinux root directory: /etc/selinux Loaded policy name: targeted Current mode: permissive Mode from config file: permissive Policy MLS status: enabled Policy deny_unknown status: allowed Memory protection checking: actual (secure) Max kernel policy version: 33