本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
App Mesh 設定疑難排解
重要
支援終止通知:2026 年 9 月 30 日, AWS 將停止支援 AWS App Mesh。2026 年 9 月 30 日之後,您將無法再存取 AWS App Mesh 主控台或 AWS App Mesh 資源。如需詳細資訊,請參閱此部落格文章從 遷移 AWS App Mesh 至 Amazon ECS Service Connect
本主題詳細說明您在 App Mesh 設定時可能遇到的常見問題。
無法提取 Envoy 容器映像
徵狀
您在 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 問題
無法連線至 App Mesh Envoy 管理服務
徵狀
您的 Envoy 代理無法連線至 App Mesh Envoy 管理服務。您看到:
-
連線遭拒的錯誤
-
連線逾時
-
解決 App Mesh Envoy 管理服務端點的錯誤
-
gRPC 錯誤
Resolution
請確定您的 Envoy 代理可存取網際網路或私有 VPC 端點,且您的安全群組允許連接埠 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 管理服務中斷連線的錯誤與錯誤文字。
grpc-status: 16
grpc-message: Missing Authentication Token
如果您的問題仍未解決,請考慮開啟 GitHub 問題
Envoy 已中斷與 App Mesh Envoy 管理服務的連線,並顯示錯誤文字
徵狀
您的 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 管理服務,或擷取相關聯的資源。 | 請確定您建立的 IAM 政策具有適用於 App Mesh 和其他 服務的適當政策陳述式,並將該政策連接至您的 Envoy 代理用來連線至 Envoy 管理服務的 IAM 使用者或角色。 |
8 |
指定 App Mesh 資源的 Envoy 代理數目超過帳戶層級服務配額。 | 如需預設帳戶配額以及如何請求提高配額的資訊,App Mesh 服務配額請參閱 。 |
16 |
Envoy 代理沒有 的有效身分驗證憑證 AWS。 | 請確定 Envoy 具有適當的登入資料,可透過 IAM 使用者或角色連線至 AWS 服務。如果 Envoy 程序透過1024 檔案描述項使用 ,則版本 v1.24 和 之前的 Envoy 中已知問題 #24136A libcurl function was given a bad argument 」的偵錯層級檢查 Envoy 日誌,以確認此問題。若要緩解此問題,請升級至 Envoy 版本 v1.25.1.0-prod 或更新版本。 |
您可以使用下列查詢,透過 Amazon CloudWatch Insights 觀察 Envoy 代理的狀態碼和訊息:
filter @message like /gRPC config stream closed/ | parse @message "gRPC config stream closed: *, *" as StatusCode, Message
如果提供的錯誤訊息沒有幫助,或您的問題仍未解決,請考慮開啟 GitHub 問題
Envoy 容器運作狀態檢查、準備程度探查或即時性探查失敗
徵狀
您的 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 管理服務的連線,並顯示錯誤文字。 -
DRAINING
– Envoy 代理已開始耗盡連線,以回應 Envoy 管理界面上的/healthcheck/fail
或/drain_listeners
請求。除非您即將終止 Amazon ECS 任務、Amazon EC2 執行個體或 Kubernetes Pod,否則我們不建議在管理界面上叫用這些路徑。
如果您的問題仍未解決,請考慮開啟 GitHub 問題
從負載平衡器到網格端點的運作狀態檢查失敗
徵狀
容器運作狀態檢查或整備調查會將您的網格端點視為運作狀態良好,但從負載平衡器到網格端點的運作狀態檢查失敗。
Resolution
若要解決問題,請完成下列任務。
-
確定與網格端點相關聯的安全群組接受您為運作狀態檢查所設定連接埠的傳入流量。
-
手動請求時,請確定運作狀態檢查持續成功;例如,來自 VPC 中的堡壘主機
。 -
如果您正在為虛擬節點設定運作狀態檢查,建議您在應用程式中實作運作狀態檢查端點;例如 /ping for HTTP。這可確保 Envoy 代理和您的應用程式都可以從負載平衡器路由。
-
您可以根據所需的功能,為虛擬節點使用任何彈性負載平衡器類型。如需詳細資訊,請參閱 Elastic Load Balancing 功能
。 -
如果您正在為虛擬閘道設定運作狀態檢查,建議您在虛擬閘道的接聽程式連接埠上使用具有 TCP 或 TLS 運作狀態檢查的網路負載平衡器。這可確保虛擬閘道接聽程式已引導並準備好接受連線。
如果您的問題仍未解決,請考慮開啟 GitHub 問題
虛擬閘道不接受連接埠 1024 或以下的流量
徵狀
您的虛擬閘道不接受連接埠 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 程式師手冊中的功能
重要
Fargate 必須使用大於 1024 的連接埠值。
如果您的問題仍未解決,請考慮開啟 GitHub 問題