Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Setting Up Nginx Ingress Controller with SSL on Kubernetes

2026年09月10日に「Dev.to」が公開したITニュース「Setting Up Nginx Ingress Controller with SSL on Kubernetes」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

KubernetesにNginx Ingress Controllerを導入し、複数のアプリへの外部アクセスをまとめて制御する。cert-managerでLet's Encrypt証明書を発行し、安全なHTTPS通信を実現。商用証明書利用も可能で、アプリを安全に公開できる。

ITニュース解説

Kubernetesは、コンテナ化されたアプリケーションを大規模に、かつ効率的に動かすための強力な基盤システムだ。このKubernetesクラスタ上でウェブアプリケーションを公開する際、外部からのアクセスをどのように管理し、さらに通信を安全に保つかは非常に重要となる。本記事では、この課題を解決するためにNginx Ingress Controllerというツールを使い、さらにSSL/TLS証明書の管理を自動化するcert-managerと組み合わせて、ウェブサービスをHTTPSで公開する一連のプロセスを解説する。システムエンジニアを目指す上で、このようなインフラ構築の知識は不可欠だ。この設定を行うには、まず稼働中のKubernetesクラスタと、それを操作するためのkubectlコマンドラインツール、そしてパッケージ管理ツールであるHelmが準備されている必要がある。加えて、インターネット上に公開するアプリケーションのドメイン名も用意しておかなければならない。

最初のステップは、Nginx Ingress Controllerの導入である。これはKubernetesクラスタの『玄関口』のような役割を担い、外部からのインターネットトラフィックをクラスタ内の適切なサービスへと振り分ける。デプロイにはHelmというKubernetesのパッケージ管理ツールを使用する。Helmを使うと、複雑な設定をひとまとまりにした『チャート』と呼ばれるパッケージを簡単にインストールできる。まず、Nginx Ingress ControllerのHelmリポジトリを追加し、その後最新の状態に更新する。そして、『helm install ingress-nginx ingress-nginx/ingress-nginx』コマンドを実行することで、Nginx Ingress ControllerがKubernetesクラスタ内にデプロイされる。この際、Nginx Ingress Controllerは自動的にクラウドプロバイダのロードバランサーサービスと連携し、外部からアクセス可能なIPアドレスが割り当てられる。この外部IPアドレスが、最終的にインターネットからあなたのアプリケーションに到達するための窓口となる。外部IPの取得には少し時間がかかる場合があるが、このIPアドレスが正しくプロビジョニングされているかを確認することは重要だ。

次に、SSL/TLS証明書の管理を自動化するcert-managerを導入する。ウェブサイトの通信を暗号化するHTTPSを実現するにはSSL/TLS証明書が必要だが、これを手動で取得・更新するのは手間がかかる。cert-managerは、この証明書のライフサイクルをKubernetes上で自動的に管理してくれる便利なツールだ。提供されているYAMLファイルをkubectl applyコマンドで適用するだけで簡単にインストールでき、cert-managerに関連するPodやServiceといったリソースがクラスタ内で動作し始める。これにより、後で発行するSSL証明書が自動的に生成され、期限が近づくと自動で更新されるようになる。

続いて、Nginx Ingress Controllerがトラフィックを転送する対象となる、実際に公開するアプリケーションをデプロイする。このガイドでは、app1とapp2という二つのシンプルなサンプルアプリケーションを使用する。Kubernetesでは、アプリケーションを『Deployment(デプロイメント)』として定義する。Deploymentは、どのコンテナイメージを使うか、いくつ同じアプリケーションのインスタンスを動かすか、といったことを指定するものだ。各アプリケーションのDeploymentをYAMLファイルで作成し、kubectl applyコマンドでクラスタに適用する。これにより、それぞれ『Hello from App1』と『Hello from App2』というテキストを返すシンプルなウェブアプリケーションがクラスタ内で動き出す。しかし、これだけでは外部からアクセスできない。そこで、内部のアプリケーションを公開するために『Service(サービス)』を作成する。Serviceは、Deploymentで作成された複数のアプリケーションインスタンス(Pod)をひとまとめにして、安定したネットワークアクセスポイントを提供する役割を果たす。これも同様にYAMLファイルで定義し、クラスタに適用することで、app1-svcとapp2-svcという二つの内部サービスが利用可能となる。

アプリケーションがKubernetesクラスタ内で動作し、内部サービスとして公開されたら、次にインターネットからのアクセス経路を設定する。そのためにはDNS(Domain Name System)レコードの設定が必要だ。DNSは、人間が覚えやすいドメイン名(例: app1.example.com)を、コンピューターが通信に使うIPアドレス(Nginx Ingress Controllerに割り当てられた外部IPアドレス)に変換する役割を担っている。あなたのドメイン管理サービスで、app1.example.comとapp2.example.comというサブドメインを、Nginx Ingress Controllerの外部IPアドレスに向けたAレコードとして設定する。これにより、ユーザーがブラウザでこれらのドメイン名を入力した際に、Nginx Ingress Controllerにリクエストが届くようになる。

いよいよNginx Ingress Controllerに、どのドメインへのリクエストをどのアプリケーションに転送するかを指示する。これが『Ingress(イングレス)』リソースの役割だ。IngressリソースもYAMLファイルで定義し、app1.example.comへのリクエストはapp1-svcに、app2.example.comへのリクエストはapp2-svcに転送するように設定し、クラスタに適用する。

さらに重要なのが、SSL/TLSによる通信の暗号化、すなわちHTTPS化だ。ウェブサイトを安全に利用するためには、HTTPS通信が必須である。ここでは無料で信頼性の高いSSL/TLS証明書を提供するLet's Encryptを利用する。先ほど導入したcert-managerは、このLet's Encryptから自動的に証明書を取得し、管理する。具体的には、『Issuer(イシュアー)』というcert-managerのリソースを定義する。Issuerは、どの認証局(ここではLet's Encrypt)から、どのような方法で証明書を取得するか、といったポリシーを定めたものだ。このIssuerをクラスタに適用後、Ingressリソースの設定を更新する。更新されたIngressリソースには、どのホスト名に対して、どの証明書(Secret)を使うかを示す『tls』セクションが追加される。cert-managerは、このIngressリソースのtlsセクションの指示に基づき、Let's Encryptと連携して指定ドメインの証明書を自動で取得・生成し、Kubernetesの『Secret(シークレット)』として安全に保存する。Nginx Ingress ControllerはこのSecretを参照してHTTPS通信を有効にするため、ブラウザからアプリケーションにアクセスする際には、安全な通信が保証される。もし既に商用のSSL/TLS証明書を持っている場合は、その証明書と秘密鍵をbase64エンコードし、KubernetesのSecretとして登録することで利用できる。その後、Ingressリソースのtlsセクションで、作成したSecretの名前を指定すれば、Let's Encryptではなく商用証明書が利用されるようになる。

これらの設定が完了すれば、あなたのKubernetesクラスタ上で動作するアプリケーションは、Nginx Ingress Controllerを介して、安全なHTTPS通信でインターネットに公開されることになる。この一連の作業は、現代のWebサービスを公開する上で不可欠な要素であり、システムエンジニアとしてキャリアを築く上での重要な基礎知識となるだろう。設定中に、Nginx 502 Gateway ErrorやLet's Encrypt証明書が発行されないといった問題に直面する可能性もあるが、その際はIngressやIssuerの設定、提供したメールアドレスの有効性、そして関連するログを確認することで、問題の原因を特定し解決できることが多い。

関連コンテンツ

関連IT用語

関連ITニュース