現場でIngressなるものを使うらしいのですが、
「い、いんぐれす…??」って感じなので、
基本を調べてみたいと思います(`・ω・´)
※Kubernetesについてうっすら知っている人向けです。
一応基本的なことの解説は入れていますが、はしょってます。
もくじ
・Ingressの主要機能① SSL/TLSアクセラレーション
・まとめ
■Ingressとは
Kubernetesのページによると、Ingressとは、
クラスター内のServiceに対する、外部からのアクセス(主にHTTP)を管理するAPIオブジェクトです。
Ingressは負荷分散、SSL終端、名前ベースの仮想ホスティングの機能を提供します。
<https://kubernetes.io/ja/docs/concepts/services-networking/ingress/>
…といっても意味不明なので、順にかみ砕いて見ていきたい。
■Kubernetesのアーキテクチャ(復習)
Kubernetes×Ingressを理解するために、まずKubernetesのアーキテクチャを確認する。
※Kubernetesの基本については以下で詳しく解説している。
https://ameblo.jp/bakery-diary/entry-12610267497.html
Kubernetesのデプロイ参照単位はPodといい、
PodはWorker Node内に散らばるようにして存在している。
Pod内には1つ以上のコンテナが存在している。
実際のプログラムでは、コンテナ上にアプリケーションが乗っかるような構造になる。
さて、Podは、外部からアクセスを直接受けることは難しい。
というのも、PodにアクセスするにはIPアドレスが必要となるが、
Podは手軽に生成されたり削除されたりするものであり、従ってそのIPアドレスは動的だからである。
そこで、Podの所在を抽象化し、
外からPodに来たアクセスを良い感じに振り分けてくれる便利屋が登場する。Serviceというヤツである。
Serviceは通信の窓口の役割を担っており、Podと確実な通信をできるようにしてくれている。
■Ingressの主要機能① SSL/TLSアクセラレーション
続いて本題、Ingressの主要機能を見ていく。
Ingressの機能の1つに、SSL/TLSアクセラレーションというものがある。
前提として、一般的に、HTTPS通信を行う際、
通信傍受を防ぐために、通信は暗号化される。
暗号化・復号は、通常、通信の送信者と受信者、
すなわち、WebサーバとWebブラウザ間で行われる。
Webブラウザで暗号化したデータを、Webサーバまで送り、
Webサーバが復号することで初めて内容が分かるというものだ。
さてここで、ロードバランサ(負荷分散装置/LB)について考えたい。
ロードバランサは、Webブラウザから送られてきたリクエストを、
複数あるWebサーバのうちどこに渡すかを、
その時のサーバの負荷や稼働状態をみて、動的に振り分ける役割を持っている。
先ほど書いた、HTTPS通信時の暗号化されたデータは、通常、
ロードバランサといえども復号することはできない。
そのためロードバランサは、内容が分からないまま、Webサーバへの振り分け処理を行うことになる。
しかし、内容が分からないままよりも、内容が分かっていたほうが、
より適切に負荷分散処理を行うことができるはずである。
そこで、WebブラウザとWebサーバ間での暗号化ではなく、
Webブラウザとロードバランサ間で暗号化を行おうという考え方が生まれた。
暗号化の終わる場所、すなわちSSL/TLS通信の終端が、
サーバではなくロードバランサになるということだ。
SSL/TLS終端は、別名、「SSL/TLSアクセラレーション」または「SSL/TLSターミネーション」とも言われる。
Ingressは、SSL/TLSアクセラレーションの機能を持っていると書いたが、
その意味はすなわち、
IngressとWebブラウザ(クライアント)間で暗号化・復号を行えるということだ。
またIngressは、ロードバランサに似た、負荷分散機能も持っている。
Kubernetesの場合、負荷分散の対象は、Webサーバではなく、
適切なWorker NodeのServiceとなる。
まとめると、KubernetesにおけるIngressは、
SSL/TLS通信の終端となり、より適切に、Serviceへの負荷分散を行ってくれるというわけだ。
■Ingressの主要機能② 名前ベースの仮想ホスティング
Ingressでは、複数の異なるドメイン名で来たHTTPSリクエストを、1つのIPアドレスで受けたうえで、
複数の異なるホスト名に転送することが可能である。
1つのIPアドレスで、複数のKubernetesのServiceに対応させることができる。
※Kubernetes公式サイトにあった例を図示させて頂きましたm(__)m
■まとめ
Ingressは、外部からKubernetesのServiceへアクセスするときに活躍する。
主要機能は以下の通り。
・Serviceへの負荷を考慮し、負荷分散を行ってくれる。
・暗号化通信において、リクエストデータの復号を行ってくれる。
・複数のドメイン名を、1つのIPで対応できるようにしてくれる。
今回は以上!
実際の使い方(設定ファイルの書き方等)は、必要に応じて記事にする…かも。