

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 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 {{帳戶 ID}} 和{{區域}}可能不同，具體取決於您提取容器映像的 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'
```

**Resolution**  
此錯誤表示正在使用的任務執行角色沒有與 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)或聯絡 [AWS Support](https://aws.amazon.com/premiumsupport/)。

## 無法連線至 App Mesh Envoy 管理服務
<a name="ts-setup-cannot-connect-ems"></a>

**徵狀**  
您的 Envoy 代理無法連線至 App Mesh Envoy 管理服務。您會看到：
+ 連線遭拒錯誤
+ 連線逾時。
+ 解決 App Mesh Envoy 管理服務端點的錯誤
+ gRPC 錯誤

**Resolution**  
請確定您的 Envoy 代理可存取網際網路或私有 [VPC 端點](vpc-endpoints.md)，而且您的[安全群組](https://docs.aws.amazon.com//vpc/latest/userguide/VPC_SecurityGroups.html)允許連接埠 443 上的傳出流量。App Mesh 的公有 Envoy 管理服務端點遵循完整網域名稱 (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 的連線進行偵錯。這會將有效但空白的 gRPC 請求傳送至 Envoy Management Service。

```
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 Management Service 的連線會正常運作。如需偵錯 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)或聯絡 [AWS Support](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}}
```

**Resolution**  
在大多數情況下，日誌的訊息部分應指出問題。下表列出您可能會看到的最常見 gRPC 狀態碼、其原因及其解析度。


| gRPC 狀態碼 | 原因 | Resolution | 
| --- | --- | --- | 
| 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檔案描述項使用 ，則在 Envoy 版本 v1.24和 之前的 中，已知問題 \#[24136](https://github.com/envoyproxy/envoy/issues/24136) 無法擷取登入資料。當 Envoy 提供高流量時，就會發生這種情況。您可以在文字「A libcurl function was given a bad argument」的偵錯層級檢查 Envoy 日誌，以確認此問題。若要緩解此問題，請升級至 Envoy 版本 v1.25.1.0-prod 或更新版本。 | 

您可以使用下列查詢，透過 [Amazon CloudWatch Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html) 觀察來自 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'
```

**Resolution**  
以下是修復步驟的清單，取決於 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)或聯絡 [AWS Support](https://aws.amazon.com/premiumsupport/)。

## 從負載平衡器到網格端點的運作狀態檢查失敗
<a name="ts-setup-lb-mesh-endpoint-health-check"></a>

**徵狀**  
容器運作狀態檢查或整備探查會將您的網格端點視為正常運作，但從負載平衡器到網格端點的運作狀態檢查失敗。

**Resolution**  
若要解決問題，請完成下列任務。
+ 確定與網格端點相關聯的[安全群組](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)接受您為運作狀態檢查設定的連接埠上的傳入流量。
+ 手動請求時，請確定運作狀態檢查持續成功；例如，來自 [VPC 中的堡壘主機](https://aws.amazon.com/quickstart/architecture/linux-bastion/)。
+ 如果您要為虛擬節點設定運作狀態檢查，建議您在應用程式中實作運作狀態檢查端點，例如 /ping for HTTP。這可確保 Envoy 代理和您的應用程式都可以從負載平衡器路由。
+ 您可以根據所需的功能，為虛擬節點使用任何彈性負載平衡器類型。如需詳細資訊，請參閱 [Elastic Load Balancing 功能](https://aws.amazon.com/elasticloadbalancing/features/#compare)。
+ 如果您要設定[虛擬閘道](virtual_gateways.md)的運作狀態檢查，建議您在虛擬閘道的接聽程式連接埠上使用具有 TCP 或 TLS 運作狀態檢查[的網路負載平衡](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/network-load-balancers.html)器。這可確保虛擬閘道接聽程式已引導並準備好接受連線。

如果您的問題仍未解決，請考慮開啟 [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)或聯絡 [AWS Support](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
```

**Resolution**  
若要解決問題，為閘道指定的使用者需要具有 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)或聯絡 [AWS Support](https://aws.amazon.com/premiumsupport/)。