スタンドアロンKubernetesクラスタにIngressを設定しWebサーバを公開する
はじめに
余ったPC1台を使ってKubernetesクラスタを構築してみるでKubernetesの検証環境を構築できました。
せっかくできたこの環境を使って外部からアクセス可能なWebサーバを構築し、公開してみたいと思います。
Ingressとは
Ingressとは、Kubernetesで利用できるL7(HTTP/HTTPS)ロードバランサです。
クラスタ内のコンテナ(正確にはPod)を外部に公開できます。
似たようなものとしてLoad Balancer Serviceというものがあります。
こちらはL4(TCP/UDP)ロードバランサです。
後々やってみたいと思っているTLSターミネーションやURLマップができません。
したがって、Ingressを使ってみたいと思います。
セットアップ
検証環境
前回のエントリの続きのため、Ubuntu環境を利用しました。
Ingress Nginx Controller
Ingressとは先程触れたとおり、Kubernetesで利用できるL7(HTTP/HTTPS)ロードバランサです。
Ingressの内部実装はIngress Controllerと呼ばれており、GCPで動作するもの、AWSで動作するものなど色々あります。
ここではオンプレミス環境でも利用できるIngress Nginx Controllerをインストールします。
Ingress Nginx ControllerをHelmというツールを使ってセットアップを行います。
*Helm**を利用する理由は、クラスタ外からアクセスするためのIPアドレス(external_ip
)の設定が容易なためです。
Helmのインストール
公式ページに記載されている方法でインストールします。
次に外部からアクセスする際のクラスタのIPについて確認します。
スタンドアローンのクラスタなので、 マスタサーバ で ip addr
を実行した結果のIPアドレスを利用します。
今回構築したサーバは wifi
環境に接続させているため(サーバなのにwifi)、上記の一番下に表示されている 192.168.0.201
のIPアドレスを利用することになります。
それではHelmを使って、Ingress Nginx Controllerをインストールします。
一点だけ注意点として、ufwが有効になっていた場合、起動がうまくいきませんでした。sudo ufw disable
で無効にした上で実行したところうまくいきました。
Ingressを設定してみる
Ingressを利用できるようになったため、以下のような構成でWebサーバを公開してみます。
sample-app
という名前のWebサーバPod(ここではコンテナと読み替えてもOK)を作成sample-app
Podを公開するためのServiceを作成(9000ポートで公開)- ここまでくれば、
curl
コマンドを使ってPodにアクセスできる
- ここまでくれば、
sample-app.local
というドメインでクラスタ外にServiceを公開するためのIngressを作成(80ポートで公開)
この状態では、クラスタの外からはまだアクセスできないが、クラスタ内(サーバ自身)からはアクセスできます。
試してみます。
最後にIngressを作成します。
ここではApacheのVirtualHost方式を用います。sample-app.local
というホスト名でアクセスされた場合にのみ、Serviceへと転送させます。
Ingressリソースが正しく作成されているかは以下のコマンドで確認できます。
それではクラスタ外のPCから以下のコマンドを実行して、正しいレスポンスが帰ってくるかを確認してみます。
ホスト名が不明だった場合はどうなるでしょう?
これでクラスタ外からアクセスできるようになりました。
ひとこと
自分でもまだ用語が整理できていない部分もあり、きれいなエントリとなっていませんが、参考になれば幸いです。
ディスカッション
コメント一覧
まだ、コメントがありません