でのアプリケーションの負荷分散 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 コントローラー.

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

    キー

    kubernetes.io/role/elb

    1

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

    キー

    kubernetes.io/role/internal-elb

    1

Considerations

  • AWS Load Balancer Controller は、 ALBs 注釈を使用してクラスターで Kubernetes Ingress AWS リソースが作成されるたびに、 kubernetes.io/ingress.class: alb および必要なサポートリソースを作成します。Ingress リソースは 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 タイプを指定する必要があります。

    • 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 間で重複した注文番号を持つことはできません。

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

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

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