Ingressって何? | 若手エンジニアのブログ

若手エンジニアのブログ

文系出身の若手女子エンジニアによる技術ブログ。
日々の経験や学びをアウトプットするためにブログを書いています。
バックエンド(Java+SpringFramework)を経てインフラエンジニアになりました。
今は育休中につき、本で勉強したことを中心にアウトプットしています。

現場でIngressなるものを使うらしいのですが、

「い、いんぐれす…??」って感じなので、

基本を調べてみたいと思います(`・ω・´)

 

※Kubernetesについてうっすら知っている人向けです。

一応基本的なことの解説は入れていますが、はしょってます。

 

 

もくじ

Ingressとは

Kubernetesのアーキテクチャ(復習)

Ingressの主要機能① SSL/TLSアクセラレーション

Ingressの主要機能② 名前ベースの仮想ホスティング

まとめ

 

■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で対応できるようにしてくれる。

 

 

今回は以上!

実際の使い方(設定ファイルの書き方等)は、必要に応じて記事にする…かも。