EKSにおけるIngressとALBの統合: ステップバイステップガイド

# EKSにおけるIngressとALBの統合: ステップバイステップガイド

## 目次

- [1. EKSとALBの基本的な関連性](#1-eksとalbの基本的な関連性)
- [2. サブネットの役割とタグ付け](#2-サブネットの役割とタグ付け)
- [3. Ingressの導入と利点](#3-ingressの導入と利点)
- [4. ALBの設定とannotations](#4-albの設定とannotations)
- [5. Route 53とドメイン解決の役割](#5-route-53とドメイン解決の役割)
- [6. 実践: EKSでのIngress設定](#6-実践-eksでのingress設定)
- [7. まとめとベストプラクティス](#7-まとめとベストプラクティス)
- [8. Ingressを用いたALBのルーティング設定とトラフィックの流れ](#8-ingressを用いたalbのルーティング設定とトラフィックの流れ)

---

## 1. EKSとALBの基本的な関連性

### EKSとは？
EKS (Amazon Elastic Kubernetes Service) は、AWSが提供するマネージド型のKubernetesサービスです。これにより、ユーザーはKubernetesの運用やマスターノードの管理から解放され、アプリケーションのデプロイやスケーリングに集中できます。

### ALBの役割と特性
ALB (Application Load Balancer) は、HTTP/HTTPS トラフィックのロードバランシングのためのAWSのサービスです。コンテンツベースのルーティングを提供しており、特定のURLパスやホストベースのルーティングが可能です。

## 2. サブネットの役割とタグ付け

### サブネットの基本概念
サブネットは、VPC内のIPアドレスの範囲を指定するものです。これを利用して、ネットワークをセグメント化し、リソースの配置やアクセス制御を行います。

### タグ付けの重要性: EKSとELBの関連付け
EKSやELBのリソースを効果的に管理するためには、サブネットに適切なタグを付けることが必要です。

```markdown
Key: kubernetes.io/cluster/<クラスタ名>
Value: owned

Key: kubernetes.io/role/elb
Value: 1
```

## 3. Ingressの導入と利点

### Ingressとは？
Ingressは、Kubernetes内のサービスへの外部からのアクセスを制御するためのオブジェクトです。HTTP/HTTPSトラフィックのルーティングルールを定義し、ALBやNginxなどのIngressコントローラと連携して動作します。

### Kubernetesネイティブの強み
IngressはKubernetesネイティブなリソースであり、Kubernetesの標準的なリソースを使用してトラフィックのルーティングやロードバランシングの設定が可能です。これにより、統一感のある管理が実現されます。

## 4. ALBの設定とannotations

### Annotationsの役割
AnnotationsはKubernetesリソースのメタデータとして利用され、リソース

の振る舞いや設定をカスタマイズする際に使用されます。

### ALB設定の例: サンプルコードと解説

```yaml
annotations:
  kubernetes.io/ingress.class: alb
  alb.ingress.kubernetes.io/scheme: internet-facing
  alb.ingress.kubernetes.io/target-type: instance
```

これにより、特定のURLパスやホストに基づいてトラフィックをサービスにルーティングする設定を行えます。

## 5. Route 53とドメイン解決の役割

### Route 53の基本的な概念
Route 53は、AWSが提供するスケーラブルなDNSサービスです。ドメインの登録から、ドメインネームのルーティングまでを管理します。

### EKSとALBでの使用例
EKSとALBを連携させる際、Route 53はALBのDNS名をカスタムドメインに関連付けるために使用されます。これにより、カスタムドメインでアクセスされたトラフィックをALBにルーティングできます。

## 6. 実践: EKSでのIngress設定

### サブネットのタグ付けからELBの設定まで
前述のサブネットのタグ付け手順を参照し、ELBの配置や関連付けを行います。

### kubectlを使用したIngressの編集と適用

```bash
kubectl edit ingress eks-ingress -n eks
```

上記のコマンドを使用して、Ingressの設定を編集・適用することができます。

## 7. まとめとベストプラクティス

EKSとALBの連携は、高可用性やスケーラビリティを求めるアプリケーションの運用において非常に有効です。このガイドを通じて、その設定や適用のステップを理解し、最適な運用を目指してください。

## 8. Ingressを用いたALBのルーティング設定とトラフィックの流れ

### IngressとALBの連携の概要

KubernetesのIngressリソースを使用すると、入力トラフィックをクラスタ内のサービスにルーティングするためのルールを定義できます。AWS環境では、ALB Ingress Controllerを使用することで、これらのルールをALBに適用することができます。

### ルーティングの設定

Ingressリソースの`annotations`セクションを使用して、ALBの動作や設定をカスタマイズします。

```yaml
annotations:
  kubernetes.io/ingress.class: alb
  alb.ingress.kubernetes.io/scheme: internet-facing
  alb.ingress.kubernetes.io/target-type: instance
```

これにより、特定のURLパスやホストに基づいてトラフィックをサービスにルーティングする設定を行えます。

### トラフィックの流れ

1. **ユーザからのリクエスト**: ユーザはブラウザやAPIクライアントを使ってドメイン名（例: `example.com`）にアクセスします。
2. **DNS解決**: Route 53などのDNSサービスが、ドメイン名をALBのIPアドレスに解決します。
3. **ALBへのトラフィック**: リクエストはALBに到達します。
4. **ALBのルーティング**: ALBは、Ingressリソースに基づいてトラフィックを適切

なノードポートにルーティングします。
5. **ノードへのトラフィック**: トラフィックは、EKSクラスタ内の適切なワーカーノードに到達します。
6. **サービスへのルーティング**: ワーカーノードは、トラフィックを対象のKubernetesサービスにルーティングします。
7. **ポッドへのトラフィック**: サービスは、対象のポッドにトラフィックをルーティングします。
8. **応答の送信**: ポッドが処理を行い、結果をユーザに応答として返します。この応答は、同じルートを逆方向にたどり、ユーザに到達します。