Ingressコントローラー@Ingressコントローラー系¶
はじめに¶
本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。
01. Ingressコントローラー¶
Ingressコントローラーとは¶
Ingressコントローラーは、kube-controllerのように単一/複数のIngressにwatchイベントを送信する、
これのルールに応じたリバースプロキシやロードバランサー (Ingressコントローラーの種類による) を作成し、Node外からの受信した通信をServiceにルーティングする。
注意点として、IngressコントローラーがServiceにルーティングするのであって、Ingressはあくまでルーティングのルールを定義しているだけである。
Kubernetesの周辺ツール (例:Prometheus、AlertManager、Grafana、ArgoCDなど) のダッシュボードを複数人で共有して参照する場合には、何らかのアクセス制限を付与したIngressを作成することになる。
- https://cloud.google.com/community/tutorials/nginx-ingress-gke
- https://developers.freee.co.jp/entry/kubernetes-ingress-controller
- https://www.containiq.com/post/kubernetes-ingress
- https://www.mirantis.com/blog/your-app-deserves-more-than-kubernetes-ingress-kubernetes-ingress-vs-istio-gateway-webinar/
- https://traefik.io/glossary/kubernetes-ingress-and-ingress-controller-101/
SSL証明書の割り当て¶
Ingressコントローラーは、Secretに設定されたSSL証明書を参照し、これを自身のロードバランサー (例:Nginx) に渡す。
Ingressの設定値のバリデーション¶
Ingressコントローラーは、『***-controller-admission
』というServiceでwebhookサーバーを公開している。
このwebhookサーバーは、新しく追加されたIngressの設定値のバリデーションを実行する。
これにより、不正なIngressが稼働することを防止できる。
このwebhookサーバーの登録時、まず『***-create
』というJob配下のPodが、有効期限の長いSSL証明書を持つSecretを作成する。
その後、『***-patch
』というJob配下のPodが、ValidatingWebhookConfigurationにこのSSL証明書を設定し、webhookサーバーにSSL証明書が割り当てられる。
02. 外部Ingressコントローラー¶
外部Ingressコントローラーの種類¶
Ingressコントローラーには種類があり、コントローラーごとに作成するリバースプロキシやロードバランサーが異なる。
外部Ingressコントローラーの種類 | リバースプロキシ、ロードバランサー | 開発環境 | 本番環境 |
---|---|---|---|
Nginx Ingressコントローラー | Nginx | ✅ | ✅ |
minikubeのingressアドオン (実体はNginx Ingressコントローラー) | Nginx | ✅ | |
AWS Load Balancerコントローラー | AWS ALB | ✅ | |
Google Cloud CLBコントローラー | Google Cloud CLB | ✅ | |
Istio Ingressコントローラー | Istio IngressGateway (実体はEnvoy) | ✅ | ✅ |
Contourコントローラー | Envoy | ✅ | ✅ |
... | ... | ... | ... |
- https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/
- https://www.nginx.com/blog/how-do-i-choose-api-gateway-vs-ingress-controller-vs-service-mesh/
- https://www.rancher.co.jp/docs/rancher/v2.x/en/cluster-admin/tools/istio/setup/gateway/
- https://istio.io/latest/docs/tasks/traffic-management/ingress/kubernetes-ingress/#specifying-ingressclass
- https://github.com/projectcontour/contour