View a markdown version of this page

App Mesh Kubernetes 疑難排解 - AWS 應用程式網格

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

App Mesh Kubernetes 疑難排解

重要

支援終止通知:2026 年 9 月 30 日, AWS 將停止支援 AWS App Mesh。2026 年 9 月 30 日之後,您將無法再存取 AWS App Mesh 主控台或 AWS App Mesh 資源。如需詳細資訊,請參閱此部落格文章從 遷移 AWS App Mesh 至 Amazon ECS Service Connect

本主題詳細說明當您搭配 Kubernetes 使用 App Mesh 時可能遇到的常見問題。

在 Kubernetes 中建立的 App Mesh 資源無法在 App Mesh 中找到

徵狀

您已使用 Kubernetes 自訂資源定義 (CRD) 建立 App Mesh 資源,但當您使用 AWS 管理主控台 或 APIs 時,您建立的資源不會顯示在 App Mesh 中。

Resolution

可能的原因是 App Mesh 的 Kubernetes 控制器發生錯誤。如需詳細資訊,請參閱 GitHub 上的故障診斷。檢查控制器日誌是否有任何錯誤或警告,指出控制器無法建立任何資源。

kubectl logs -n appmesh-system -f \ $(kubectl get pods -n appmesh-system -o name | grep controller)

如果您的問題仍未解決,請考慮開啟 GitHub 問題或聯絡 AWS Support

注入 Envoy 附屬裝置後,Pod 的整備和運作狀態檢查失敗

徵狀

您應用程式的 Pod 之前已成功執行,但在 Envoy 附屬插入 Pod 之後,準備和上線檢查會開始失敗。

Resolution

確定注入 Pod 的 Envoy 容器已使用 App Mesh 的 Envoy 管理服務引導。您可以參考 中的錯誤代碼來驗證任何錯誤Envoy 已中斷與 App Mesh Envoy 管理服務的連線,並顯示錯誤文字。您可以使用下列命令來檢查相關 Pod 的 Envoy 日誌。

kubectl logs -n appmesh-system -f \ $(kubectl get pods -n appmesh-system -o name | grep controller) \ | grep "gRPC config stream closed"

如果您的問題仍未解決,請考慮開啟 GitHub 問題或聯絡 AWS Support

Pod 未註冊或取消註冊為 AWS Cloud Map 執行個體

徵狀

您的 Kubernetes Pod 在其 AWS Cloud Map 生命週期中並未在 中註冊或取消註冊。Pod 可能會成功啟動,並準備好為流量提供服務,但不會接收任何流量。當 Pod 終止時,用戶端仍然可以保留其 IP 地址,並嘗試傳送流量給它,但失敗。

Resolution

這是已知問題。如需詳細資訊,請參閱 Pod 不會在具有 GitHub 問題的 Kubernetes 中自動註冊/取消註冊 AWS Cloud Map。 GitHub 由於 Pod、App Mesh 虛擬節點和資源之間的關係 AWS Cloud Map ,適用於 Kubernetes 的 App Mesh 控制器可能會取消同步並遺失資源。例如,如果在終止相關聯的 Pod 之前從 Kubernetes 刪除虛擬節點資源,就可能發生這種情況。

若要緩解此問題:

  • 請確定您正在執行適用於 Kubernetes 的 App Mesh 控制器最新版本。

  • 請確定虛擬節點定義中的 AWS Cloud Map namespaceNameserviceName 正確無誤。

  • 刪除虛擬節點定義之前,請務必先刪除任何相關聯的 Pod。如果您需要協助識別哪些 Pod 與虛擬節點相關聯,請參閱 無法判斷 App Mesh 資源的 Pod 正在執行的位置

  • 如果您的問題仍然存在,請執行下列命令來檢查控制器日誌是否有錯誤,這些錯誤可能有助於顯示基礎問題。

    kubectl logs -n appmesh-system \ $(kubectl get pods -n appmesh-system -o name | grep appmesh-controller)
  • 請考慮使用下列命令來重新啟動控制器 Pod。這可能會修正同步問題。

    kubectl delete -n appmesh-system \ $(kubectl get pods -n appmesh-system -o name | grep appmesh-controller)

