你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

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

适用于:✔️ AKS 自动版 ✔️ 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 Service Namespace Contributor 内置角色。 对包含群集的资源组的 Microsoft.Resources/deployments/* 权限。 有关详细信息,请参阅托管命名空间内置角色

局限性

  • 不允许将 kube-systemapp-routing-systemistio-systemgatekeeper-system 等系统命名空间纳入托管命名空间。
  • 当命名空间是托管命名空间时,系统会阻止通过 Kubernetes API 更改命名空间。
  • 在门户中列出需要转换的现有命名空间这一操作在专用群集中无法实现。 可以添加新的命名空间。

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

注释

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

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

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-policyegress-network-policyadoption-policydelete-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 Writer”角色,以便他们有权使用 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>

后续步骤

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