

 **このページの改善にご協力ください** 

このユーザーガイドに貢献するには、すべてのページの右側のペインにある「**GitHub でこのページを編集する**」リンクを選択してください。

# AWS Load Balancer Controller を使用してインターネットトラフィックをルーティングする
<a name="aws-load-balancer-controller"></a>

**ヒント**  
 今後開催予定の Amazon EKS ワークショップに[登録](https://aws-experience.com/emea/smb/events/series/get-hands-on-with-amazon-eks?trk=4a9b4147-2490-4c63-bc9f-f8a84b122c8c&sc_channel=el)してください。

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

![\[アーキテクチャ図。インターネットユーザーから Amazon Load Balancer へのトラフィックの図。Amazon Load Balancer は、クラスター内のポッドにトラフィックを分散します。\]](http://docs.aws.amazon.com/ja_jp/eks/latest/userguide/images/lbc-overview.png)


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

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

 **Kubernetes `Ingress` **   
Kubernetes `Ingress` を作成すると、LBC は [AWS Application Load Balancer (ALB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) を作成します。[Ingress リソースに適用できる注釈を確認してください。](https://kubernetes-sigs.github.io/aws-load-balancer-controller/latest/guide/ingress/annotations/)

 **`LoadBalancer` タイプの Kubernetes サービス**   
`LoadBalancer` タイプの Kubernetes サービスを作成すると、LBC は [AWS Network Load Balancer (NLB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/introduction.html) を作成します。[サービスリソースに適用できる注釈を確認してください。](https://kubernetes-sigs.github.io/aws-load-balancer-controller/latest/guide/service/annotations/)  
以前は、*インスタンス*ターゲットには Kubernetes Network Load Balancer が使用されていましたが、*IP* ターゲットには LBC が使用されていました。AWS Load Balancer Controller バージョン `2.3.0` 以降では、いずれかのターゲットタイプを使用して NLBs を作成できます。NLB ターゲットタイプの詳細については、Network Load Balancer のユーザーガイドの 「[ターゲットタイプ](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-target-groups.html#target-type)」を参照してください。

コントローラーは GitHub で管理される[オープンソースプロジェクト](https://github.com/kubernetes-sigs/aws-load-balancer-controller)です。

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

 **Kubernetes `Gateway` API**   
AWS Load Balancer Controller バージョン `2.14.0` 以降では、Kubernetes `Gateway` の作成時に [AWS Application Load Balancer (ALB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) が作成されます。Kubernetes Gateway は、イングレスよりも多くの設定を標準化します (イングレスでは、よく使用される多くのオプションにカスタム注釈が必要でした)。[Gateway リソースに適用可能な設定を確認します。](https://kubernetes-sigs.github.io/aws-load-balancer-controller/latest/guide/gateway/gateway/)`Gateway` API の詳細については、Kubernetes ドキュメントの「[Gateway API](https://kubernetes.io/docs/concepts/services-networking/gateway/)」を参照してください。

## コントローラーのインストール
<a name="lbc-overview"></a>

次のどちらかの手順を使用して AWS Load Balancer Controller をインストールできます。
+ Amazon EKS を初めて使用する場合は、AWS Load Balancer Controller のインストールが簡素化されるため、Helm を使用してインストールすることをお勧めします。詳細については、「[Helm による AWS Load Balancer Controller のインストール](lbc-helm.md)」を参照してください。
+ パブリックコンテナレジストリへのネットワークアクセスが制限されているクラスターなどの高度な設定には、Kubernetes マニフェストを使用します。詳細については、「[マニフェストによる AWS Load Balancer Controller のインストール](lbc-manifest.md)」を参照してください。

## 非推奨のコントローラーバージョンから移行する
<a name="lbc-deprecated"></a>
+ 非推奨バージョンの AWS Load Balancer Controller がインストールされている場合は、「[非推奨になった ALB Ingress Controller からのアプリの移行](lbc-remove.md)」を参照してください。
+ 非推奨バージョンはアップグレードできません。このバージョンを削除し、AWS Load Balancer Controller の最新バージョンをインストールする必要があります。
+ 非推奨バージョンには以下が含まれます。
  +  AWS Load Balancer Controller の前身である AWS ALB Ingress Controller for Kubernetes (「Ingress Controller」)。
  + AWS Load Balancer Controller の任意の `0.1.x ` バージョン

## レガシークラウドプロバイダー
<a name="lbc-legacy"></a>

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` に設定すると、この機能をオフにして、[レガシークラウドプロバイダー](https://kubernetes-sigs.github.io/aws-load-balancer-controller/latest/guide/service/annotations/#legacy-cloud-provider)をデフォルトのコントローラーとして使用するように戻すことができます。この機能をオフにしない限り、クラスターはサービスに新しい Classic Load Balancer をプロビジョニングしません。既存の Classic Load Balancer は従来どおり機能します。