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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

服务发现

Amazon ECS 服务可以选择配置为使用 Amazon ECS 服务发现。服务发现使用 AWS Cloud Map API 操作来管理 Amazon ECS 服务的 HTTP 和 DNS 命名空间。有关更多信息,请参阅 什么是 AWS Cloud Map?AWS Cloud Map 开发人员指南.

服务发现 在以下 AWS 区域中提供:

区域名称 区域

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

us-east-1

美国东部(俄亥俄州)

us-east-2

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

us-west-1

美国西部(俄勒冈)

us-west-2

亚太地区(香港)

ap-east-1

亚太地区(孟买)

ap-south-1

亚太区域(东京)

ap-northeast-1

亚太区域(首尔)

ap-northeast-2

亚太区域(新加坡)

ap-southeast-1

亚太区域(悉尼)

ap-southeast-2

加拿大 (中部)

ca-central-1

欧洲(法兰克福)

eu-central-1

欧洲(爱尔兰)

eu-west-1

欧洲(伦敦)

eu-west-2

欧洲(巴黎)

eu-west-3

欧洲(斯德哥尔摩)

eu-north-1

中东(巴林)

me-south-1

南美洲(圣保罗)

sa-east-1

服务发现 概念

服务发现 包括以下组件:

  • 服务发现 命名空间: 逻辑组 服务发现 共享相同域名的服务,例如 example.com.

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

    • 服务注册: 允许您通过DNS或 AWS Cloud Map API操作并返回可用于连接到服务的一个或多个可用端点。

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

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

      • AWS_INSTANCE_IPV4 – 对于 A 记录, IPv4 地址 Route 53 响应DNS查询返回并 AWS Cloud Map 在发现实例详细信息时返回,例如, 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 路由中删除并标记为不正常。

服务发现 注意事项

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

  • 如果使用平台版本 v1.1.0 或更高版本,则使用 Fargate 启动类型的任务支持服务发现。有关更多信息,请参阅AWS Fargate 平台版本

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

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

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

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

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

  • 服务发现 服务的 DNS 记录可以在 VPC 中查询。它们使用以下格式: <服务发现 service name>.<服务发现 namespace>。有关更多信息,请参阅 步骤 3 验证 服务发现.

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

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

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

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

  • 服务发现 不支持使用 传统负载均衡器。

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

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

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

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

  • 必须手动清除使用服务发现时创建的 AWS Cloud Map 资源。有关更多信息,请参阅教程 使用创建服务 服务发现主题中的 步骤 4. 清除

Amazon ECS 控制台体验

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

要创建使用服务发现的新 Amazon ECS 服务,请参阅创建服务

服务发现 定价

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

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