Service Directory 是云端数据处理附录中规定的 Google 义务所涵盖的一项服务。
Service Directory 是一个集中的位置,可让您以一致可靠的方式发布、发现和连接服务,无论服务运行在何种环境中。Service Directory 支持 Google Cloud、多云和本地环境中的服务,并且可以将单个项目扩展到数千项服务和端点。
Service Directory 具有以下功能:
- 用于创建和解析命名空间、服务和端点的 Registration and Lookup API
- 与 Cloud DNS 集成。借助服务目录区域,您可以在虚拟私有云 (VPC) 上提供服务。
- IAM 集成,用于分配和控制服务公开范围和权限
- 内置的 Google Cloud CLI 和 Google Cloud 控制台支持与服务目录进行交互
- Cloud Monitoring 与 Cloud Logging 集成,用于监控、审核和调试 Service Directory 操作
为何使用 Service Directory
随着应用采用服务,由于这些服务的端点会发生变化,因此能够解析服务的位置变得更加困难。部署在混合环境中的服务会带来额外的障碍,因为这两种环境可能不共用相同的命名系统,这会使解析和连接服务变得非常困难。为了说明这一问题,请考虑以下示例。
假设您正在构建一个简单的 API,并且您的代码需要调用其他应用。如果端点信息保持不变,您可以将这些位置硬编码到代码中,或将其存储在一个小型配置文件中。但是,在采用微服务和多云的情况下,由于实例、服务和环境都可能发生变化,因此解决此问题会变得更加困难。
借助 Service Directory,您可以在一个位置注册所有服务,并使用 HTTP、gRPC 和 DNS 解析这些服务。
我们再来看看上图,这次添加 Service Directory。在下图中,每个服务实例都已注册到 Service Directory。这些注册会立即反映在 DNS 中,并且无论其实现和环境如何,都可以使用 HTTP/gRPC 进行查询。
您可以创建一个适用于多种产品(例如 App Engine 和 GKE)的通用服务名称。 Google Cloud您可以通过 DNS 提供这些服务。您可以根据服务账号的网络、项目和 IAM 角色对服务应用访问控制。
Service Directory 可解决以下问题:
- 互操作性:Service Directory 是一项通用命名服务,可在 Google Cloud、多云和本地环境中使用。您可以在这些环境之间迁移服务,同时仍使用相同的服务名称来注册和解析端点。
- 服务管理:Service Directory 是一项托管式服务。贵组织无需担心维护自己的服务注册库的高可用性、冗余性、可伸缩性或维护问题。
- 访问权限控制:借助服务目录,您可以使用 IAM 控制哪些人可以注册和解析您的服务。向团队、服务账号和组织分配 Service Directory 角色。
- 纯 DNS 的局限性:DNS 解析器在遵循 TTL 和缓存方面可能不可靠,无法处理较大的记录大小,并且无法提供向用户提供元数据的简便方法。除了 DNS 支持之外,Service Directory 还提供 HTTP 和 gRPC API 来查询和解析服务。
将 Cloud DNS 与 Service Directory 搭配使用
Cloud DNS 是运行在 Google 基础架构上的快速、可伸缩且可靠的域名系统 (DNS) 服务。
除了公开 DNS 区域之外,Cloud DNS 还为Google Cloud上的专用网络提供托管式内部 DNS 解决方案。借助专用 DNS 区域,您可以为虚拟机 (VM) 实例、负载平衡器或其他资源在内部命名。对这些专用 DNS 区域的 DNS 查询仅限于您的专用网络。
下图展示了如何使用 Service Directory 区域通过 DNS 查找来提供服务名称。
各个组件概览:
- 这些端点是使用 Service Directory API 直接向 Service Directory 注册的。您可以向 Service Directory 注册Google Cloud 和非Google Cloud 服务。
- 外部和内部客户端都可以通过以下网址查找这些服务:https://servicedirectory.googleapis.com
- 如需启用 DNS 请求,请在 Cloud DNS 中创建与 Service Directory 命名空间关联的 Service Directory 区域。
- 内部客户端可以使用 DNS、HTTP 和 gRPC 解析此服务。外部客户端(不在专用网络上的客户端)必须使用 HTTP 或 gRPC 解析服务名称。
配置示例
如何通过 DNS 公开服务
下图展示了如何在服务目录中对微服务架构进行建模,以及如何使用 DNS 使其可用。请注意,Service Directory 会完全维护服务和端点,但专用区域位于 Cloud DNS 中。
在该图(左侧)中,payments 服务已注册到名称为 backend-namespace
、区域为 us-east1
且项目为 gcp-project
的命名空间。该命名空间已与专用区域 example.com
相关联。
如需进行 DNS 查找,客户端会请求域名 _payments._tcp.payments.example.com
的 SRV 记录,该记录会解析为付款服务端点的端口号和地址记录。
后续步骤
- 如需了解如何设置 Service Directory 命名空间、在命名空间中创建服务以及向服务分配端点,请参阅配置 Service Directory。
- 如需了解如何创建利用现有命名空间的 Service Directory 区域,请参阅配置 Service Directory DNS 区域。
- 如需了解如何使用 DNS 查询现有 Service Directory 区域,请参阅使用 DNS 进行查询。
- 如需了解您在使用 Service Directory 时可能会遇到的常见问题的解决方案,请参阅问题排查。