如何疑難排解由 Amazon EKS 中 Kubernetes 服務控制器建立的負載平衡器?

3 分的閱讀內容
0

我無法在 Amazon Elastic Kubernetes Service (Amazon EKS) 上建立由負載平衡器支援的 Kubernetes 服務。

簡短描述

Amazon EKS 使用兩個控制器的其中一個控制器來管理負載平衡器: AWS 負載平衡器控制器或 Kubernetes 服務控制器。下列疑難排解步驟僅適用於 Kubernetes 服務控制器所管理的負載平衡器。如需詳細資訊,請參閱 Kubenetes AWS 雲端供應商網站上的服務控制器和 Kubernetes 網站上的 Type LoadBalancer

若要疑難排解您的服務負載平衡器,請確認您具備下列設定:

  • Amazon Virtual Private Cloud (Amazon VPC) 子網路的正確標記
  • 您的叢集 IAM 角色所需的 AWS Identity and Access Management (AWS IAM) 權限
  • 有效的 Kubernetes 服務定義
  • 保持在您帳戶限制範疇內的負載平衡器
  • 您的子網路具備足夠的可用 IP 地址
  • 正確設定的負載平衡器,以避免連線逾時問題
  • 良好的負載平衡器目標

如果您在確認上述所有項目後仍然遇到問題,請依照嘗試其他疑難排解步驟一節中的步驟操作。

解決方法

下列步驟套用於 Classic Load Balancer 和 Network Load Balancer。對於 Application Load Balancer,請參閱 Amazon EKS 上的應用程式負載平衡

**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,請確定您使用的是最新版本的 AWS CLI

為您的 Amazon VPC 子網路使用正確標記

  1. 開啟 Amazon VPC 主控台

  2. 在瀏覽窗格中,選取「子網路」。

  3. 選取每個子網路的「標記」索引標籤,然後確認標記存在。例如:

Key: kubernetes.io/cluster/yourEKSClusterName  
Value: shared

注意:在此情況下,可以為共用自有

根據預設,控制器會自動探索子網路。如果每個可用區域具備多個子網路,則該控制器會依照以下列順序排列子網路的優先順序:

  • 具備正確角色標記的子網路:公用子網路的** kubernetes.io/role/elb** 和私有子網路的** kubernetes.io/role/internal-elb**
  • 具備叢集標記的子網路:kubernetes.io/cluster/CLUSTER_NAME
  • 依照字典順序排於第一位的子網路
  1. 對於您的公用子網路,請確認存在下列標記:
Key: kubernetes.io/role/elb  
Value: 1

**注意:**若要查看子網路是否為公用,請檢查與子網路相關聯的路由表。公用子網路具有到網際網路閘道的路由(igw-xxxxxxxxxxx)。私有子網路具有透過 NAT 閘道或 NAT 執行個體到網際網路的路由,或根本沒有到網際網路的路由。

重要事項:您必須具備步驟 4 中的標記,才能建立連結網際網路的負載平衡器服務。連結網際網路的負載平衡器會透過網際網路將用戶端的要求路由至目標。

  1. 針對您的私有子網路,請確認存在下列標記:
Key: kubernetes.io/role/internal-elb  
Value: 1

重要事項:您必須具備步驟 5 中的標記,才能建立內部負載平衡器服務。內部負載平衡器使用私有 IP 地址將要求路由至目標。

為您的叢集 IAM 角色設定所需的 AWS Identity and Access Management (AWS IAM) 權限

  1. 開啟 Amazon EKS 主控台

  2. 在瀏覽窗格中,選取「叢集」。

  3. 選取您的叢集,然後記下您的叢集 IAM 角色 ARN

4. 開啟 IAM 主控台

  1. 在瀏覽窗格中,選取「角色」。

  2. 選取符合您在步驟 3 中確定的叢集 IAM 角色 ARN 的角色。

  3. 確認 AWS 受管政策 AmazonEKSClusterPolicy 已附加至您的角色。

**注意:**Amazon EKS 控制平面會扮演上述 IAM 角色,為您的服務建立負載平衡器。

