虚拟服务 - AWS App Mesh

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

虚拟服务

虚拟服务是一种抽象的实际服务,由虚拟节点直接提供或通过虚拟路由器的方式间接提供。相关服务通过其 virtualServiceName 调用您的虚拟服务,然后这些请求将路由至指定为虚拟服务的提供商的虚拟节点或虚拟路由器。

创建虚拟服务。

AWS Management Console
使用 AWS Management Console 创建虚拟服务
  1. 打开 App Mesh 控制台,网址为 https://console.aws.amazon.com/appmesh/

  2. 选择要在其中创建虚拟服务的网格。列出了您拥有的所有网格以及已与您共享的所有网格。

  3. 在左侧导航中,选择虚拟服务

  4. 选择创建虚拟服务

  5. 对于虚拟服务名称,为您的虚拟服务选择一个名称。您可以选择任何名称,但建议使用您要定位的真实服务的服务发现名称,如 my-service.default.svc.cluster.local,这样可以更轻松地将您的虚拟服务与真实服务关联起来。通过这种方式,您无需更改代码以引用与代码当前引用名称不同的名称。您指定的名称必须解析为非环回 IP 地址,因为在将请求发送到 Envoy 代理之前,应用程序容器必须能够成功解析该名称。您可以使用任何非环回 IP 地址,因为应用程序或代理容器都不会与此 IP 地址通信。代理通过您在 App Mesh 中为其配置的名称与其他虚拟服务进行通信,而不是通过名称解析到的 IP 地址进行通信。

  6. 对于提供商,选择您的虚拟服务的提供商类型:

    • 如果您希望虚拟服务跨多个虚拟节点分布流量,则选择虚拟路由器,然后从下拉菜单中选择要使用的虚拟路由器。

    • 如果您希望虚拟服务直接到达虚拟节点,而不使用虚拟路由器,则选择虚拟节点,然后从下拉菜单中选择要使用的虚拟节点。

      注意

      App Mesh 可能会自动为您在 2020 年 7 月 29 日当天或之后定义的每个虚拟节点提供者创建默认 Envoy 路由重试策略,即使您无法通过 App Mesh API 定义这样的策略。有关更多信息,请参阅 默认路由重试策略

    • 如果您此时不希望虚拟服务路由流量(例如,如果您的虚拟节点或虚拟路由器不存在),则选择。您可以稍后更新此虚拟服务的提供商。

  7. 选择创建虚拟服务以完成。

AWS CLI

使用 AWS CLI 创建虚拟服务。

使用以下命令和输入 JSON 文件(将红色值替换为自己的值),使用虚拟节点提供商创建虚拟服务:

  1. aws appmesh create-virtual-service \ --cli-input-json file://create-virtual-service-virtual-node.json
  2. create-virtual-service-virtual-node.json 示例的内容:

    { "meshName": "meshName", "spec": { "provider": { "virtualNode": { "virtualNodeName": "nodeName" } } }, "virtualServiceName": "serviceA.svc.cluster.local" }
  3. 输出示例:

    { "virtualService": { "meshName": "meshName", "metadata": { "arn": "arn:aws:appmesh:us-west-2:210987654321:mesh/meshName/virtualService/serviceA.svc.cluster.local", "createdAt": "2022-04-06T09:45:35.890000-05:00", "lastUpdatedAt": "2022-04-06T09:45:35.890000-05:00", "meshOwner": "123456789012", "resourceOwner": "210987654321", "uid": "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE", "version": 1 }, "spec": { "provider": { "virtualNode": { "virtualNodeName": "nodeName" } } }, "status": { "status": "ACTIVE" }, "virtualServiceName": "serviceA.svc.cluster.local" } }

有关使用适用于 App Mesh 的 AWS CLI 创建虚拟服务的更多信息,请参阅 AWS CLI 参考资料中的 create-virtual-service 命令。

删除虚拟服务

注意

您无法删除网关路由引用的虚拟服务。您需要先删除网关路由。

AWS Management Console
使用 AWS Management Console 删除虚拟服务
  1. 打开 App Mesh 控制台,网址为 https://console.aws.amazon.com/appmesh/

  2. 选择要从中删除虚拟服务的网格。列出了您拥有的所有网格以及已与您共享的所有网格。

  3. 在左侧导航中,选择虚拟服务

  4. 选择要删除的虚拟服务,然后单击右上角的删除。您只能删除您的账户被列为资源所有者的虚拟网关。

  5. 在确认框中,键入 delete,然后单击删除

AWS CLI
使用 AWS CLI 删除虚拟服务
  1. 使用以下命令删除您的虚拟服务(用您自己的值替换红色值):

    aws appmesh delete-virtual-service \ --mesh-name meshName \ --virtual-service-name serviceA.svc.cluster.local
  2. 输出示例:

    { "virtualService": { "meshName": "meshName", "metadata": { "arn": "arn:aws:appmesh:us-west-2:210987654321:mesh/meshName/virtualService/serviceA.svc.cluster.local", "createdAt": "2022-04-06T09:45:35.890000-05:00", "lastUpdatedAt": "2022-04-07T10:39:42.772000-05:00", "meshOwner": "123456789012", "resourceOwner": "210987654321", "uid": "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE", "version": 2 }, "spec": { "provider": { "virtualNode": { "virtualNodeName": "nodeName" } } }, "status": { "status": "DELETED" }, "virtualServiceName": "serviceA.svc.cluster.local" } }

有关使用适用于 App Mesh 的 AWS CLI 删除虚拟服务的更多信息,请参阅 AWS CLI 参考资料中的 delete-virtual-service 命令。