ウェブサイト検索

Kubernetes クラスターに Nginx をデプロイする方法


前回の記事では、Kubernetes クラスターをセットアップして実行する方法について説明しました。次に、 クラスターにNGINX サービスをデプロイする方法について説明します。

このデプロイメントは、パブリック クラウド プロバイダーがホストする仮想マシン上で実行します。多くのパブリック クラウド サービスと同様に、多くは通常、仮想マシンのパブリック IP スキームとプライベート IP スキームを維持しています。

テスト環境

Master Node - Public IP: 104.197.170.99 and Private IP: 10.128.15.195
Worker Node 1 - Public IP: 34.67.149.37 and Private IP: 10.128.15.196
Worker Node 2 - Public IP: 35.232.161.178 and Private IP: 10.128.15.197

Kubernetes クラスターへの NGINX のデプロイ

このデプロイメントはマスターノードから実行します。

まずはクラスターのステータスを確認しましょう。すべてのノードが準備完了状態になっている必要があります。

kubectl get nodes

NGINX イメージを使用して NGINX のデプロイメントを作成します。

kubectl create deployment nginx --image=nginx

これで、デプロイメントの状態を確認できるようになりました。

kubectl get deployments

導入の詳細を確認したい場合は、describe コマンドを実行できます。たとえば、実行されているデプロイメントのレプリカの数を確認できます。この場合、1 のレプリカが実行されることが予想されます (つまり1/1 レプリカ)。

kubectl describe deployment nginx

これで Nginx の展開がアクティブになったので、NGINX サービスをインターネット上で到達可能なパブリック IP に公開することができます。

Nginx サービスをパブリック ネットワークに公開する

Kubernetes は、Kubernetes Service-types と呼ばれる機能に基づいてサービスを公開するときに、次のようないくつかのオプションを提供します。

  1. ClusterIP – このサービス タイプは通常、内部 IP 上でサービスを公開し、クラスタ内でのみ、場合によってはクラスタ ノード内でのみ到達可能です。
  2. ノードポート – これは、クラスタ内のすべてのノードの特定のポート (ノードポート と呼ばれます) で、クラスタの外部にアクセスできるようにサービスを公開する最も基本的なオプションです。このオプションについては後ほど説明します。
  3. ロードバランサー – このオプションは、さまざまなプロバイダーが提供する外部負荷分散サービスを利用して、サービスへのアクセスを許可します。これは、サービスの高可用性を考える場合に、より信頼性の高いオプションであり、デフォルトのアクセスを超える機能が備わっています。
  4. 外部名 – このサービスは、クラスタの外部のサービスにトラフィックをリダイレクトします。したがって、サービスはクラスター外でホストできる DNS 名にマップされます。これはプロキシを使用しないことに注意することが重要です。

デフォルトのサービスタイプはClusterIPです。

このシナリオでは、パブリック IP アドレスとプライベート IP アドレスの両方があり、現時点では外部ロード バランサーが必要ないため、NodePort サービス タイプを使用したいと考えています。このサービス タイプでは、Kubernetes はこのサービスを 30000+ 範囲のポートに割り当てます。

kubectl create service nodeport nginx --tcp=80:80

get svc コマンドを実行して、サービスと公開されているポートの概要を確認します。

kubectl get svc

これで、curl コマンドを使用してすべてのノードで Nginx ページにアクセスできることを確認できます。

curl master-node:30386
curl node-1:30386
curl node-2:30386

ご覧のとおり、「WELCOME TO NGINX!」ページにアクセスできます。

一時的なパブリック IP アドレスへの到達

お気づきかと思いますが、Kubernetes はアクティブなパブリック IP が登録されていない、または EXTERNAL-IP が登録されていないと報告します。

kubectl get svc

IP コマンドを使用してインターフェースに外部 IP が接続されていないことが本当に正しいかどうかを確認してみましょう。

ip a

ご覧のとおり、パブリック IP はありません。

前述したように、私は現在、パブリック クラウド プロバイダーが提供する仮想マシン上でこの展開を実行しています。したがって、パブリック IP が割り当てられた特定のインターフェイスはありませんが、VM プロバイダーは一時的な外部 IP アドレスを発行しています。

一時的な外部 IP アドレスは、仮想インスタンスが停止されるまで VM に接続されたままになる一時的な IP アドレスです。仮想インスタンスが再起動されると、新しい外部 IP が割り当てられます。基本的に、これはサービス プロバイダーがアイドル状態のパブリック IP を活用する簡単な方法です。

ここでの課題は、パブリック IP が静的ではないという事実以外に、エフェメラル パブリック IP が単にプライベート IP の拡張 (またはプロキシ) であり、そのためサービスがポート 30386 でのみアクセスできます。つまり、サービスは URL 、つまり 104.197.170.99:30386 でアクセスされます。これをオンにすると、ブラウザを開くと、ようこそページが表示されるはずです。

これにより、3 ノードの Kubernetes クラスターにNGINX をデプロイすることに成功しました。