でのアプリケーションの負荷分散 Amazon EKS - Amazon EKS

「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」

でのアプリケーションの負荷分散 Amazon EKS

Kubernetes を作成するとIngress、アプリケーショントラフィックの負荷分散を行う AWS Application Load Balancer がプロビジョニングされます。詳細については、Application Application Load Balancer ユーザーガイドの「Application Load Balancer とは」および Kubernetes ドキュメントの「Ingress」を参照してください。ALBs は、ノードまたは にデプロイされたポッドで使用できますAWS Fargate。パブリックサブネットまたはプライベートサブネットに ALB をデプロイできます。

アプリケーショントラフィックは、OSI モデルの L7 で分散されます。L4 でネットワークトラフィックの負荷を分散するには、 をプロビジョニングするServiceタイプ LoadBalancer の Kubernetes をデプロイAWSNetwork Load Balancerします。詳細については、「 」を参照してください。におけるネットワーク負荷分散 Amazon EKS. 2 種類の負荷分散の違いの詳細については、 ウェブサイトのElastic Load Balancing の機能AWS」を参照してください。

Prerequisites

アプリケーションへのトラフィックの負荷を分散する前に、次の要件を満たす必要があります。

  • 既存の クラスターがある。既存のクラスターがない場合は、「」 の使用を開始するAmazon EKSを参照してください。既存のクラスターのバージョンを更新する必要がある場合は、「」クラスターの更新を参照してください。

  • クラスターにプロビジョニングされたAWSLoad Balancerコントローラー。詳細については、「 」を参照してください。AWS Load Balancer コントローラー.

  • 異なる 内の少なくとも 2 つのサブネットアベイラビリティーゾーン。AWS ロードバランサーコントローラーは、各 から 1 つのサブネットを選択しますアベイラビリティーゾーン。で見つかった複数のタグ付きサブネットの場合アベイラビリティーゾーン、コントローラーはサブネット によって辞書順で最初のサブネットを選択しますIDs。

  • AWS Load Balancer コントローラーバージョン v2.1.1 以前を使用している場合、サブネットには次のようにタグ付けする必要があります。バージョン 2.1.2 以降を使用する場合、このタグはオプションです。同じ VPC で実行されている複数のクラスターがある場合、または VPC でサブネットを共有する複数の AWS のサービスがあり、クラスターごとにロードバランサーをプロビジョニングする場所をより詳細に制御する場合は、サブネットにタグを付けることをお勧めします。<cluster-name> ( を含む<>) をクラスター名に置き換えます。

    • キーkubernetes.io/cluster/<cluster-name>

    • shared または owned

  • サブネットのタグ付け – パブリックサブネットとプライベートサブネットは、Service または Ingress オブジェクトの注釈IDsとしてサブネットを明示的に指定しない限り、次の要件を満たしている必要があります。サブネットをサービスまたは Ingress オブジェクトの注釈IDsとして明示的に指定してロードバランサーをプロビジョニングする場合、Kubernetes と AWS ロードバランサーコントローラーはそれらのサブネットを直接使用してロードバランサーを作成し、次のタグは必要ありません。

    • プライベートサブネット Kubernetes と AWS ロードバランサーコントローラーがサブネットを内部ロードバランサーに使用できることを認識できるように、次のようにタグ付け–する必要があります。2020 年 3 月 26 日以降に eksctl または Amazon EKS AWS AWS CloudFormation テンプレートを使用して VPC を作成する場合、サブネットは作成時に適切にタグ付けされます。Amazon EKS AWS AWS CloudFormation VPC テンプレートの詳細についてはAmazon EKS クラスター用の VPC の作成、「」を参照してください。

      • キーkubernetes.io/role/internal-elb

      • 1

    • パブリックサブネット それぞれでパブリックサブネットを選択するのではなく – (サブネット ID の辞書順)、Kubernetes がそれらのサブネットのみを外部ロードバランサーに使用することを認識できるように、次のようにタグ付けアベイラビリティーゾーンする必要があります。eksctl または Amazon EKS AWS CloudFormation テンプレートを使用して 以降に VPC を作成する場合March 26, 2020、サブネットは作成時に適切にタグ付けされます。<ph74/> <ph75/> VPC テンプレートの詳細については、「<ph76/>」を参照してください。Amazon EKSAWS CloudFormationAmazon EKS クラスター用の VPC の作成

      • キーkubernetes.io/role/elb

      • <ph81/>値<ph82/> <ph83/> <ph84/>1

    サブネットロールタグが明示的に追加されていない場合、Kubernetes サービスコントローラーはクラスター VPC サブネットのルートテーブルを調べて、サブネットがプライベートかパブリックかを判断します。この動作に依存せず、プライベートまたはパブリックロールのタグを明示的に追加することをお勧めします。AWS ロードバランサーコントローラーはルートテーブルを調べず、自動検出が成功するためにはプライベートタグとパブリックタグが必要です。

