Ingress#
Ingress とは?#
Ingress は Ingress リソース
および Ingress Controller
などを指す。
Ingress リソースは kind: Ingress
の マニフェスト を登録することで作成され、その登録時に何らかの処理を行うものが Ingress Controller である。
これらにより、ノーマルな Service では実現困難なより高機能なロードバランシングが可能となる。Ingress は L7 のロードバランシングをサポートする。
LB の種類 | 機能 | 例 |
---|---|---|
L4 | IP アドレスとポート番号による負荷分散 | AWS の Application Load Balancer |
L7 | URL や HTTP ヘッダーで負荷分散 | AWS の Network Load Balancer |
Ingress の種類#
アーキテクチャの観点から 2 つに大別される。
1. GKE Ingress#
クラスタ外にロードバランサを立てるもの。
トラフィックの流れ | |
---|---|
2. Nginx Ingress#
クラスタ内にロードバランサを立てるもの。
トラフィックの流れ(Nginx Ingress) | |
---|---|
こちらのパターンの場合、考慮しなければならない点が多く、Ingress 用 Pod に外部からアクセスさせるために LoadBalancer Service を立てたり、Ingress 用の Pod に処理が集中することを想定してオートスケーリングを考慮する必要も出てくる。
Ingress Controller のデプロイ#
1. GKE Ingress#
クラスタ作成時に HttpLoadBalancer
アドオンを有効化する(デフォルトでそうなっている)。
2. Nginx Ingress#
Nginx Ingress Controller
をデプロイする。
また、以下の点にも注意されたし。
- LoadBalancer Service の作成
- ルールに一致しない場合のデフォルトの転送先 Deployment の作成
- トラフィックに応じて Pod 数を変えらえるように、
Horizontal Pod Autoscaler
の利用を検討
- トラフィックに応じて Pod 数を変えらえるように、
Ingress リソースの作成#
- 「リクエストパス + Service バックエンド」のペアで指定する。
- 1 つの IP アドレスで複数ホスト名を扱える。
- 「GKE タイプ」と「Nginx タイプ」で定義可能な設定は大体同じ。
以下では、2. Nginx Ingress の場合の例を示す。
Ingress Class による Ingress の分割#
Nginx Ingress Controller を利用する場合、適切な Ingress リソースを見つける際に衝突してしまう可能性がある。クラスを設定することでこれを避ける。