概要: 本記事では、Kubernetes環境における外部アクセス制御の要となるNginx Ingressや次世代のGateway API、永続ストレージとしてのNFSについて解説します。また、運用効率とセキュリティを高めるGarbage CollectionやGatekeeperによるガードレール設定も網羅し、堅牢なKubernetesインフラ構築・運用の実践的な知見を提供します。
Kubernetesインフラの基盤:Nginx IngressとNFS、Gateway APIの全体像
現代インフラにおけるKubernetesの圧倒的な存在感
現代のインフラストラクチャにおいて、Kubernetesはデファクトスタンダードとしての地位を確立しています。Cloud Native Computing Foundation(CNCF)の調査によると、2025年6月時点では、現代のインフラにおけるKubernetesの利用率は実に93%に達しています。さらに、コンテナユーザーにおけるKubernetesの本番環境利用率は、2026年2月時点で82%に上り、その安定性と信頼性が広く認知されていることが伺えます。これは、マイクロサービスアーキテクチャやクラウドネイティブ開発が主流となる中で、アプリケーションのデプロイ、管理、スケーリングを効率的に行うための不可欠なツールとなっている証拠と言えるでしょう。Kubernetesを導入することで、開発者はインフラの複雑さから解放され、ビジネスロジックに集中できる環境を構築できます。
IngressからGateway APIへの進化と移行の必要性
Kubernetesにおける外部トラフィック管理の中心は、これまでIngressコントローラー、特にNginx Ingress Controllerが広く利用されてきました。しかし、その機能拡張はアノテーションに依存し、設定が複雑になりがちでした。これに対し、Kubernetesコミュニティは次世代のトラフィック管理仕様としてGateway APIを推進しています。Gateway APIは、インフラ管理者、クラスタ運用者、アプリ開発者の役割を明確に分離し、移植性と拡張性を大幅に向上させます。Kubernetesのアナウンスによれば、Ingress-NGINXは2026年3月に廃止が予定されており、Gateway APIへの移行は待ったなしの状況です。円滑な移行のために、今からその仕組みと導入計画を理解しておくことが極めて重要となります。
NFSを利用した永続ストレージ管理の基礎
Kubernetes環境でステートフルアプリケーションを稼働させる上で、データの永続性は避けて通れない課題です。NFS(Network File System)は、Linux環境で広く利用されている分散ファイルシステムであり、Kubernetes環境においても永続ストレージの選択肢の一つとして有効です。Kubernetesは、PersistentVolume (PV) および PersistentVolumeClaim (PVC) APIを通じてストレージのライフサイクルを管理し、Podからストレージの実体を抽象化します。これにより、アプリケーションが特定のストレージに直接依存することなく、動的にストレージをプロビジョニングし、利用することが可能になります。NFSをバックエンドとするCSI(Container Storage Interface)プロビジョナーを導入することで、クラスタ内でNFS共有を簡単に利用できるようになり、データベースやファイル共有など、永続的なデータが必要なワークロードをサポートします。
出典:Cloud Native Computing Foundation, Kubernetes Gateway API
Nginx Ingress ControllerとNFS CSIプロビジョナーの導入ステップ
Nginx Ingress Controllerの基本的な導入手順
Nginx Ingress ControllerをKubernetesクラスタに導入する第一歩は、HelmチャートまたはYAMLマニフェストを利用することです。多くのユーザーは、設定の柔軟性と管理の容易さからHelmチャートを選択します。まず、Ingress-NGINXリポジトリをHelmに追加し、その後helm installコマンドでコントローラーをデプロイします。この際、必要なServiceType(LoadBalancer、NodePortなど)や特定の設定(TLS終端、アクセスログなど)をvalues.yamlファイルでカスタマイズできます。デプロイ後、Ingressリソースを定義することで、外部からのHTTP/HTTPSトラフィックをクラスタ内のサービスにルーティングできるようになります。この設定により、アプリケーションへの外部アクセスポイントを効果的に管理し、ロードバランシングやTLS証明書の管理を一元化することが可能です。
NFS CSIプロビジョナーのセットアップとStorageClass定義
NFSをKubernetesの永続ストレージとして利用するには、NFS CSI(Container Storage Interface)プロビジョナーをクラスタに導入します。これは通常、Helmチャートを使用して簡単に行えます。プロビジョナーがデプロイされると、KubernetesはNFS共有を動的にプロビジョニングできるようになります。次に、NFS StorageClassを定義することが重要です。このStorageClassは、NFSサーバーのアドレスやエクスポートパスなどの情報を指定し、PVCが要求された際にどのような特性を持つPVを生成するかをKubernetesに伝えます。例えば、accessModes: ReadWriteManyを設定することで、複数のPodが同時に同じNFSボリュームに読み書きできるようになります。このStorageClassをアプリケーションのPVCで参照することで、開発者はストレージの具体的な実装を意識することなく、永続ボリュームを要求できます。
アプリケーションPodから永続ボリューム(PVC)を利用する
NFS CSIプロビジョナーとStorageClassが設定されたら、アプリケーションPodからNFSベースの永続ボリュームを利用する準備が整います。アプリケーションはまず、PersistentVolumeClaim (PVC) を作成します。このPVCでは、必要なストレージ容量や、先ほど定義したNFS StorageClassの名前を指定します。Kubernetesは、このPVCの要求に基づいて、NFS CSIプロビジョナーを介してNFS共有上にPersistentVolume (PV) を動的に作成し、PVCにバインドします。最後に、アプリケーションのPod定義内で、このPVCを参照する形でボリュームをマウントします。これにより、Podが再起動したり、別のノードにスケジュールされたりしても、データがNFS共有上に永続化され、アプリケーションのステートを維持できるようになります。このプロセスは、データベースやCMSなど、永続的なデータストレージを必要とするワークロードにとって不可欠です。
Gateway APIによるトラフィック管理とNFS StorageClassの応用例
Gateway APIで実現する高度なトラフィックルーティング
Gateway APIは、従来のIngressよりも高度なトラフィック管理機能を提供し、クラスタ運用者と開発者の協調を促進します。Gateway APIは主に「GatewayClass」「Gateway」「HTTPRoute」などのリソースで構成されます。インフラ管理者はGatewayClassとGatewayを定義し、クラスタ外部からのエントリポイントと基本的なルーティングポリシーを確立します。アプリケーション開発者は、HTTPRouteリソースを使用して、特定のパス、ホスト名、ヘッダーに基づいたきめ細やかなトラフィックルーティングルールを設定できます。これにより、カナリアデプロイメント、A/Bテスト、リクエストヘッダーベースのルーティングなど、複雑なトラフィック制御を標準リソースで実現可能です。特に、異なるチームがそれぞれのアプリケーションのルーティングを独立して管理できるため、大規模なマルチテナント環境での運用効率が向上します。
- GatewayClass: Gatewayのタイプを定義するクラスタスコープのリソース。
- Gateway: 外部トラフィックを受け入れる具体的なエントリポイント。ロードバランサーやプロキシに対応。
- HTTPRoute/TCPRoute/UDPRoute: Gatewayにバインドされ、実際のトラフィックルーティングルールを定義。
NFS StorageClassと動的プロビジョニングの活用
NFS StorageClassを適切に定義することで、Kubernetes環境におけるストレージ管理はさらに効率化されます。動的プロビジョニングは、開発者がPVCを要求するだけで、必要なPVが自動的に作成されるメカニズムです。これにより、ストレージ管理者が手動でPVを作成する手間を省き、開発者は必要な時に必要な容量のストレージを迅速に利用できます。NFS StorageClassの応用例としては、例えば、テスト環境用と本番環境用で異なるパフォーマンス特性やバックアップポリシーを持つNFSボリュームをプロビジョニングすることが考えられます。また、ReadWriteMany (RWX) アクセスモードを活用することで、複数のPodが同時に同じボリュームにアクセスできるようになり、多くのマイクロサービスアプリケーションで共有ストレージが必要なケースに最適です。これにより、アプリケーションの可用性と柔軟性が向上します。
IngressからGateway APIへのスムーズな移行戦略
既存のIngressベースの環境からGateway APIへ移行する際には、計画的なアプローチが不可欠です。まず、現在のIngress設定を詳細に分析し、Gateway APIのどのリソース(Gateway, HTTPRouteなど)にマッピングできるかを検討します。Kubernetesコミュニティからは、既存のIngressリソースをGateway APIリソースに変換するIngress2Gatewayのような支援ツールも提供されています。このツールを活用することで、変換作業を効率化できる可能性があります。ただし、ツールによる変換後も、実際のトラフィックを流す前に、必ずテスト環境で徹底的な検証を行うことが不可欠です。特に、ルーティングルール、TLS設定、認証認可の動作などを慎重に確認し、段階的に本番環境への移行を進めることで、ダウンタイムを最小限に抑え、安全な移行を実現できます。
出典:Kubernetes Gateway API, Kubernetes
Kubernetes運用で注意すべきNFSパフォーマンスとポリシー制御
NFSにおけるパフォーマンス課題と最適化のポイント
Kubernetes環境でNFSを永続ストレージとして利用する場合、パフォーマンスの課題に直面することがあります。NFSはネットワークを介したファイルアクセスであるため、ネットワーク帯域、NFSサーバーのI/O性能、およびクライアント側の設定がボトルネックとなる可能性があります。特に、書き込み処理が多いアプリケーションや、多数のPodが同時に同じボリュームにアクセスする場合、I/O待ちが発生しやすくなります。これを最適化するためには、まずNFSサーバー側のチューニングが重要です。高性能なストレージの利用、サーバーのリソース確保、NFSプロトコルの適切なバージョン選択などが挙げられます。また、Kubernetes側では、Podのリソース制限(CPU, メモリ)を適切に設定し、過剰な負荷がNFSサーバーに集中しないように調整することも有効です。アプリケーションレベルでのキャッシュ活用もパフォーマンス改善に寄与します。
Garbage Collectionによるクラスタ健全性の維持
Kubernetesクラスタの健全性を維持し、リソースの無駄遣いを防ぐ上で、Garbage Collection(ガベージコレクション)は非常に重要な仕組みです。Kubernetesは、Owner References(所有者参照)やFinalizers(ファイナライザー)といったメカニズムを用いて、不要になったPod、Job、未使用コンテナ、 orphanedリソースなどを自動的にクリーンアップします。例えば、Deploymentが削除されると、それに関連するReplicaSetやPodも自動的に削除されます。この自動クリーンアップ機能が適切に機能しないと、クラスタ内に使われていないリソースが残り続け、リソースの枯渇や予期せぬ挙動を引き起こす可能性があります。定期的にクラスタのリソース状況を監視し、Garbage Collectionが期待通りに動作しているか確認することで、安定したKubernetes運用を継続できます。
- 現在のIngress設定(アノテーション含む)を完全に把握していますか?
- Gateway APIの各リソース(GatewayClass, Gateway, HTTPRoute)の役割を理解していますか?
- Ingress2Gatewayなどの移行支援ツールの利用を検討していますか?
- テスト環境での詳細な検証計画を策定していますか?
- 段階的な移行戦略(例: 一部トラフィックのみGateway API経由)を検討していますか?
Gatekeeperを用いたポリシー制御とセキュリティ強化
Kubernetesクラスタのセキュリティと標準化を強化するためには、Gatekeeperのようなポリシーエンジンを活用することが効果的です。Gatekeeperは、Open Policy Agent (OPA) をベースとしたAdmission Controllerであり、Kubernetesリソースの作成、更新、削除の際にカスタムポリシーを適用できます。これにより、「特権コンテナの利用禁止」「特定のイメージレジストリからのデプロイのみ許可」「Ingressに特定のTLS設定を強制」といったルールをコードとして定義し、クラスタ全体に強制することが可能です。Gatekeeperを導入することで、セキュリティリスクのある設定のデプロイを未然に防ぎ、クラスタ構成の一貫性を保ちます。これは、クラウドネイティブ化に伴う運用負荷の増大や、セキュリティリスクの増加という課題に対して、強力なガードレールとなるでしょう。
出典:Kubernetes
【ケース】Nginx IngressとNFS課題をGateway API・Gatekeeperで改善
架空のケース:既存Nginx Ingress環境における課題
ここでは、架空の企業「アルファテック」のKubernetes環境を想定します。アルファテックでは、長らくNginx Ingress ControllerとNFS CSIプロビジョナーを利用してWebアプリケーションを運用してきました。しかし、運用チームは複数の課題に直面していました。まず、複雑なルーティングルールやA/Bテストを実施しようとすると、Ingressのアノテーションが肥大化し、可読性とメンテナンス性が著しく低下していました。次に、NFSのパフォーマンスが、特定の時間帯にファイルI/Oのボトルネックとなり、Webアプリケーションの応答速度が低下するという問題です。さらに、開発チームが自由にNFSボリュームを作成できるため、不適切なアクセスモードや容量でプロビジョニングされることがあり、セキュリティリスクやリソースの無駄遣いが発生していました。
Gateway APIによるトラフィック管理の改善策
アルファテックは、これらの課題解決のため、Nginx IngressからGateway APIへの移行を決定しました。まず、Nginx Ingress Controllerが担当していた外部からのトラフィック受付をGateway APIのGatewayリソースに移行し、L4/L7のトラフィック管理をGateway APIで一元化しました。これにより、アプリケーション開発チームはHTTPRouteリソースを使用して、それぞれのサービスのルーティングルールをより直感的かつ独立して定義できるようになりました。例えば、特定のユーザーからのリクエストを新バージョンのサービスに振り分けるカナリアリリースも、HTTPRouteのWeight設定だけで容易に実現できました。これにより、アノテーションによる複雑な設定が排除され、ルーティング設定の可読性とチーム間の協調性が大幅に改善されました。
Gatekeeperを活用したNFS StorageClassのポリシー制御
NFSに関する課題に対しては、Gatekeeperを導入し、ポリシー制御を強化しました。具体的には、Gatekeeperで「NFS StorageClassを使用するPersistentVolumeClaim (PVC) は、特定のサイズ範囲内であること」や「ReadWriteManyアクセスモードは特定の名前空間でのみ許可すること」といったカスタムポリシーを設定しました。これにより、開発チームが意図せず、過大なNFSボリュームをプロビジョニングしたり、セキュリティ上問題のある共有設定を行ったりすることを未然に防ぐことができました。Gatekeeperによってクラスタに「ガードレール」を設けたことで、リソースの無駄遣いを抑制しつつ、セキュリティリスクを大幅に低減。運用チームは、手動でのチェック作業から解放され、より戦略的なインフラ改善に注力できるようになりました。これにより、NFSの乱用が減少し、パフォーマンス安定化の一助となりました。
まとめ
よくある質問
Q: KubernetesにおけるNginx Ingressの役割は何ですか?
A: Nginx Ingressは、Kubernetesクラスター外部からのHTTP/HTTPSトラフィックをサービスにルーティングするためのコントローラーです。ロードバランシングやSSLターミネーション機能を提供し、外部からのアクセスを効率的に管理します。
Q: NFSをKubernetesの永続ストレージとして使うメリットは?
A: NFSはKubernetesで共有永続ストレージとして利用でき、複数のPodから同時に同じデータへアクセス可能です。CSIプロビジョナーと組み合わせることで、ストレージの動的な確保と解放を自動化し、運用の手間を削減できます。
Q: Kubernetes Gateway APIはIngressとどう違いますか?
A: Gateway APIはIngressの後継となる標準APIで、より柔軟で表現力豊かなルーティング制御を提供します。役割分離を促進し、Ingressでは難しかった高度なトラフィック管理やポリシー適用を可能にします。
Q: GatekeeperをKubernetesに導入する目的は何ですか?
A: Gatekeeperは、Kubernetesクラスター内のリソース設定に対してカスタムポリシーを適用し、セキュリティや運用の一貫性を保つためのアドミッションコントローラーです。不適切な設定のデプロイを未然に防ぎ、ガードレールとして機能します。
Q: KubernetesでNFS CSI Provisionerを活用する利点は?
A: NFS CSI Provisionerは、PersistentVolumeClaim (PVC) リクエストに応じて、動的にNFS共有ボリュームをプロビジョニングします。手動でのボリューム作成が不要になり、ストレージ管理の自動化と効率化を実現します。