Considerations

  • <ph86/>AWS <kl:gls id=1>Load Balancer</kl:gls> Controller<ph87/> は、Kubernetes Ingress リソースが <ph90/> 注釈を使用してクラスターで作成されるたびに、<ph88/> および必要なサポート <ph89/> リソースを作成します。https://github.com/kubernetes-sigs/aws-load-balancer-controllerALBsAWSkubernetes.io/ingress.class: albIngress リソースは ALB を設定して、HTTP または HTTPS トラフィックをクラスター内の別のポッドにルーティングします。Ingress オブジェクトで AWS Load Balancer Controller を使用するには、Kubernetes Ingress 仕様に次の注釈を追加します。詳細については、「 の Ingress 仕様」を参照してくださいGitHub。

    annotations: kubernetes.io/ingress.class: alb
  • AWS Load Balancer Controller では、次のトラフィックモードがサポートされています。

    • インスタンス – クラスター内のノードを ALB のターゲットとして登録します。ALB に到達するトラフィックは、サービスの NodePort にルーティングされてから、ポッドにプロキシされます。これがデフォルトのトラフィックモードです。alb.ingress.kubernetes.io/target-type: instance の注釈を使用して明示的に指定することもできます。

      注記

      このトラフィックモードを使用するには、Kubernetes サービスで NodePort またはLoadBalancerタイプを指定する必要があります。

    • IP – ポッドを ALB のターゲットとして登録します。ALB に到達するトラフィックは、サービスのポッドに直接ルーティングされます。このトラフィックモードを使用するには、 alb.ingress.kubernetes.io/target-type: ip の注釈を指定する必要があります。ターゲットポッドが で実行されている場合、IP ターゲットタイプが必要ですFargate。

  • コントローラーによってALBs作成されたタグを追加するには、コントローラーに次の注釈を追加します: alb.ingress.kubernetes.io/tags。 AWS Load Balancer Controller でサポートされているすべての使用可能な注釈のリストについては、「 の Ingress 注釈」を参照してくださいGitHub。

を使用して複数の入力リソース間で Application Load Balancer を共有するには IngressGroups

Ingress グループに Ingress を結合するには、Kubernetes Ingress リソース仕様に次の注釈を追加します。

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

グループ名は次の条件を満たす必要があります。

  • 63 文字以下の長さ。

  • 小文字の英数字-、、 で構成され.、先頭と末尾に英数字を使用する必要があります。

コントローラーは、同じ Ingress グループ内のすべての Ingress ルールを自動的にマージし、単一の ALB でそれらをサポートします。Ingress で定義されたほとんどの注釈は、その Ingress で定義されたパスにのみ適用されます。デフォルトでは、Ingress リソースは Ingress グループに属していません。

警告

潜在的なセキュリティ上のリスク: Ingress の Ingress グループを指定するのは、Ingress リソースを作成または変更する RBAC アクセス許可を持つすべての Kubernetes ユーザーが、同じ信頼境界内にある場合に限ります。グループ名を使用して注釈を追加すると、他の Kubernetes ユーザーが Ingresses を作成または変更して、同じ Ingress グループに属する場合があります。これにより、優先度の高いルールで既存のルールを上書きするなど、望ましくない動作が発生する可能性があります。

Ingress リソースの順序番号を追加できます。

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

数値は 1-1000 の範囲で指定できます。同じ Ingress グループ内のすべての Ingress の最小数が最初に評価されます。この注釈のないすべての Ingresses は、値が 0 で評価されます。番号が大きいルールは、番号が低いルールを上書きできます。デフォルトでは、同じ Ingress グループ内の Ingress 間のルールの順序は、Ingress の名前空間と名前の辞書順によって決まります。

重要

同じ Ingress グループの各 Ingress に一意の優先度番号があることを確認します。複数の Ingresses 間で重複した注文番号を持つことはできません。

サンプルアプリケーションをデプロイするには

サンプルアプリケーションは、<ph115/> ノードのみ、<ph116/> ポッド、またはその両方を持つクラスターで実行できます。Amazon EC2Fargate

  1. にデプロイする場合はFargate、Fargateプロファイルを作成します。このステップFargateをスキップするためにデプロイしていない場合。プロファイルを作成するには、次のコマンドを実行します。または、 コマンドにある AWS マネジメントコンソール と に同じ値namenamespaceを使用して、 を使用してプロファイルを作成します。

    eksctl create fargateprofile --cluster <my-cluster> --region <region-code> --name <alb-sample-app> --namespace game-2048
  2. サンプルアプリケーションとしてゲーム 2048 をデプロイし、AWS Load Balancer Controller が Ingress オブジェクトの結果として AWS ALB を作成することを確認します。

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.1.3/docs/examples/2048/2048_full.yaml
  3. 数分後、次のコマンドを使用して、Ingress リソースが作成されたことを確認します。

    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
    注記

    Ingress が数分後に作成されていない場合は、次のコマンドを実行して Load Balancer Controller ログを表示します。これらのログには、デプロイに関する問題の診断に役立つエラーメッセージが含まれている場合があります。

    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.3/docs/examples/2048/2048_full.yaml