在 Azure Container Linux (ACL) 节点池中切换 SELinux 模式以进行故障排除

本文介绍如何出于故障排除目的,在 Azure Kubernetes 服务 (AKS) 中的 Azure Container Linux (ACL) 节点上,将 SELinux(Security-Enhanced Linux)从 enforcing 模式 切换为 宽容模式。 当您需要收集诊断信息或验证在 ACL 节点上被 SELinux 强制机制阻止的工作负载行为时,这会很有用。

症状

您需要收集诊断信息或验证工作负载行为,但 SELinux 强制模式会阻止对 ACL 节点执行相关操作。

原因

默认情况下,ACL 节点在强制模式下运行 SELinux。 若要更改行为,必须在节点池上应用 ACL 安全配置文件标记。

先决条件

解决方案

若要将 SELinux 从强制模式切换到 ACL 节点上的宽松模式,可以 创建新的 ACL 节点池 ,或使用相应的标记 更新现有的 ACL 节点池 。 要设置的标记为 acl-node-security-profile=selinux=permissive.

选项 1:在宽松模式下创建新的 ACL 节点池

  1. 使用带 参数的 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
    
  2. 使用 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 节点池

  1. 使用带有 参数的 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
    
  2. 使用 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"
        }
      }
    ]
    
  3. 重启节点池中的节点,使新的 SELinux 模式生效。

验证

  1. 使用 kubectl debug 连接到目标池中的一个节点,并切换到主机文件系统。

  2. 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