如何解決存取 Amazon EKS 叢集中 Kubernetes 服務時發生的 HTTP 503 (服務無法使用) 錯誤?

2 分的閱讀內容
0

連線至在 Amazon Elastic Kubernetes Service (Amazon EKS) 叢集中執行的 Kubernetes 服務時,收到 HTTP 503 (服務無法使用) 錯誤。

簡短描述

HTTP 503 錯誤為伺服器端錯誤。連線至為負載平衡器所設定 Amazon EKS 叢集中的 Kubernetes 服務 Pod 時,發生此錯誤。

若要疑難排解 HTTP 504 錯誤,請參閲如何解決 Amazon EKS 中的 HTTP 504 錯誤?

若要疑難排解 HTTP 503 錯誤,請完成下列疑難排解步驟。

解決方案

檢查 Pod 標籤是否與 Kubernetes 服務選擇器中指定的值相符

1.    執行以下命令以取得選擇器的值:

$ kubectl describe service service_name -n your_namespace

注意:請以您的服務名稱取代 service_name,並以您的服務命名空間取代 your_namespace

範例輸出:

Name:                     service-name
Namespace:                pod-name
Labels:                   none
Annotations:              none
Selector:                 app.kubernetes.io/name=namespace
Type:                     NodePort
IP Families:              none
IP:                       10.100.17.189
IPs:                      10.100.17.189
Port:                     unset  80/TCP
TargetPort:               80/TCP
NodePort:                 unset  31560/TCP
Endpoints:                none
Session Affinity:         none
External Traffic Policy:  Cluster
Events:                   none

在上方的輸出中,範例選擇器值為 app.kubernetes.io/name=namespace

2.    查看是否有具標籤 app.kubernetes.io/name=namespace 的 Pod:

$ kubectl get pods -n your_namespace -l "app.kubernetes.io/name=namespace"

範例輸出:

No resources found in your_namespace namespace.

如果沒有找到具您要找的值的資源,您會收到 HTTP 503 錯誤。

確認為 Kubernetes 服務定義的 Pod 是否執行中

使用 Kubernetes 服務選擇器中的標籤,確認這些 Pod 是否存在並處於 Running (執行中) 狀態:

$ kubectl -n your_namespace get pods -l "app.kubernetes.io/name=your_namespace"

輸出:

NAME                               READY   STATUS             RESTARTS   AGE
POD_NAME                           0/1     ImagePullBackOff   0          3m54s

查看 Pod 是否可為您 Kubernetes 部署通過準備度探測器

1.    確認應用程式 Pod 可通過準備度探測器。如需詳細資訊,請參閲設定活躍度、準備度和啟動探測器 (透過 Kubernetes 網站)。

2.    查看 Pod 的準備度探測器:

$ kubectl describe pod pod_name -n your_namespace | grep -i readiness

注意:請以您的 Pod 名稱取代 pod_name,並以您的命名空間取代 your_namespace

範例輸出:

Readiness:      tcp-socket :8080 delay=5s timeout=1s period=2s #success=1 #failure=3
Warning  Unhealthy  2m13s (x298 over 12m)  kubelet            Readiness probe failed:

在上方輸出中,您可以看到 Readiness probe failed (準備度探測器失敗)。

**注意:**只有當應用程式在正確的路徑和連接埠上偵聽時,此步驟才會提供有用的輸出。使用 curl -Ivk 命令檢查 curl 輸出,並確認在服務級別定義的路徑獲得有效的回應。例如,200 毫秒是很好的回應。

查看 Classic Load Balancer 的容量

如果您間歇性收到 HTTP 503 錯誤,則表示您的 Classic Load Balancer 沒有足夠容量處理請求。若要解決此問題,請確認您的 Classic Load Balancer 有足夠容量,且您的工作節點可以應付請求率。

確認您的執行個體已註冊

如果沒有註冊的執行個體,您也會收到 HTTP 503 錯誤。若要解決此問題,請嘗試下列解決方案:

  • 確認工作節點的安全群組有入站規則,該規則允許在節點連接埠上連接存取工作節點。此外,確認沒有 NAT 規則封鎖節點連接埠範圍上的網路流量。
  • 確認為 Classic Load Balancer 指定的自訂安全群組,在工作節點上允許入站存取。
  • 確認子網路指定的每個可用區域中都有工作節點。

相關資訊

為什麼連線至在 EC2 執行個體 (設定為使用 Classic Load Balancing) 上執行的 Web 伺服器時收到 HTTP 5xx 錯誤?

HTTP 503:服務無法使用

監控 Classic Load Balancer

監控 Application Load Balancer

故障診斷 Classic Load Balancer:HTTP 錯誤

AWS 官方
AWS 官方已更新 2 年前