上的應用程式負載平衡 Amazon EKS - Amazon EKS

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

上的應用程式負載平衡 Amazon EKS

當您建立 Kubernetes Ingress時AWSApplication Load Balancer,會配置 ,以平衡應用程式流量。若要進一步了解,請查看 Kubernetes 文件中 Application Load Balancer 使用者指南傳入中的「何為 Application Load Balancer Balancer?」。ALBs 可與部署至 節點或 的 Pod 搭配使用AWS Fargate。您可以將 ALB 部署到公有或私有子網路。

在 OSI 模型 L7 處,應用程式流量是平衡的。若要負載平衡 L4 Service的網路流量,請部署 LoadBalancer 類型的 Kubernetes,其會實作 AWS 網路負載平衡器。如需詳細資訊,請參閱 上的網路負載平衡 Amazon EKS. 若要進一步了解兩種負載平衡類型之間的不同之處,請前往 網站上的 Elastic Load Balancing 功能AWS。

Prerequisites

您必須符合下列要求,才能平衡應用程式流量與應用程式。

  • 擁有現有的 叢集。如果您尚未擁有現有的叢集,請查看 入門Amazon EKS。如果您需要更新現有叢集的版本,請查看 更新叢集

  • 叢集上提供的AWSLoad Balancer控制器。如需詳細資訊,請參閱 AWS Load Balancer 控制器.

  • 公有子網路必須如下加上標籤,讓 Kubernetes 僅以這些子網路用於外部負載平衡器,而非在每個 可用區域 (依據子網路 ID 的字典順序) 中選擇公有子網路。如果您使用 eksctl 或 Amazon EKS AWS CloudFormation 範本在 March 26, 2020之後建立 VPC,則子網路會在建立時適當地加上標籤。如需 Amazon EKS AWS CloudFormation VPC 範本的詳細資訊,請前往 為 Amazon EKS 叢集建立 VPC

    Key Value

    kubernetes.io/role/elb

    1

  • 私有子網路必須如下加上標籤,讓 Kubernetes 知道它可以使用子網路做為負載平衡器。如果您在 eksctl之後使用 Amazon EKS 或 AWS CloudFormation March 26, 2020 範本來建立 VPC,則子網路會在建立時適當地加上標籤。如需 Amazon EKS AWS CloudFormation VPC 範本的詳細資訊,請前往 為 Amazon EKS 叢集建立 VPC

    Key Value

    kubernetes.io/role/internal-elb

    1

Considerations

  • 每當使用 符號在叢集上建立 Kubernetes Ingress 資源時,AWS Load Balancer 控制器ALBs就會建立 AWS 和必要的支援kubernetes.io/ingress.class: alb資源。傳入資源設定 ALB 在叢集內透過 HTTP 或 HTTPS 路由到不同的 Pod。為了確保您的傳入物件使用 AWS Load Balancer 控制器,請將以下通知新增到您的 Kubernetes Ingress 規格。如需詳細資訊,請前往 的 Ingress 規格GitHub。

    annotations: kubernetes.io/ingress.class: alb
  • AWS Load Balancer 控制器支援以下流量模式:

    • 執行個體 – 將叢集中的節點註冊作為 ALB 的目標。到達 ALB 的流量被路由到服務的 NodePort,然後代理到您的 Pod。這是預設的流量模式。您也可以使用 alb.ingress.kubernetes.io/target-type: instance 註釋明確指定它。

      注意

      您的 Kubernetes 服務必須指定要使用此流量模式的 NodePort 類型。

    • IP – 註冊 Pod 作為 ALB 的目標。到達 ALB 的流量會直接路由到服務的 Pod。您必須指定 alb.ingress.kubernetes.io/target-type: ip 註釋才能使用此流量模式。當目標 Pod 在 上執行時,IP 目標類型是必要的Fargate。

  • 若要標記控制器ALBs所建立,請將以下標記新增至控制器:alb.ingress.kubernetes.io/tags。 如需 AWS Load Balancer 控制器支援的所有可用通知清單,請前往 上的 Ingress GitHubnotations。

使用 跨多個輸入資源共用應用程式負載平衡器 IngressGroups

若要將輸入加入到輸入群組,請將以下標記法新增至 Kubernetes 輸入資源規格。

alb.ingress.kubernetes.io/group.name: <my-group>

群組名稱必須是:

  • 長度為 63 個字元或更少。

  • 包含小寫英數字元 -、 和 .,且開頭和結尾必須是英數字元。

控制器將自動整合同一傳入群組中所有傳入的輸入規則,並以單一 ALB 支援這些規則。在輸入上定義的大部分命名僅適用於該輸入所定義的路徑。根據預設,傳入資源不屬於任何傳入群組。

警告

潛在安全風險:當所有擁有 RBAC 許可建立或修改傳入資源的所有 Kubernetes 使用者都位於相同的信任界限時,才應該為傳入指定傳入群組。如果您新增群組名稱的標記法,則其他 Kubernetes 使用者可能會建立或修改其輸入項,使其屬於相同的輸入群組。這樣做可能會導致不適當的行為,例如使用較高優先順序的規則覆寫現有規則。

您可以新增傳入資源的訂單號碼。

alb.ingress.kubernetes.io/group.order: <'10'>

數字可以介於 1-1000 之間。會先評估相同輸入群組中所有輸入的最低數量。所有無此符號的輸入都使用零值評估。數字越大的重複規則可以覆寫數字越小的規則。根據預設,在相同傳入群組中,傳入之間的規則順序,會依輸入命名空間和名稱的語彙順序而定。

重要

確保相同傳入群組中的每個傳入都有唯一的優先順序號碼。各輸入的訂單號碼不可重複。

欲部署範例應用程式

您可以在只有Amazon EC2節點Fargate、Pod 或兩者的叢集上執行範例應用程式。

  1. 如果您是部署到 Fargate,請建立 Fargate 設定檔。如果您不部署 來Fargate略過此步驟。您可以透過執行以下命令來建立描述檔,或者使用 來使用AWS 管理主控台name 命令中namespace相同的 值來建立描述檔。

    eksctl create fargateprofile --cluster <my-cluster> --region <region-code> --name <alb-sample-app> --namespace game-2048
  2. 部署第 2048 回合做為範例應用程式,以驗證因輸入物件而 AWS Load Balancer 控制器建立 AWS ALB。

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.1.0/docs/examples/2048/2048_full.yaml
  3. 幾分鐘後,使用下列指令來驗證傳入資源已建立。

    kubectl get ingress/ingress-2048 -n game-2048

    輸出:

    NAME CLASS HOSTS ADDRESS PORTS AGE ingress-2048 <none> * k8s-game2048-ingress2-xxxxxxxxxx-yyyyyyyyyy.us-west-2.elb.amazonaws.com 80 2m32s
    注意

    如果幾分鐘後尚未建立輸入,請執行以下命令來檢視 Load Balancer Controller logs。這些日誌可能包含錯誤訊息,可協助您診斷部署的任何問題。

    kubectl logs -n kube-system deployment.apps/aws-load-balancer-controller
  4. 開啟瀏覽器和導覽至 ADDRESS URL 從先前的指令輸出查看範例應用程式。如果看不到您要的資料,請稍待幾分鐘並重新整理您的瀏覽器。

    
                    2048 範例應用程式
  5. 當您完成實驗您的範例應用程式,透過下列指令將其刪除。

    kubectl delete -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.1.0/docs/examples/2048/2048_full.yaml