コンテンツにスキップ

Ingress Controller@Ingress Controller系

はじめに

本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。


01. Ingress Controllerとは

Ingress Controllerは、kube-controllerのように単一/複数のIngressにwatchイベントを送信する、

これのルールに応じたリバースプロキシやロードバランサー (Ingress Controllerの種類による) を作成し、Node外からの受信した通信をServiceにルーティングする。

注意点として、Ingress ControllerがServiceにルーティングするのであって、Ingressはあくまでルーティングのルールを定義しているだけである。

Kubernetesの周辺ツール (例:Prometheus、AlertManager、Grafana、ArgoCDなど) のダッシュボードを複数人で共有して参照する場合には、何らかのアクセス制限を付与したIngressを作成することになる。

kubernetes_ingress-controller


02. 外部Ingress Controllerの使用

外部Ingress Controllerの種類

Ingress Controllerには種類があり、 Controllerごとに作成するリバースプロキシやロードバランサーが異なる。

外部Ingress Controllerの種類 リバースプロキシ、ロードバランサー 開発環境 本番環境
Nginx Ingress Controller Nginx
minikubeのingressアドオン (実体はNginx Ingress Controller) Nginx
AWS Load Balancer Controller AWS ALB
Google Cloud CLB Controller Google Cloud CLB
Istio Ingress Controller Istio IngressGateway (実体はEnvoy)
Contour Controller Envoy
... ... ... ...


AWS Load Balancer Controllerの場合

パブリックネットワーク
⬇⬆︎︎
AWS Route53
⬇⬆︎︎
# L7ロードバランサー (単一のL7ロードバランサーを作成し、異なるポートを開放する複数のL4ロードバランサーの振り分ける)
AWS Load Balancer ControllerによるAWS ALB
⬇⬆︎︎
# L4ロードバランサー
NodePort Service (ポート番号はランダムでよい)
⬇⬆︎︎
Pod


Istio Ingress Controllerの場合

パブリックネットワーク
⬇⬆︎︎
AWS Route53
⬇⬆︎︎
  # L7ロードバランサー (単一のL7ロードバランサーを作成し、異なるポートを開放する複数のL4ロードバランサーの振り分ける)
AWS ALB
⬇⬆︎︎
  # L4ロードバランサー
NodePort Service (Istio IngressGateway)
⬇⬆︎︎
Gateway
⬇⬆︎︎
VirtualService
⬇⬆︎︎
  # L4ロードバランサー
ClusterIP Service
⬇⬆︎︎
Pod


03. 機能

Ingressの検知

Ingressに定義されたルーティングのルールを検知する。

Kubernetes Clusterに単一のIngress Controllerを作成するとよい。

また、各Namespace用に定義されたIngressを使用して、各NamespaceのServiceにルーティングするとよい。


インバウンド/アウトバウンド

Ingress Controllerは、名前ではIngressとなっているがEgress (アウトバウンド) の通信も扱う。


Ingressの設定値のバリデーション

Ingress Controllerは、『***-controller-admission』というServiceでwebhookサーバーを公開している。

このwebhookサーバーは、新しく追加されたIngressの設定値のバリデーションを実行する。

これにより、不正なIngressが稼働することを防止できる。

このwebhookサーバーの登録時、まず『***-create』というJob配下のPodが、有効期限の長いSSL証明書を持つSecretを作成する。

その後、『***-patch』というJob配下のPodが、ValidatingWebhookConfigurationにこのSSL証明書を設定し、webhookサーバーにSSL証明書が割り当てられる。


SSL証明書の割り当て

Ingress Controllerは、Secretに設定されたSSL証明書を参照し、これを自身のロードバランサー (例:Nginx) に渡す。

kubernetes_ingress-controller_certificate