适用于: ✔️ AKS 自动 ✔️ AKS 标准
在 Azure Kubernetes 服务(AKS)中管理群集时,通常需要隔离团队和工作负荷。 通过逻辑隔离,可以将单个 AKS 群集用于多个工作负荷、团队或环境。 Kubernetes 命名空间构成了工作负载和资源的逻辑隔离边界。 执行逻辑隔离涉及实现脚本和过程来创建命名空间、设置资源限制、应用网络策略,以及通过基于角色的访问控制授予团队访问权限。 了解如何在 Azure Kubernetes 服务(AKS)中使用托管命名空间来简化命名空间管理、群集多租户和资源隔离。
群集的逻辑分离通常提供比物理隔离群集更高的 Pod 密度,群集中空闲的计算容量不足。 与 群集自动缩放程序 或 节点自动预配结合使用时,可以纵向扩展或缩减节点数以满足需求。 此最佳做法方法仅运行所需的节点数,从而最大程度地降低成本。
重要
AKS 预览功能可在自助服务和自愿选择的基础上启用。 预览版按“现状”和“视供应情况”提供,它们不包括在服务级别协议和有限保证范围内。 AKS 预览功能是由客户支持尽最大努力部分覆盖。 因此,这些功能并不适合用于生产。 有关详细信息,请参阅以下支持文章:
网络策略
网络策略 是 Kubernetes 资源,用于控制 Pod、命名空间和外部终结点之间的流量流。 网络策略允许你定义入口(传入)和出口(传出)流量的规则,确保只允许经过授权的通信。 通过应用网络策略,可以增强群集中工作负荷的安全性和隔离性。
注释
“允许同一命名空间”的默认入口网络策略规则默认选择采用安全的立场。 如果需要从部署它们的命名空间外部访问 Kubernetes 服务、入口或网关,例如,需要从部署在单独命名空间中的入口控制器访问,则需要选择 “全部允许”。 然后,可以应用自己的网络策略来限制入口仅来自该命名空间。
托管命名空间附带一组内置策略。
- 全部允许:允许所有网络流量。
- 允许同一命名空间:允许同一命名空间中的所有网络流量。
- 全部拒绝:拒绝所有网络流量。
可以对 入口 和 出口 规则应用任何内置策略,并且它们具有以下默认值。
Policy | 默认值 |
---|---|
流入量 | 允许同一命名空间 |
Egress | 全部允许 |
资源配额
资源配额 是用于管理和限制群集中命名空间的资源消耗的 Kubernetes 资源。 它们允许管理员定义命名空间中工作负荷将使用的 CPU、内存、存储或其他资源量的约束。 通过应用资源配额,可以确保资源分配公平、防止资源过度使用和维护群集稳定性。
可以使用以下资源配额创建托管命名空间:
- CPU 请求和限制:定义命名空间中工作负荷可以请求或使用的最小和最大 CPU 资源量。 配额可确保工作负荷有足够的 CPU 资源运行,同时防止过度使用可能会影响其他命名空间。 配额以 milliCPU 形式定义,
-
内存请求和限制:指定命名空间中工作负荷可以请求或使用的最小和最大内存资源量。 配额通过避免内存过度使用并确保跨命名空间公平资源分配来帮助保持稳定性。 配额以两种等效项的形式定义,例如
Ei
,Pi
、Ti
Gi
Mi
Ki
。
标签和批注
Kubernetes 标签 和 注释 是附加到 Kubernetes 对象(如命名空间)的元数据,可提供其他信息。 标签是用于组织和选择资源的键值对,可实现高效的分组和查询。 另一方面,注释用于存储非身份元数据,例如配置详细信息或作说明,这些工具或系统将使用这些元数据。
可以选择性地设置要应用于命名空间的 Kubernetes 标签和批注。
采用策略
采用策略确定在创建托管命名空间时如何处理 Kubernetes 中的现有命名空间。
警告
载入要管理的现有命名空间可能会导致中断。 如果应用 的资源配额 小于 Pod 请求的资源配额,则会拒绝超过配额的新部署和 Pod。 现有部署不会受到影响,但缩放将被拒绝。 将 网络策略 应用于现有命名空间可能会影响现有流量。 确保测试并验证策略,以避免 Pod 或外部终结点之间的通信发生意外中断。
可以使用以下选项:
- 从不:如果群集中已存在命名空间,则尝试将该命名空间创建为托管命名空间失败。
- IfIdentical:接管要管理的现有命名空间,前提是现有命名空间与所需配置之间没有任何差异。
- 始终:始终接管要管理的现有命名空间,即使可能会覆盖命名空间中的某些字段。
删除策略
删除策略指定删除托管命名空间资源时 Kubernetes 命名空间的处理方式。
警告
使用 Delete 策略删除托管命名空间会导致删除该命名空间中的所有资源,例如部署、服务、入口和其他 Kubernetes 对象。 在继续作之前,请确保备份或迁移任何关键资源。
可以使用以下选项:
-
保留:仅在使 Kubernetes 命名空间保持不变时删除托管命名空间资源。 此外,
ManagedByARM
标签将从命名空间中删除。 - 删除:同时删除托管命名空间资源和 Kubernetes 命名空间。
托管命名空间内置角色
托管命名空间对控制平面使用以下内置角色。
角色 | Description |
---|---|
Azure Kubernetes 服务命名空间参与者 | 允许访问群集上的创建、更新和删除托管命名空间。 |
Azure Kubernetes 服务命名空间用户 | 允许对群集上的托管命名空间进行只读访问。 允许访问命名空间上的凭据。 |
托管命名空间对数据平面使用以下内置角色。
角色 | Description |
---|---|
Azure Kubernetes 服务 RBAC 读取器 | 允许进行只读访问并查看命名空间中的大多数对象。 它不允许查看角色或角色绑定。 此角色不允许查看机密,因为读取机密的内容允许访问命名空间中的 ServiceAccount 凭据,这将允许 API 访问作为命名空间中的任何 ServiceAccount(特权升级形式)。 |
Azure Kubernetes 服务 RBAC 编写器 | 允许对命名空间中的大多数对象进行读/写访问。 此角色不允许查看或修改角色或角色绑定。 但是,允许此角色以命名空间中任何 ServiceAccount 的身份访问机密和运行 Pod,因此可用它获取命名空间中任何 ServiceAccount 的 API 访问级别。 |
Azure Kubernetes 服务 RBAC 管理员 | 允许对命名空间中的大多数资源进行读/写访问,包括能够在命名空间中创建角色和角色绑定。 此角色不允许对资源配额或命名空间本身进行写入访问。 |