如何對使用 AWS 負載平衡器控制器建立負載平衡器時出現的問題進行疑難排解?

2 分的閱讀內容
0

我無法使用 AWS 負載平衡器控制器建立 Network Load Balancer 或 Application Load Balancer。或者,負載平衡器不會在我建立服務或傳入物件之後建立。

簡短描述

若要對負載平衡器建立問題疑難排解,請執行下列操作:

  • 請確定符合所有必要條件。
  • 請查看傳入 (Application Load Balancer) 或服務 (Network Load Balancer) 物件的註釋。
  • 如需其他資訊,請檢閱 AWS 負載平衡器控制器 Pod 的日誌。
  • 如果叢集在 AWS Fargate 上執行,請確認是否已為傳入或服務物件所在的命名空間建立 Fargate 描述檔。
  • 請檢查未解決的相依項。

AWS 負載平衡器控制器可管理 EKS 叢集的 Elastic Load Balancing。控制器會佈建以下資源:

  • 您在建立 Kubernetes 傳入時的 Application Load Balancer。
  • 您在建立類型為 LoadBalancer 的 Kubernetes 服務時的 Network Load Balancer。之前,Kubernetes Network Load Balancer 用於執行個體目標,而 AWS 負載平衡器控制器則用於 IP 目標。使用 AWS 負載平衡器控制器 2.3.0 版本或更新版本,您可以使用任一目標類型建立 Network Load Balancer。如需詳細資訊,請參閱目標類型

解決方案

確定符合所有必要條件

如需 Application Load Balancer 先決條件的清單,請參閱 Amazon EKS 上的應用程式負載平衡。如需 Network Load Balancer 先決條件的清單,請參閱 Amazon EKS 上的網路負載平衡

1.    確認 AWS 負載平衡器控制器已成功佈建。使用 2.4.4 版本或更新版本是最佳實務做法。

2.    檢查子網路的數目。Application Load Balancer 在不同的可用區域中需要至少兩個子網路。Network Load Balancer 需要至少一個子網路。子網路必須具有至少八個可用的 IP 地址。如需詳細資訊,請參閱檢視您的 VPC

3.    在某些情況下,您必須使用下列標籤:

  • 金鑰:"kubernetes.io/cluster/cluster-name"
  • 值:"shared" or "owned"

如果您使用的 Application Load Balancer

在下列案例中,必須只標記一個安全群組:

  • 您正在使用連接至工作節點的多個安全群組。
  • 您正在使用 AWS 負載平衡器控制器版本 v2.1.1 或更早版本。

如果您使用 Network Load Balancer

如果您正在使用 AWS 負載平衡器控制器 v2.1.1 或更早版本,則必須標記子網路。

如需有關從 Amazon EC2 主控台新增標籤的資訊,請參閱透過主控台使用標籤。如需有關使用 AWS Command Line Interface (AWS CLI) 新增標籤的資訊,請參閱透過命令列使用標籤

**注意:**如果您在執行 AWS CLI 命令時收到錯誤,請確保您使用的是最新版 AWS CLI

4.FSP除非子網路 ID 明確指定為服務物件或傳入物件中的註釋,否則請確定子網路具有下列標籤。如果沒有這些標籤,子網路 Auto Discovery 無法運作。

私有子網路標籤:

  • 金鑰︰"kubernetes.io/role/internal-elb"
  • 值︰"1"

公有子網路標籤:

  • 金鑰︰"kubernetes.io/role/elb"
  • 值︰"1"

查看傳入或服務物件的註釋

驗證服務物件上的註釋傳入物件上的註釋。設定負載平衡器所需的註釋如下:

**注意:**其他註釋會使用預設值。如需由適用於應用程式負載平衡的 AWS 負載平衡器控制器支援的所有可用註釋清單,請參閱傳入註釋。如需由適用於網路負載平衡的 AWS 負載平衡器控制器支援的所有可用註釋清單,請參閱 GitHub 上的服務註釋

Application Load Balancer

Network Load Balancer

  • **使用 IP 目標:**service.beta.kubernetes.io/aws-load-balancer-type: "external" service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: "ip"
  • **使用執行個體目標:**service.beta.kubernetes.io/aws-load-balancer-type: “external” service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: “instance”

執行下列其中一項命令以檢視服務或傳入物件。在下列範例中,將 SERVICE-NAME/INGRESS-NAMENAMESPACE 取代為您的使用案例的正確值。

kubectl describe service <SERVICE-NAME> -n <NAMESPACE> 

kubectl describe ingress <INGRESS-NAME> -n <NAMESPACE>

執行下列其中一項命令以編輯服務或傳入物件。在下列範例中,將 SERVICE-NAME/INGRESS-NAMENAMESPACE 取代為您的使用案例的正確值。

kubectl edit service <SERVICE-NAME> -n <NAMESPACE>

kubectl edit ingress <INGRESS-NAME> -n <NAMESPACE>

如需其他資訊,請檢閱 AWS 負載平衡器控制器 Pod 的日誌

執行下列命令以檢閱 AWS 負載平衡器控制器日誌:

kubectl logs -n kube-system deployment.apps/aws-load-balancer-controller

如果沒有任何控制器 Pod 顯示日誌,請確定控制器 Pod 正在執行:

kubectl get deployment -n kube-system aws-load-balancer-controller

如果叢集在 Fargate 上執行,請確認是否已為傳入或服務物件所在的命名空間建立 Fargate 描述檔

在 Fargate 上執行目標 Pod 時,需要 IP 目標類型。執行下列命令,以確認是否已針對傳入或服務物件所在的命名空間建立 Fargate 描述檔。在下列範例中,將 CLUSTER-NAME 取代為叢集名稱。

eksctl get fargateprofile --cluster <CLUSTER-NAME> -o yaml

若要建立 Fargate 描述檔,請執行下列命令。在下列範例中,將 CLUSTER-NAMEREGIONFARGATE-PROFILE-NAMENAMESPACE 取代為您的使用案例的正確值。

eksctl create fargateprofile --cluster <CLUSTER-NAME> --region <REGION> --name <FARGATE-PROFILE-NAME> --namespace <NAMESPACE>

請檢查未解決的相依項

Amazon EKS 將下列規則新增至節點的安全群組:

  • 用戶端流量的輸入規則
  • 對於您建立的每個 Network Load Balancer (針對運作狀態檢查) 的 VPC 中每個負載平衡器子網路的輸入規則。

如果 Amazon EKS 嘗試建立的規則超過安全群組允許規則數目上限的配額,則部署 LoadBalancer 類型的服務可能會失敗。

檢閱文件以確定符合所有相依項。對於 Application Load Balancer,請參閱 Amazon EKS 上的應用程式負載平衡。對於 Network Load Balancer,請參閱 Amazon EKS 上的網路負載平衡。例如,如果您正在使用 Application Load Balancer,則服務物件必須指定 NodePortLoadBalancer 以使用執行個體流量模式。


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