设计资源之间的访问边界

本文档介绍了在 Google Distributed Cloud (GDC) 气隙环境中,使用组织、项目和 Kubernetes 集群设计工作负载的层次结构和隔离的最佳实践。此指南在高效利用资源、隔离工作负载和简化运营之间取得了平衡。

设计组织,以在客户之间实现物理隔离和逻辑隔离

Organization 资源是单个客户拥有的所有资源的根。组织内工作负载之间的精细访问权限控制可以通过角色绑定和网络政策来定义。如需了解详情,请参阅 身份和访问权限管理

GDC 可用区内的每个组织都为计算基础架构提供物理隔离,并为网络、存储和其他服务提供逻辑隔离。除非获得明确授权,否则一个组织中的用户无权访问另一个组织中的资源。默认情况下,不允许从一个组织到另一个组织的网络连接,除非明确配置为允许从一个组织传出数据并传入另一个组织。

定义可以共享组织的工作负载的范围

在公司环境中,组织的范围可能因贵公司定义信任边界的方式而异。有些公司可能更愿意为公司中的不同实体创建多个组织资源。例如,如果部门需要完全物理隔离和管理隔离其工作负载,则每个公司部门都可能是 GDC 的独立客户,并拥有独立的组织。

一般来说,我们建议您根据以下信号将多个工作负载分组到一个组织中:

  • 工作负载可以共享依赖项。例如,这可能是共享数据源、工作负载之间的连接或共享监控工具。
  • 工作负载可以共享管理信任根。可以信任同一管理员,使其对组织中的所有工作负载拥有特权访问权限。
  • 只要有足够的逻辑隔离,工作负载就可以与同一组织中的其他工作负载共享底层物理基础架构。
  • 同一预算持有者对工作负载预算总额负责。 如需详细了解如何查看组织的汇总费用或按工作负载进行精细分析,请参阅 “结算”页面。
  • 工作负载可用性要求必须遵循您对多可用区距离的高可用性要求。

设计项目,以在工作负载之间实现逻辑隔离

在组织内,我们建议预配多个项目,以在资源之间创建逻辑隔离。同一组织中的项目可能会共享底层物理基础架构,但项目用于根据 Identity and Access Management (IAM) 政策和网络政策,使用逻辑边界来分隔工作负载。

设计项目边界时,请考虑资源可以共享的最大功能集,例如 角色绑定网络政策可观测性 要求。将可以共享此功能的资源分组到一个项目中,并将无法共享此功能的资源移到另一个项目中。

就 Kubernetes 而言,项目是 Kubernetes 命名空间,该命名空间在组织中的所有集群中预留。虽然命名空间在多个集群中预留,但这并不意味着系统会自动在所有集群中调度 pod。调度到特定集群的 pod 仍会调度到该特定集群。

下图展示了如何将角色绑定应用于跨多个集群的项目。

GDC RBAC 政策

角色绑定在项目级层设置,用于定义谁可以对哪种资源类型执行哪些操作。虚拟机或 pod 等工作负载会部署到项目中,对这些工作负载的访问权限受角色绑定约束。无论虚拟机工作负载和容器工作负载部署到哪个集群,角色绑定都会始终如一地应用于这些工作负载。

下图展示了网络政策如何管理项目之间的访问权限。Backend ProjectFrontend ProjectDatabase Project 之间的项目间通信已停用。不过,每个项目中的资源可以相互通信。

网络政策 在项目级层设置,用于选择性地允许资源之间的网络 访问。默认情况下,单个项目中的所有资源都允许在内部网络上相互通信,并且一个项目中的资源无法与另一个项目中的资源通信。无论资源是否部署到同一集群,网络政策的这种行为都适用。

您还可以定义 ProjectNetworkPolicy 自定义资源,以启用项目间通信。此政策是为每个项目定义的,用于允许来自其他项目的入站流量。下图展示了为 Backend Project 定义的 ProjectNetworkPolicy 自定义资源,用于允许从 Frontend ProjectDatabase Project 传入数据。

GDC 项目级政策

此外,监控堆栈会收集整个组织的指标,但您可以在资源层次结构的各个层级进行过滤和查询。您可以使用集群或命名空间等实体查询指标。

为每个软件开发环境创建项目

对于每个工作负载,我们建议为每个软件开发环境创建单独的项目。软件开发环境是 GDC 宇宙中的一个区域,旨在用于与指定生命周期阶段对应的所有操作。例如,您可以拥有用于测试、开发和生产的软件开发环境。通过分隔软件开发环境,您可以精细地定义角色绑定和网络政策,这样,在用于非生产环境的项目中所做的更改就不会影响生产环境。

在项目中授予资源级角色绑定

根据您的团队结构和要求,您可以允许开发者修改其管理的项目中的任何资源,也可以要求更精细的访问权限控制。在项目中,您可以授予精细的角色绑定,以便各个开发者可以访问项目中的部分资源,而不是所有资源。例如,团队可能有一位数据库管理员,该管理员必须管理数据库但不能修改其他资源,而团队中的软件开发者则不得有权修改数据库。

设计集群,以实现 Kubernetes 操作的逻辑隔离

Kubernetes 集群不是硬租户边界,因为 角色绑定网络政策 适用于项目,而不是 Kubernetes 集群。Kubernetes 集群和项目具有多对多关系。您可以在单个项目中拥有多个 Kubernetes 集群,也可以拥有跨多个项目的单个 Kubernetes 集群。