AWS Load Balancer Controller を使用してインターネットトラフィックをルーティングする - Amazon EKS

AWS Load Balancer Controller を使用してインターネットトラフィックをルーティングする

AWS Load Balancer Controller によって Kubernetes クラスター向けの AWS Elastic Load Balancer が管理されます。コントローラーを使用すると、クラスターアプリケーションをインターネットに公開できます。コントローラーは、クラスターサービスまたは Ingress リソースを指す AWS ロードバランサーをプロビジョニングします。つまり、コントローラーはクラスター内の複数のポッドを指す単一の IP アドレスまたは DNS 名を作成します。

アーキテクチャ図。インターネットユーザーから Amazon Load Balancer へのトラフィックの図。Amazon Load Balancer は、クラスター内のポッドにトラフィックを分散します。

コントローラーは、Kubernetes Ingress リソースまたは Service リソースを監視します。これに応じて、適切な AWS Elastic Load Balancing リソースが作成されます。Kubernetes リソースに注釈を適用することで、ロードバランサーの特定の動作を設定できます。例えば、注釈を使用してロードバランサーに AWS セキュリティグループをアタッチできます。

コントローラは、以下のリソースをプロビジョニングします。

Kubernetes Ingress

Kubernetes Ingress を作成すると、LBC は AWS Application Load Balancer (ALB) を作成します。Ingress リソースに適用できる注釈を確認してください。

LoadBalancer タイプの Kubernetes サービス

LoadBalancer タイプの Kubernetes サービスを作成すると、LBC は AWS Network Load Balancer (NLB) を作成します。サービスリソースに適用できる注釈を確認してください。

以前は、インスタンスターゲットには Kubernetes Network Load Balancer が使用されていましたが、IP ターゲットには LBC が使用されていました。 AWS Load Balancer Controller バージョン 2.3.0 以降では、いずれかのターゲットタイプを使用して NLBs を作成できます。NLB ターゲットタイプの詳細については、Network Load Balancer のユーザーガイドの 「ターゲットタイプ」を参照してください。

コントローラーは GitHub で管理されるオープンソースプロジェクトです。

コントローラーをデプロイする前に、「Application Load Balancers を使用したアプリケーションおよび HTTP トラフィックのルーティング」および Network Load Balancer を使用して TCP および UDP トラフィックをルーティングする で前提条件と考慮事項を確認しておくことをお勧めします。これらのトピックでは、AWS ロードバランサーを含むサンプルアプリケーションをデプロイしています。

コントローラーのインストール

次のどちらかの手順を使用して AWS Load Balancer Controller をインストールできます。

非推奨のコントローラーバージョンから移行する

  • 非推奨バージョンの AWS Load Balancer Controller がインストールされている場合は、「非推奨の ALB Ingress Controller からアプリケーションを移行する」を参照してください。

  • 非推奨バージョンはアップグレードできません。このバージョンを削除し、 AWS Load Balancer Controller の最新バージョンをインストールする必要があります。

  • 非推奨バージョンには以下が含まれます。

    • AWS Load Balancer Controller の前身である AWS ALB Ingress Controller for Kubernetes (「Ingress Controller」)

    • AWS Load Balancer Controller の 0.1.x バージョンすべて

レガシークラウドプロバイダー

Kubernetes には、AWS のレガシークラウドプロバイダーが含まれています。レガシークラウドプロバイダーは AWS Load Balancer Controller と同様に、AWS ロードバランサーをプロビジョニングできます。レガシークラウドプロバイダーは Classic Load Balancer を作成します。 AWS Load Balancer Controller をインストールしない場合、Kubernetes はデフォルトでレガシークラウドプロバイダーを使用します。 AWS Load Balancer Controller をインストールして、レガシークラウドプロバイダーを使用しないようにしてください。

重要

バージョン 2.5 以降では、 AWS Load Balancer Controller は、type: LoadBalancer を持つ Kubernetes サービスリソースのデフォルトコントローラーとなり、サービスごとに AWS Network Load Balancer (NLB) を作成します。これは、サービスの変更ウェブフックを変化することで実行され、これにより type: LoadBalancer の新しいサービスの spec.loadBalancerClass フィールドが service.k8s.aws/nlb に設定されます。Helm チャートの値 enableServiceMutatorWebhook を false に設定すると、この機能をオフにして、レガシークラウドプロバイダーをデフォルトのコントローラーとして使用するように戻すことができます。この機能をオフにしない限り、クラスターはサービスに新しい Classic Load Balancer をプロビジョニングしません。既存の Classic Load Balancer は従来どおり機能します。