11
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ingress-nginxはどうやって動いているのか(1)

Last updated at Posted at 2019-10-04

ingress-nginxって何?

ingress-nginxの説明をする前に、KubernetesのIngressとIngress Controllerの説明を少し。

Ingressって何?

Ingressの公式ドキュメントによると、Ingressとは、

An API object that manages external access to the services in a cluster, typically HTTP.
Ingress can provide load balancing, SSL termination and name-based virtual hosting.

サービスへのアクセスを制御する機能として、ロードバランシングや、SSL、バーチャルホストなどの機能を提供するためのAPIオブジェクトのこと。

Ingress Controllerって何?

Ingress Controllerの公式ドキュメントによると、Ingress Controllerとは、

In order for the Ingress resource to work, the cluster must have an ingress controller running.

Ingressリソースが設定で、その設定どおりに動く実態がIngress Controllerといった感じ。
実装としては、envoyベースやHAProxyベース、nginxベースなど、様々なものが存在しており、それぞれIngressが定める仕様を満たしつつ、様々な独自の拡張機能(Canaryリリースの仕組みなど)を提供している。
ユーザーが自分たちの要件に合わせて、どの実装をIngress Controllerとして選択して利用するかを決めることになる。

実際には、通常のアプリケーションのように、Ingress Controller用のDeploymentやServiceをKubernetesにデプロイする必要がある。

ingress-nginxって何?

ようやく本題。kubernetes/ingress-nginxは、Ingress Controllerの実装の1つで、Kubernetes Communityのリポジトリとして開発が進められている。

nginxベースのIngress Controllerとして、NGINX, Inc.が提供しているNGINX Ingress Controller for Kubernetesもあるが、こちらとは別物。
ingress-nginxはコミュニティベースが開発が進められているため、実験的な機能なども多く追加されている。

具体的な差異については、公式ドキュメントにも書かれている。

ingress-nginxはどのような仕組みで動いているのか

how-it-works.mdに概要が書かれているが、ソースコード(v0.26.1)を見ながら全体を図示してみるとこんな感じ(なはず)。

how-nginx-ingress-works.png

メイン処理

メインのプロセスはGoでビルドされたバイナリが実行され、Kubernetesのリソース(Ingress, ConfigMap, Service, etc..)情報を元に、nginxの制御を行っている。具体的には、

  • Kubernetesのリソース情報を取得
  • nginxプロセスの起動/リロード
  • nginx.confの作成/更新
  • LuaモジュールのConfigurationの更新

のような処理を行っている。

Kubernetesリソースの監視

Ingressリソースなど、nginxのConfigurationを構成するための情報が更新された場合、ingress-nginxにも反映させなければいけない。そのために、ingress-nginxはkubernetes/client-goライブラリを通じて、Kubernetesの各種リソースの監視を行っている。

どのような仕組みで監視を行っているかは、sample-controllerリポジトリのcontroller-client-go.mdがわかりやすいので、気になる人はこちらを見てほしい。

Luaモジュール

Goでビルドされたバイナリの他に、ingress-nginxは、nginxプロセス内で動くLuaモジュールも提供している。これらのモジュールは、受け取ったConfiguration情報を元に、各種アルゴリズムでのロードバランシング、Canaryリリースの制御などを行っている。

続き

ingress-nginxはどうやって動いているのか(2)では、より詳細な処理の流れをコードを追いながら見ていく。

11
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?