服务发现 - Amazon Elastic Container Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

服务发现

Amazon ECS 服务可配置为使用 Service Discovery。服务发现使用 Amazon Cloud Map API 操作,用于托管 Amazon ECS 服务的 HTTP 和 DNS 命名空间。有关更多信息,请参阅 Amazon Cloud Map 开发人员指南 中的什么是 Amazon Cloud Map

当您在 Amazon Cloud Map 中创建私有命名空间时,我们会自动创建 Route 53 托管区域。Amazon ECS 服务可在 Route 53 中注册一个命名友好且可预测的 DNS 名称。随着您的 Amazon ECS 服务纵向扩展或横向扩展,托管区域会自动更新。其他服务会执行 DNS 查找,以确定是否与该服务建立连接。

服务发现在以下 Amazon Web Services 区域 中可用:

区域名称 区域

美国东部(弗吉尼亚州北部)

us-east-1

美国东部(俄亥俄州)

us-east-2

美国西部(北加利福尼亚)

us-west-1

US West (Oregon)

us-west-2

非洲(开普敦)

af-south-1

亚太地区(香港)

ap-east-1

亚太地区(孟买)

ap-south-1

亚太地区(东京)

ap-northeast-1

亚太地区(首尔)

ap-northeast-2

亚太地区(大阪)

ap-northeast-3

亚太地区(新加坡)

ap-southeast-1

Asia Pacific (Sydney)

ap-southeast-2

亚太地区(雅加达)

ap-southeast-3

Canada (Central)

ca-central-1

中国(北京)

cn-north-1

中国(宁夏)

cn-northwest-1

欧洲(法兰克福)

eu-central-1

Europe (Ireland)

eu-west-1

欧洲(伦敦)

eu-west-2

Europe (Paris)

eu-west-3

欧洲(米兰)

eu-south-1

欧洲(斯德哥尔摩)

eu-north-1

中东(巴林)

me-south-1

中东(阿联酋)

me-central-1

South America (São Paulo)

sa-east-1

Amazon GovCloud(美国东部)

us-gov-east-1

Amazon GovCloud(美国西部)

us-gov-west-1

服务发现概念

服务发现包括以下组件:

  • 服务发现命名空间:共享相同域名的服务的逻辑组,例如 example.com。此域名是您要向其路由流量的域名。您可以通过调用 aws servicediscovery create-private-dns-namespace 命令或在 Amazon ECS 经典控制台中创建命名空间。您可以使用 aws servicediscovery list-namespaces 命令来查看有关当前账户创建的命名空间的摘要信息。有关服务发现命令的更多信息,请参阅 create-private-dns-namespace(服务发现)list-namespaces 参考指南中的 Amazon Cloud Map 和 Amazon CLI。

  • 服务发现服务:存在于服务发现命名空间中,由命名空间的服务名称和 DNS 配置组成。它提供了以下核心组件:

    • 服务注册:让您可通过 DNS 或 Amazon Cloud Map API 操作查找服务,并获取一个或多个可用于连接到该服务的可用终端节点。

  • 服务发现实例:存在于服务发现服务中并包含与服务目录中的每个 Amazon ECS 服务相关联的属性。

    • 实例属性:将以下元数据添加为配置为使用服务发现的每个 Amazon ECS 服务的自定义属性:

      • AWS_INSTANCE_IPV4 -对于 A 记录,为 Route 53 响应 DNS 查询而返回和 Amazon Cloud Map 在发现实例详细信息时返回的 IPv4 地址,例如 192.0.2.44

      • AWS_INSTANCE_PORT – 与服务发现服务关联的端口值。

      • AVAILABILITY_ZONE – 向其启动任务的可用区。对于使用 EC2 启动类型的任务,这是容器实例所在的可用区。对于使用 Fargate 启动类型的任务,这是弹性网络接口所在的可用区。

      • REGION – 任务所在区域。

      • ECS_SERVICE_NAME – 任务所属的 Amazon ECS 服务的名称。

      • ECS_CLUSTER_NAME – 任务所属的 Amazon ECS 集群的名称。

      • EC2_INSTANCE_ID - 在其上放置任务的容器实例的 ID。如果任务使用的是 Fargate 启动类型,则不会添加此自定义属性。

      • ECS_TASK_DEFINITION_FAMILY - 任务使用的任务定义系列。

      • ECS_TASK_SET_EXTERNAL_ID – 如果为外部部署创建任务集并将任务集与服务发现注册表关联,则 ECS_TASK_SET_EXTERNAL_ID 属性会包含任务集的外部 ID。

  • Amazon ECS 运行状况检查:Amazon ECS 执行定期容器级别的运行状况检查。如果端点不传递运行状况检查,则会将其从 DNS 路由中删除并标记为不正常。