使用有效的 Kubernetes 服務定義

在您的 Kubernetes 服務的 YAML 檔案中,確認 spec.type 設定為 LoadBalancer

請參閱下列由負載平衡器支援的 Kubernetes 服務範例:

apiVersion: v1  
kind: Service  
metadata:  
  annotations:  
    # This annotation is only required if you are creating an internal facing ELB. Remove this annotation to create public facing ELB.  
    service.beta.kubernetes.io/aws-load-balancer-internal: "true"  
  name: nginx-elb  
  labels:  
    app: nginx  
spec:  
  type: LoadBalancer  
  ports:  
  - name: "http"  
    port: 80  
    targetPort: 80  
  selector:  
    app: nginx

**注意:**若要使用不同註釋自訂您的服務,請參閱 Kubernetes 網站上的內部負載平衡器AWS 上的 TLS 支援

根據預設,Kubernetes 內建服務控制器會建立 Classic Load Balancer。針對 Network Load Balancer 佈建,服務必須具備註解 ** service.beta.kubernetes.io/aws-load-balancer-type: "nlb"**。如需詳細資訊,請參閱 Kubernetes 網站的 AWS 上的 Network Load Balancer 支援

確認您的負載平衡器在您的帳戶限制範疇內

根據預設,一個 AWS 帳戶在每個 AWS 區域最多有 20 個負載平衡器。

若要檢查您有多少負載平衡器,請開啟 Amazon Elastic Compute Cloud (Amazon EC2) 主控台。接著,在瀏覽窗格中,選取「負載平衡器」。

如果您達到負載平衡器的數目上限,您可以透過 Service Quotas 申請增加額度。

確認您的子網路具備足夠的可用 IP 地址

若要建立負載平衡器,該負載平衡器的每個子網路必須至少具備八個可用 IP 地址。這是 Classic Load Balancer 和 Network Load Balancer 的必要條件。

連線逾時問題

如果您的負載平衡器遇到間歇性或持續逾時問題,則該負載平衡器設定可能出現問題。當後端服務無法處理傳入流量,或將太多要求傳送至負載平衡器時,就會發生這個情況。如需詳細資訊,請參閱如何疑難排解 Elastic Load Balancing (ELB)「連線逾時」錯誤?

確認負載平衡器運作狀態檢查

如果您未正確設定端點,或該後端服務未回應運作狀態檢查要求,就會發生負載平衡器運作狀態檢查問題。

若要確認該負載平衡器指向正確端點,請執行 AWS CLI 命令 describe-target-health

aws elbv2 describe-target-health --target-group-arn arn:aws:elasticloadbalancing:us-west-2:1234567890:targetgroup/my-targets/6d0ecf831eec9f09

若要檢查該目標群組的運作狀態檢查設定,請執行 AWS CLI 命令 describe-target-groups

aws elbv2 describe-target-groups --target-group-arns arn:aws:elasticloadbalancing:us-west-2:1234567890:targetgroup/my-targets/6d0ecf831eec9f09

如需詳細資訊,請參閱您的目標群組運作狀態檢查

嘗試其他疑難排解步驟

若要檢查 Kubernetes 服務中以取得可協助您疑難排解問題的錯誤訊息,請執行下列 describe-service 命令:

$ kubectl describe service my-elb-service

如果服務建立成功,您會收到類似下列範例的輸出:

...  
...  
Events:  
  Type    Reason                Age   From                Message  
  ----    ------                ----  ----                -------  
  Normal  EnsuringLoadBalancer  47s   service-controller  Ensuring load balancer  
  Normal  EnsuredLoadBalancer   44s   service-controller  Ensured load balancer

如果服務建立失敗,您會收到錯誤訊息。

若要取得錯誤訊息的詳細資訊,請檢查下列資源:

相關資訊

為什麼我的 VPC 中負載平衡器所使用的子網路 IP 地址不足?

疑難排解 Amazon EKS

疑難排解您的 Application Load Balancer

疑難排解您的 Classic Load Balancer

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