Knowledge Center Monthly Newsletter - March 2025
Stay up to date with the latest from the Knowledge Center. See all new and updated Knowledge Center articles published in the last month and re:Post’s top contributors.
如何疑難排解由 Amazon EKS 中 Kubernetes 服務控制器建立的負載平衡器?
我無法在 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 子網路使用正確標記
-
開啟 Amazon VPC 主控台。
-
在瀏覽窗格中,選取「子網路」。
-
選取每個子網路的「標記」索引標籤,然後確認標記存在。例如:
Key: kubernetes.io/cluster/yourEKSClusterName Value: shared
注意:在此情況下,值可以為共用或自有。
根據預設,控制器會自動探索子網路。如果每個可用區域具備多個子網路,則該控制器會依照以下列順序排列子網路的優先順序:
- 具備正確角色標記的子網路:公用子網路的** kubernetes.io/role/elb** 和私有子網路的** kubernetes.io/role/internal-elb**
- 具備叢集標記的子網路:kubernetes.io/cluster/CLUSTER_NAME
- 依照字典順序排於第一位的子網路
- 對於您的公用子網路,請確認存在下列標記:
Key: kubernetes.io/role/elb Value: 1
**注意:**若要查看子網路是否為公用,請檢查與子網路相關聯的路由表。公用子網路具有到網際網路閘道的路由(igw-xxxxxxxxxxx)。私有子網路具有透過 NAT 閘道或 NAT 執行個體到網際網路的路由,或根本沒有到網際網路的路由。
重要事項:您必須具備步驟 4 中的標記,才能建立連結網際網路的負載平衡器服務。連結網際網路的負載平衡器會透過網際網路將用戶端的要求路由至目標。
- 針對您的私有子網路,請確認存在下列標記:
Key: kubernetes.io/role/internal-elb Value: 1
重要事項:您必須具備步驟 5 中的標記,才能建立內部負載平衡器服務。內部負載平衡器使用私有 IP 地址將要求路由至目標。
為您的叢集 IAM 角色設定所需的 AWS Identity and Access Management (AWS IAM) 權限
-
開啟 Amazon EKS 主控台。
-
在瀏覽窗格中,選取「叢集」。
-
選取您的叢集,然後記下您的叢集 IAM 角色 ARN。
4. 開啟 IAM 主控台。
-
在瀏覽窗格中,選取「角色」。
-
選取符合您在步驟 3 中確定的叢集 IAM 角色 ARN 的角色。
-
確認 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
如果服務建立失敗,您會收到錯誤訊息。
若要取得錯誤訊息的詳細資訊,請檢查下列資源:
- 使用 Amazon EKS 控制平面日誌。
- 在 Kubernetes 網站上尋找更多有關 Kubernetes 負載平衡器服務的資訊。
- 在 Kubernetes GitHub 網站上檢閱 AWS 雲端供應商。
相關資訊
為什麼我的 VPC 中負載平衡器所使用的子網路 IP 地址不足?
相關內容
- 已提問 5 個月前lg...
- 已提問 6 個月前lg...
- AWS 官方已更新 8 個月前
- AWS 官方已更新 4 個月前