

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

# App Mesh 设置故障排除
<a name="troubleshooting-setup"></a>

**重要**  
终止支持通知：2026 年 9 月 30 日， AWS 将停止对的支持。 AWS App Mesh 2026 年 9 月 30 日之后，您将无法再访问 AWS App Mesh 控制台或 AWS App Mesh 资源。有关更多信息，请访问此博客文章[从迁移 AWS App Mesh 到 Amazon ECS Service Connect](https://aws.amazon.com/blogs/containers/migrating-from-aws-app-mesh-to-amazon-ecs-service-connect)。

本主题详细介绍了您在设置 App Mesh 时可能遇到的常见问题。

## 无法提取 Envoy 容器镜像
<a name="ts-setup-cannot-pull-envoy"></a>

**症状**  
在 Amazon ECS 任务中，您会收到以下错误消息。Amazon ECR {{account ID}} 和以下消息{{Region}}中的内容可能会有所不同，具体取决于您从哪个 Amazon ECR 存储库中提取容器映像。

```
CannotPullContainerError: Error response from daemon: pull access denied for {{840364872350}}.dkr.ecr.{{us-west-2}}.amazonaws.com/aws-appmesh-envoy, repository does not exist or may require 'docker login'
```

**解决方案**  
此错误表示正在使用的任务执行角色无权与 Amazon ECR 通信，也无法从存储库中提取 Envoy 容器镜像。分配给您的 Amazon ECS 任务的任务执行角色需要包含以下声明的 IAM 策略：

```
{
  "Action": [
    "ecr:BatchCheckLayerAvailability",
    "ecr:GetDownloadUrlForLayer",
    "ecr:BatchGetImage"
  ],
  "Resource": "arn:aws:ecr:{{us-west-2}}:{{111122223333}}:repository/aws-appmesh-envoy",
  "Effect": "Allow"
},
{
  "Action": "ecr:GetAuthorizationToken",
  "Resource": "*",
  "Effect": "Allow"
}
```

如果您的问题仍未解决，请考虑[GitHub 提出问题](https://github.com/aws/aws-app-mesh-roadmap/issues/new?assignees=&labels=Bug&template=issue--bug-report.md&title=Bug%3A+describe+bug+here)或联系 Su [AWS pport](https://aws.amazon.com/premiumsupport/)。

## 无法连接到 App Mesh Envoy 管理服务
<a name="ts-setup-cannot-connect-ems"></a>

**症状**  
您的 Envoy 代理无法连接到 App Mesh Envoy 管理服务。您将看到：
+ “连接被拒绝”错误
+ 连接超时
+ 解析 App Mesh Envoy 管理服务端点时出错
+ gRPC 错误

**解决方案**  
确保您的 Envoy 代理可以访问互联网或私有 [VPC 端点](vpc-endpoints.md)，并且您的[安全组](https://docs.aws.amazon.com//vpc/latest/userguide/VPC_SecurityGroups.html)允许端口 443 上的出站流量。App Mesh 的公有 Enoy 管理服务端点遵循完全限定域名（FQDN）格式。

```
# App Mesh Production Endpoint
appmesh-envoy-management.{{Region-code}}.amazonaws.com

# App Mesh Preview Endpoint
appmesh-preview-envoy-management.{{Region-code}}.amazonaws.com
```

您可以使用以下命令调试与 EMS 的连接。这会向 Envoy 管理服务发送一个有效但空的 gRPC 请求。

```
curl -v -k -H 'Content-Type: application/grpc' -X POST https://appmesh-envoy-management.{{Region-code}}.amazonaws.com:443/envoy.service.discovery.v3.AggregatedDiscoveryService/StreamAggregatedResources
```

如果您收到这些回复，则表示您与 Envoy 管理服务的连接正常。要调试 gRPC 相关错误，请参阅 [Envoy 中与 App Mesh Envoy 管理服务断开连接的错误以及错误文本。](https://docs.aws.amazon.com/app-mesh/latest/userguide/troubleshooting-setup.html#ts-setup-grpc-error-codes)

```
grpc-status: 16
grpc-message: Missing Authentication Token
```

如果您的问题仍未解决，请考虑[GitHub 提出问题](https://github.com/aws/aws-app-mesh-roadmap/issues/new?assignees=&labels=Bug&template=issue--bug-report.md&title=Bug%3A+describe+bug+here)或联系 Su [AWS pport](https://aws.amazon.com/premiumsupport/)。

## Envoy 与 App Mesh Envoy 管理服务断开连接，显示错误文本
<a name="ts-setup-grpc-error-codes"></a>

**症状**  
您的 Envoy 代理无法连接到 App Mesh Envoy 管理服务并接收其配置。您的 Envoy 代理日志包含如下所示的日志条目。

```
gRPC config stream closed: {{gRPC status code}}, {{message}}
```

**解决方案**  
在大多数情况下，日志的消息部分应指出问题所在。下表列出了您可能看到的最常见的 gRPC 状态代码、其原因和解决方法。


| gRPC 状态码 | 原因 | 解决方案 | 
| --- | --- | --- | 
| 0 | 优雅地断开与 Envoy 管理服务的连接。 | 没有消息。App Mesh 偶尔会断开带有此状态代码的 Envoy 代理的连接。Envoy 将重新连接并继续接收更新。 | 
| 3 | 找不到网格端点（虚拟节点或虚拟网关）或其关联资源之一。 | 仔细检查您的 Envoy 配置，确保它具有其所代表的 App Mesh 资源的相应名称。如果您的 App Mesh 资源与其他 AWS 资源（例如 AWS Cloud Map 命名空间或 ACM 证书）集成，请确保这些资源存在。 | 
| 7 | Envoy 代理无权执行操作，例如连接到 Envoy 管理服务或检索相关资源。 | 请务必[创建包含适用于 App Mesh 和其他服务的相应策略声明的 IAM 策略](proxy-authorization.md#create-iam-policy)，并将该策略附加到您的 Envoy 代理用于连接 Envoy 管理服务的 IAM 用户或角色。 | 
| 8 | 给定 App Mesh 资源的 Envoy 代理数量超过了账户级别的服务限额。 | 有关默认账户配额以及如何请求增加配额的更多信息，请参阅 [App Mesh 服务限额](service-quotas.md)。 | 
| 16 | Envoy 代理没有有效的 AWS身份验证凭证。 | 确保 Envoy 拥有适当的凭证，可以通过 IAM 用户或角色连接到 AWS 服务。如果 Envoy 进程使用 1024 文件描述符，则版本 v1.24 及之前版本的 Envoy 中存在一个已知问题 [\#24136](https://github.com/envoyproxy/envoy/issues/24136) 无法获取凭证。当 Envoy 提供高流量服务时，就会发生这种情况。您可以通过在调试级别查看 Envoy 日志中是否有文本“A libcurl function was given a bad argument”来确认此问题。要缓解此问题，请升级到 Envoy 版本 v1.25.1.0-prod 或更高版本。 | 

您可以使用以下查询通过 [Amazon CloudWatch Insigh](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html) ts 查看来自 Envoy 代理的状态代码和消息：

```
filter @message like /gRPC config stream closed/
| parse @message "gRPC config stream closed: *, *" as StatusCode, Message
```

如果提供的错误消息无济于事，或者您的问题仍未解决，请考虑提出[GitHub 问题](https://github.com/aws/aws-app-mesh-roadmap/issues/new?assignees=&labels=Bug&template=issue--bug-report.md&title=Bug%3A+describe+bug+here)。

## Envoy 容器运行状况检查、就绪探测或活跃度探测失败
<a name="ts-setup-envoy-container-checks"></a>

**症状**  
您的 Envoy 代理在 Amazon ECS 任务、Amazon EC2 实例或 Kubernetes 容器组 (pod) 中的运行状况检查失败。例如，您使用以下命令查询 Envoy 管理界面，但收到的状态不是 `LIVE`。

```
curl -s http://{{my-app.default.svc.cluster.local}}:{{9901}}/server_info | jq '.state'
```

**解决方案**  
以下是补救步骤列表，具体取决于 Envoy 代理返回的状态。
+ `PRE_INITIALIZING` 或者 `INITIALIZING` — Envoy 代理尚未接收配置，或者无法从 App Mesh Envoy 管理服务连接和检索配置。Envoy 在尝试连接时可能会收到来自 Envoy 管理服务的错误。有关更多信息，请查看 [Envoy 与 App Mesh Envoy 管理服务断开连接，显示错误文本](#ts-setup-grpc-error-codes) 中的错误文本。
+ `DRAINING`：Envoy 代理已开始耗尽连接，以响应 Envoy 管理界面上的 `/healthcheck/fail` 或 `/drain_listeners` 请求。除非您即将终止您的 Amazon ECS 任务、Amazon EC2 实例或 Kubernetes 容器组 (pod)，否则我们不建议您在管理界面上调用这些路径。

如果您的问题仍未解决，请考虑[GitHub 提出问题](https://github.com/aws/aws-app-mesh-roadmap/issues/new?assignees=&labels=Bug&template=issue--bug-report.md&title=Bug%3A+describe+bug+here)或联系 Su [AWS pport](https://aws.amazon.com/premiumsupport/)。

## 从负载均衡器到网格端点的运行状况检查失败
<a name="ts-setup-lb-mesh-endpoint-health-check"></a>

**症状**  
容器运行状况检查或就绪探测器认为您的网格端点运行状况良好，但是从负载均衡器到网格端点的运行状况检查失败。

**解决方案**  
要解决此问题，请完成以下任务。
+ 确保与您的网格端点关联的[安全组](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)接受您为运行状况检查配置的端口上的入站流量。
+ 请确保在手动请求运行状况检查时始终如一地成功；例如，来自[您的 VPC 内的堡垒主机](https://aws.amazon.com/quickstart/architecture/linux-bastion/)。
+ 如果您正在为虚拟节点配置运行状况检查，我们建议您在应用程序中实现运行状况检查端点；例如，/ping for HTTP。这可确保 Envoy 代理和您的应用程序均可从负载均衡器路由。
+ 根据所需的功能，您可以针对虚拟节点使用任何类型的弹性负载均衡器。有关更多信息，请参阅 [弹性负载均衡功能](https://aws.amazon.com/elasticloadbalancing/features/#compare)。
+ 如果您正在为[虚拟网关](virtual_gateways.md)配置运行状况检查，我们建议使用[网络负载均衡器](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/network-load-balancers.html)，并在虚拟网关的侦听器端口上进行 TCP 或 TLS 运行状况检查。这样可以确保虚拟网关侦听器已启动并准备好接受连接。

如果您的问题仍未解决，请考虑[GitHub 提出问题](https://github.com/aws/aws-app-mesh-roadmap/issues/new?assignees=&labels=Bug&template=issue--bug-report.md&title=Bug%3A+describe+bug+here)或联系 Su [AWS pport](https://aws.amazon.com/premiumsupport/)。

## 虚拟网关不接受端口 1024 或更少的流量
<a name="virtual-gateway-low-ports"></a>

**症状**  
您的虚拟网关不接受端口 1024 或更小的流量，但接受端口号大于 1024 的流量。例如，使用以下命令查询 Envoy 统计数据并收到一个非零值。

```
curl -s http://my-app.default.svc.cluster.local:9901/stats | grep "update_rejected"
```

您可能会在日志中看到类似于以下文本的文本，描述无法绑定到特权端口：

```
gRPC config for type.googleapis.com/envoy.api.v2.Listener rejected: Error adding/updating listener(s) lds_ingress_0.0.0.0_port_<port num>: cannot bind '0.0.0.0:<port num>': Permission denied
```

**解决方案**  
要解决此问题，为网关指定的用户需要具有 linux 功能 `CAP_NET_BIND_SERVICE`。有关更多信息，请参阅《Linux 程序员手册》中的[功能](https://www.man7.org/linux/man-pages/man7/capabilities.7.html)、ECS 任务定义参数中的[ Linux](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#container_definition_linuxparameters) 参数和 Kubernetes 文档中的[设置容器功能](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-capabilities-for-a-container)。

**重要**  
Fargate 必须使用大于 1024 的端口值。

如果您的问题仍未解决，请考虑[GitHub 提出问题](https://github.com/aws/aws-app-mesh-roadmap/issues/new?assignees=&labels=Bug&template=issue--bug-report.md&title=Bug%3A+describe+bug+here)或联系 Su [AWS pport](https://aws.amazon.com/premiumsupport/)。