在 Azure Kubernetes 服务(AKS)中使用托管命名空间

Azure Kubernetes 服务(AKS)中的托管命名空间提供了一种在逻辑上隔离群集中的工作负荷和团队的方法。 此功能使管理员能够在命名空间级别强制实施资源配额、应用网络策略和管理访问控制。 有关托管命名空间的详细概述,请参阅 托管命名空间概述。

在您开始之前

先决条件

先决条件 注释
Azure CLI 2.80.0 或更高版本。 若要查找 CLI 版本,请运行 az --version。 如果需要安装或升级,请参阅 安装 Azure CLI。
AKS API 版本 2025-09-01 或更高版本。
所需权限(s) Microsoft.ContainerService/managedClusters/managedNamespaces/* 或 Azure Kubernetes 服务 Namespace Contributor 内置角色。 Microsoft.Resources/deployments/* 位于包含群集的资源组中。 有关详细信息,请参阅 托管命名空间内置角色。

局限性

  • 不允许尝试在板载系统命名空间(如kube-system、app-routing-systemistio-system、gatekeeper-system等)上尝试托管命名空间。
  • 当命名空间是托管命名空间时,会阻止通过 Kubernetes API 更改命名空间。
  • 列出门户中要转换的现有命名空间在使用私有群集时不起作用。 可以添加新命名空间。

在群集上创建托管命名空间并分配用户

注释

创建托管命名空间时,会在群集上安装组件,以便将命名空间与 Azure 资源管理器中的状态进行协调。 此组件阻止对 Kubernetes API 中的托管字段和资源所做的更改,确保与所需配置保持一致。

以下 Bicep 示例演示如何创建托管命名空间作为托管群集的子资源。 请确保为 defaultNetworkPolicy、adoptionPolicy 和 deletePolicy 选择适当的值。 有关这些参数的含义的详细信息,请参阅 托管命名空间概述。

resource existingCluster 'Microsoft.ContainerService/managedClusters@2024-03-01' existing = {
  name: 'contoso-cluster'
}

resource managedNamespace 'Microsoft.ContainerService/managedClusters/managedNamespaces@2025-09-01' = {
  parent: existingCluster
  name: 'retail-team'
  location: location
  properties: {
    defaultResourceQuota: {
      cpuRequest: '1000m'
      cpuLimit: '2000m'
      memoryRequest: '512Mi'
      memoryLimit: '1Gi'
    }
    defaultNetworkPolicy: {
      ingress: 'AllowSameNamespace'
      egress: 'AllowAll'
    }
    adoptionPolicy: 'IfIdentical'
    deletePolicy: 'Keep'
    labels: {
      environment: 'dev'
    }
    annotations: {
      owner: 'retail'
    }
  }
}

将 Bicep 文件 managedNamespace.bicep 保存到本地计算机。

使用 Azure CLI 部署 Bicep 文件。

az deployment group create --resource-group <resource-group> --template-file managedNamespace.bicep

定义变量

定义要在后续步骤中使用的以下变量。

RG_NAME=cluster-rg
CLUSTER_NAME=contoso-cluster
NAMESPACE_NAME=retail-team
LABELS="environment=dev"
ANNOTATIONS="owner=retail"

创建托管命名空间

若要自定义其配置,托管命名空间具有在创建过程中可供选择的各种参数选项。 请确保为 ingress-network-policy、 egress-network-policy、 adoption-policy和 delete-policy选择适当的值。 有关这些参数的含义的详细信息,请参阅 托管命名空间概述。

az aks namespace add \
    --name ${NAMESPACE_NAME} \
    --cluster-name ${CLUSTER_NAME} \
    --resource-group ${RG_NAME} \
    --cpu-request 1000m \
    --cpu-limit 2000m \
    --memory-request 512Mi \
    --memory-limit 1Gi \
    --ingress-policy [AllowSameNamespace|AllowAll|DenyAll] \
    --egress-policy [AllowSameNamespace|AllowAll|DenyAll] \
    --adoption-policy [Never|IfIdentical|Always] \
    --delete-policy [Keep|Delete] \
    --labels ${LABELS} \
    --annotations ${ANNOTATIONS}

分配角色

创建命名空间后,可以为控制平面和数据平面分配 一个内置角色 。

ASSIGNEE="user@contoso.com"
NAMESPACE_ID=$(az aks namespace show --name ${NAMESPACE_NAME} --cluster-name ${CLUSTER_NAME} --resource-group ${RG_NAME} --query id -o tsv)

分配控制平面角色,以便能够在门户、Azure CLI 输出和 Azure 资源管理器中查看托管命名空间。 此角色还允许用户检索凭据以连接到此命名空间。

az role assignment create \
  --assignee ${ASSIGNEE} \
  --role "Azure Kubernetes Service Namespace User" \
  --scope ${NAMESPACE_ID}

分配数据平面角色,以便能够使用 Kubernetes API 在命名空间中创建资源。

az role assignment create \
  --assignee ${ASSIGNEE} \
  --role "Azure Kubernetes Service RBAC Writer" \
  --scope ${NAMESPACE_ID}
  1. 登录到 Azure 门户。
  2. 在 Azure 门户主页上,选择“ 创建资源”。
  3. 在“ 类别 ”部分中,选择 “托管 Kubernetes 命名空间”。
  4. 在“ 基本信息 ”选项卡上的 “项目详细信息 ”下配置以下设置:
    1. 选择要创建命名空间的目标 群集 。
    2. 如果要创建新命名空间,请保留默认 创建新,否则请选择 更改现有到托管以转换现有命名空间。
  5. 配置 网络策略 以应用于命名空间上。
  6. 配置命名空间 的资源请求和限制 。
  7. 选择 成员(用户或组) 及其 角色。
    1. 分配 Azure Kubernetes 服务命名空间用户 角色,以便他们有权在门户、Azure CLI 输出和 Azure 资源管理器中查看托管命名空间。 此角色还允许用户检索凭据以连接到此命名空间。
    2. 分配 Azure Kubernetes 服务 RBAC 编写器 角色,以便他们有权使用 Kubernetes API 在命名空间中创建资源。
  8. 选择 “查看 + 创建 ”以在配置上运行验证。 验证完成后,选择“创建”。

列出托管命名空间

可以使用 Azure CLI 列出不同范围内的托管命名空间。

订阅级别

运行以下命令列出订阅中的所有托管命名空间。

az aks namespace list --subscription <subscription-id>

资源组级别

运行以下命令列出特定资源组中的所有托管命名空间。

az aks namespace list --resource-group <rg-name>

群集级别

运行以下命令,列出特定群集中的所有托管命名空间。

az aks namespace list --resource-group <rg-name> --cluster-name <cluster-name>

列出托管命名空间

可以使用 Azure CLI 列出不同范围内的托管命名空间。

订阅级别

运行以下命令列出订阅中的所有托管命名空间。

az aks namespace list --subscription <subscription-id>

资源组级别

运行以下命令列出特定资源组中的所有托管命名空间。

az aks namespace list --resource-group <rg-name>

群集级别

运行以下命令,列出特定群集中的所有托管命名空间。

az aks namespace list --resource-group <rg-name> --cluster-name <cluster-name>

连接至群集

可以通过以下命令检索凭据以连接到命名空间。

az aks namespace get-credentials --name <namespace-name> --resource-group <rg-name> --cluster-name <cluster-name>

连接至群集

可以通过以下命令检索凭据以连接到命名空间。

az aks namespace get-credentials --name <namespace-name> --resource-group <rg-name> --cluster-name <cluster-name>

后续步骤

本文重点介绍如何使用托管命名空间功能来逻辑隔离团队和应用程序。 可以进一步探索通过 部署安全措施应用的其他防护措施和最佳做法。