こんにちは、藤城(@tafujish)です。「IDCFクラウド コンテナ」で利用可能な4つのロードバランサーについて以前に紹介しました。
この中の一つ、L7のNGINX Ingressが思っていた以上にニーズがあったので、改めて使い方を紹介したいと思います。具体的には以下のようなケースだとNGINX Ingressが有用です。
- IDCFプライベートクラウドやオンプレミス(カスタム)などのIngressが標準で実装されていない環境でのL7ロードバランサー
- IDCFクラウドコンピュートで大量の証明書を利用したいとき(インフィニットLBだと利用料が高額になってしまう)
それでは、実際の設定の流れを見てみましょう。
クラスターでの事前設定
まずはクラスターにて、NGINX Ingressの機能を有効化します。クラスター作成時、またはクラスターの「設定を編集」にて
拡張オプション内の「イングレスプロバイダー」を「有効」にします。
なお、IDCFクラウドコンテナ for IDCFプライベートクラウド と for カスタム(オンプレミス)ではイングレスプロバイダーはデフォルトで有効になっています。for IDCFクラウドでは、インフィニットLBが標準で利用できますので、イングレスプロバイダーはデフォルトで無効になっています。後から、有効・無効の変更も可能です。
イングレスプロバイダーを有効にするとSystem上で nginx-ingress-controller がActiveとなります。
以上で、クラスターの事前準備は終わりです。
対象のワークロードを準備
では、次に分散先となるワークロードを準備します。ここでの例では、WEBサーバーとしてnginxのワークロードをデプロイしておきます。この時、ポートの設定として「クラスターIP」を指定しておきます。
NGINX Ingress を作成
いよいよ、NGINX Ingress を作っていきます。左メニューのサービスディスカバリ内の「Ingresses」を選び、「作成」を押します。
次に、ロードバランサーとして設定を入れていきます。HTTPで分散するときの最低限の設定は、Ingressの名前、パス(デフォルトパスの場合は、Prefixを選びパスは / としておきます)、ターゲットサービス(先ほど作成したワークロードのクラスターIPを指定します)、ポートです。HTTPSの場合は証明書を設定しておきます。
IDCFクラウドコンテナ for IDCFプライベートクラウド と for カスタム(オンプレミス)の場合は、このまま「作成」で完了です。
for IDCFクラウドでは、Ingressの標準がインフィニットLBのためNGINX Ingressを指定する必要があります。「ラベル・アノテーション」を選び以下の通り、アノテーションを追加した上で「作成」する必要があります。
キー: kubernetes.io/ingress.class 値: nginx
また動作として現状必須ではありませんが、ingressClassNameもデフォルトではインフィニットLBが設定されるため、NGINX Ingressを指定しておくのが安全です。「YAMLを編集」から spec の下に
ingressClassName: nginx
を追加して、「保存」してください。
以上で設定は完了です。作成したIngressがActiveになれば完成です。
インターネット接続
NGINX Ingressは無事デプロイできてもこのままではインターネットからワークロードにはアクセスできないです。NGINX Ingressはコンテナとして動作しているので、インターネットからの接続経路を設定する必要があります。
IDCFクラウドコンテナ for IDCFプライベートクラウド と for カスタム(オンプレミス)の場合は、インターネット接続しているファイアウォール機器やロードバランサー機器があると思いますので、そちらでクラスターのワーカーノードのTCP80ないしTCP443への設定を入れてください。
for IDCFクラウドでは、仮想ルーターのロードバランサーやインフィニットLBで、クラスターのワーカーノードのTCP80ないしTCP443への設定を入れます。以下は仮想ルーターでの設定例です。なお、ノードの追加や削除、ノードの再作成のたびにロードバランサーの設定が必要ですのでご注意ください。
このようなネットワーク構成となります。
まとめ
以上のように、IDCFクラウドコンテナではNGINX Ingressが組み込まれているため、どこの環境でも簡単にIngressを使いはじめることができます。もし、IDCFクラウドコンテナを利用していてネットワーク構成に悩むことがあればご相談いただければと存じます。