如果您的問題仍未解決,請考慮開啟 GitHub 問題或聯絡 AWS Support

無法判斷 App Mesh 資源的 Pod 正在執行的位置

徵狀

當您在 Kubernetes 叢集上執行 App Mesh 時,運算子無法判斷工作負載或 Pod 為指定的 App Mesh 資源執行的位置。

Resolution

Kubernetes Pod 資源會使用與其相關聯的網格和虛擬節點進行註釋。您可以使用下列命令,查詢為指定虛擬節點名稱執行的 Pod。

kubectl get pods --all-namespaces -o json | \ jq '.items[] | { metadata } | select(.metadata.annotations."appmesh.k8s.aws/virtualNode" == "virtual-node-name")'

如果您的問題仍未解決,請考慮開啟 GitHub 問題或聯絡 AWS Support

無法判斷 Pod 執行的 App Mesh 資源

徵狀

在 Kubernetes 叢集上執行 App Mesh 時,運算子無法判斷指定 Pod 執行的 App Mesh 資源。

Resolution

Kubernetes Pod 資源會使用與其相關聯的網格和虛擬節點進行註釋。您可以使用下列命令直接查詢 Pod,以輸出網格和虛擬節點名稱。

kubectl get pod pod-name -n namespace -o json | \ jq '{ "mesh": .metadata.annotations."appmesh.k8s.aws/mesh", "virtualNode": .metadata.annotations."appmesh.k8s.aws/virtualNode" }'

如果您的問題仍未解決,請考慮開啟 GitHub 問題或聯絡 AWS Support

Client Envoys 無法在停用 IMDSv1 的情況下與 App Mesh Envoy Management Service 通訊

徵狀

IMDSv1 停用時,用戶端 Envoys 無法與 App Mesh 控制平面 (Envoy Management Service) 通訊。在 之前的 App Mesh Envoy 版本上IMDSv2不支援 v1.24.0.0-prod

Resolution

若要解決此問題,您可以執行這三件事之一。

  • 升級至IMDSv2支援 v1.24.0.0-prod的 App Mesh Envoy 版本 或更新版本。

  • 在執行 Envoy 的執行個體IMDSv1上重新啟用 。如需還原 的指示IMDSv1,請參閱設定執行個體中繼資料選項

  • 如果您的服務在 Amazon EKS 上執行,建議針對服務帳戶 (IRSA) 使用 IAM 角色來擷取憑證。如需啟用 IRSA 的指示,請參閱服務帳戶的 IAM 角色

如果您的問題仍未解決,請考慮開啟 GitHub 問題或聯絡 AWS Support

啟用 App Mesh 並注入 Envoy 時,IRSA 無法在應用程式容器上運作

徵狀

在 Amazon EKS 叢集上啟用 App Mesh 時,在 Amazon EKS 的 App Mesh 控制器的協助下,Envoy 和proxyinit容器會注入應用程式 Pod。應用程式無法擔任 IRSA ,而是擔任 node role。當我們描述 Pod 詳細資訊時,我們會看到 AWS_WEB_IDENTITY_TOKEN_FILEAWS_ROLE_ARN環境變數不包含在應用程式容器中。

Resolution

如果定義了 AWS_WEB_IDENTITY_TOKEN_FILEAWS_ROLE_ARN環境變數,則 Webhook 會略過 Pod。請勿提供其中一個變數,Webhook 會為您注入這些變數。

reservedKeys := map[string]string{ "AWS_ROLE_ARN": "", "AWS_WEB_IDENTITY_TOKEN_FILE": "", } ... for _, env := range container.Env { if _, ok := reservedKeys[env.Name]; ok { reservedKeysDefined = true }

如果您的問題仍未解決,請考慮開啟 GitHub 問題或聯絡 AWS Support