服务发现注意事项

使用服务发现时应注意以下事项:

  • Fargate 上使用平台版本1.1.0或更高版本的任务支持服务发现。有关更多信息,请参阅Amazon Fargate 平台版本

  • 对于配置为使用服务发现的服务,每个服务的任务限制为 1,000 个。这是由于 Route 53 服务配额造成的。

  • Amazon ECS 经典控制台中的“创建服务”工作流程仅支持向私有 DNS 命名空间注册服务。在创建 Amazon Cloud Map 私有 DNS 命名空间时,将自动创建 Route 53 私有托管区域。

  • 必须配置 VPC DNS 属性才能成功解析 DNS。有关如何配置属性的信息,请参阅 Amazon VPC 用户指南VPC 中的 DNS 支持

  • 为服务发现服务创建的 DNS 记录将始终注册任务的私有 IP 地址,而不是公有 IP 地址,即使使用公共命名空间也是如此。

  • 服务发现要求任务指定 awsvpcbridgehost 网络模式(不支持 none)。

  • 如果服务任务定义使用 awsvpc 网络模式,您可以为每个服务任务创建 A 或 SRV 记录的任何组合。如果您使用 SRV 记录,则需要端口。

  • 如果服务任务定义使用 bridgehost 网络模式,则 SRV 记录是唯一受支持的 DNS 记录类型。为每个服务任务创建 SRV 记录。SRV 记录必须从任务定义中指定容器名称和容器端口组合。

  • 服务发现服务的 DNS 记录可以在 VPC 中查询。它们采用以下格式:<service discovery service name>.<service discovery namespace>

  • 在服务名称上执行 DNS 查询时,A 记录会返回一组与任务对应的 IP 地址。SRV 记录会返回每个任务的一组 IP 地址和端口。

  • 如果您有不超过 8 条正常的记录,Route 53 会向所有 DNS 查询提供所有正常记录。

  • 如果所有记录都不正常,Route 53 会向 DNS 查询提供最多 8 条不正常的记录。

  • 您可以为负载均衡器后面的服务配置服务发现,但服务发现流量会始终路由至此任务而不会路由至负载均衡器。

  • 服务发现不支持使用 Classic Load Balancers。

  • 我们建议对服务发现服务使用由 Amazon ECS 管理的容器级别的运行状况检查。

    • HealthCheckCustomConfig – Amazon ECS 代表您管理运行状况检查。Amazon ECS 使用来自容器和运行状况检查的信息以及您的任务状态,通过 Amazon Cloud Map 更新运行状况。在创建服务发现服务时,使用 --health-check-custom-config 参数来指定。有关更多信息,请参阅 Amazon Cloud Map API 参考中的 HealthCheckCustomConfig

  • 如果使用 Amazon ECS 经典控制台,则工作流程会为每个服务创建一个服务发现服务。它会将所有任务 IP 地址映射为 A 记录,或将任务 IP 地址和端口映射为 SRV 记录。

  • 服务发现只能在创建服务时进行配置。不支持更新现有服务以首次配置服务发现或更改当前配置。

  • 使用服务发现时创建的 Amazon Cloud Map 资源必须手动清理。

Amazon ECS 经典控制台体验

Amazon ECS 经典控制台中的服务创建工作流程支持服务发现。服务发现只能在首次创建服务时进行配置。不支持更新现有服务以首次配置服务发现或更改当前配置。

要创建使用服务发现的新 Amazon ECS 服务,请参阅 在经典控制台中创建 Amazon ECS 服务

服务发现定价

使用 Amazon ECS 服务发现的客户需要为 Route 53 资源和 Amazon Cloud Map 发现 API 操作付费。这涉及到创建 Route 53 托管区域和查询服务注册表的成本。更多信息,请参阅 Amazon Cloud Map 开发人员指南中的 Amazon Cloud Map 定价

Amazon ECS 执行容器级别的运行状况检查并将其公开到 Amazon Cloud Map 自定义运行状况检查 API 操作。目前将此提供给客户没有任何额外成本。如果您为公开任务配置其他网络运行状况检查,则需要为这些运行状况检查付费。