

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

# App Mesh Kubernetes 疑難排解
<a name="troubleshooting-kubernetes"></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)。

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

## 在 Kubernetes 中建立的 App Mesh 資源無法在 App Mesh 中找到
<a name="ts-kubernetes-missing-resources"></a>

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

**Resolution**  
可能的原因是 App Mesh 的 Kubernetes 控制器發生錯誤。如需詳細資訊，請參閱 GitHub [上的故障診斷](https://github.com/aws/aws-app-mesh-controller-for-k8s/blob/master/docs/guide/troubleshooting.md)。檢查控制器日誌是否有任何錯誤或警告，指出控制器無法建立任何資源。

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

如果您的問題仍未解決，請考慮開啟 [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 附屬裝置後，Pod 的整備和運作狀態檢查失敗
<a name="ts-kubernetes-pods-after-injection"></a>

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

**Resolution**  
確定注入 Pod 的 Envoy 容器已使用 App Mesh 的 Envoy 管理服務引導。您可以參考 中的錯誤代碼來驗證任何錯誤[Envoy 已中斷與 App Mesh Envoy 管理服務的連線，並顯示錯誤文字](troubleshooting-setup.md#ts-setup-grpc-error-codes)。您可以使用下列命令來檢查相關 Pod 的 Envoy 日誌。

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

如果您的問題仍未解決，請考慮開啟 [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/)。

## Pod 未註冊或取消註冊為 AWS Cloud Map 執行個體
<a name="ts-kubernetes-pods-cmap"></a>

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

**Resolution**  
這是已知問題。如需詳細資訊，請參閱 [Pod 不會在具有 GitHub 問題的 Kubernetes 中自動註冊/取消註冊 AWS Cloud Map](https://github.com/aws/aws-app-mesh-controller-for-k8s/issues/159)。 GitHub 由於 Pod、App Mesh 虛擬節點和資源之間的關係 AWS Cloud Map ，適用於 [Kubernetes 的 App Mesh 控制器](https://github.com/aws/aws-app-mesh-controller-for-k8s)可能會取消同步並遺失資源。例如，如果在終止相關聯的 Pod 之前從 Kubernetes 刪除虛擬節點資源，就可能發生這種情況。

若要緩解此問題：
+ 請確定您正在執行適用於 Kubernetes 的 App Mesh 控制器最新版本。
+ 請確定虛擬節點定義中的 AWS Cloud Map `namespaceName`和 `serviceName` 正確無誤。
+ 刪除虛擬節點定義之前，請務必先刪除任何相關聯的 Pod。如果您需要協助識別哪些 Pod 與虛擬節點相關聯，請參閱 [無法判斷 App Mesh 資源的 Pod 正在執行的位置](#ts-kubernetes-where-pod-running)。
+ 如果您的問題仍然存在，請執行下列命令來檢查控制器日誌是否有錯誤，這些錯誤可能有助於顯示基礎問題。

  ```
  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 問題](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 資源的 Pod 正在執行的位置
<a name="ts-kubernetes-where-pod-running"></a>

**徵狀**  
當您在 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 問題](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/)。

## 無法判斷 Pod 執行的 App Mesh 資源
<a name="ts-kubernetes-pod-running-as"></a>

**徵狀**  
在 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 問題](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/)。

## Client Envoys 無法在停用 IMDSv1 的情況下與 App Mesh Envoy Management Service 通訊
<a name="ts-kubernetes-imdsv1-disabled"></a>

**徵狀**  
當 `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`，請參閱[設定執行個體中繼資料選項](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-options.html)。
+ 如果您的服務在 Amazon EKS 上執行，建議針對服務帳戶 (IRSA) 使用 IAM 角色來擷取憑證。如需啟用 IRSA 的指示，請參閱[服務帳戶的 IAM 角色](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.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/)。

## 啟用 App Mesh 並注入 Envoy 時，IRSA 無法在應用程式容器上運作
<a name="ts-kubernetes-irsa-not-working"></a>

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

**Resolution**  
如果定義了 `AWS_WEB_IDENTITY_TOKEN_FILE`或 `AWS_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 問題](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/)。