Kubernetes(K8s)クイック学習ガイド
Kubernetes(K8sとも略されます)は、コンテナ化されたアプリケーションとワークロードのデプロイ、スケーリング、管理を自動化し、オーケストレーションするためのオープンソースプラットフォームです。オンプレミス、クラウド、エッジなど、あらゆる環境でコンテナとして稼働するアプリケーションに、柔軟性、拡張性、信頼性、高可用性、可搬性を備えたコンピューティングインフラストラクチャを提供します。
Kubernetesとは
Kubernetesは、デプロイ、負荷分散、水平スケーリング、ロールアウトとロールバック、自己修復など、コンテナ化されたワークロードを大規模に管理する際の一般的なタスクを自動化します。
多くの組織が、一部または大半のアプリケーションでKubernetesをすでに本番環境に導入しており、導入を検討中の組織もあります。広く普及したことで、Kubernetesはコンテナのオーケストレーションと管理における事実上の標準となっています。
Kubernetesのメリット
Kubernetesは、次のような点で役立つため、急速に導入が進んでいます。
- アプリケーションのリリースライフサイクルを迅速化・簡素化
- パブリック、プライベート、ハイブリッドクラウド、およびマルチクラウド環境間でワークロードを移行可能にする
- リソース利用効率を向上
- スケーラビリティを確保し、本番環境への移行準備を整えやすくする
- ビジネスSLAを満たすように環境を最適化
Kubernetesとマイクロサービス
従来のモノリシックアプリケーションを、疎結合された小規模な構成要素である「マイクロサービス」へとリファクタリングすることで、アプリケーションの新機能やアップデートをより迅速にリリースし、容易にスケールできるようになるため、ビジネスアジリティの向上に役立ちます。クラウドネイティブなマイクロサービスアーキテクチャの導入に伴い、基盤となるコンピューティングインフラストラクチャも進化させる必要があります。そのため、マイクロサービスを実行する最も効率的な方法の1つとして、物理システムや仮想マシンからコンテナへの移行が進んでいます。
マイクロサービスとコンテナの数が増えるにつれて、コンテナ管理を自動化する必要性も高まります。そこで活躍するのがKubernetesです。
Kubernetesとは
Kubernetes(K8sとも略されます)は、コンテナ化されたアプリケーションとワークロードのデプロイ、スケーリング、管理を自動化し、オーケストレーションするためのオープンソースプラットフォームです。オンプレミス、クラウド、エッジなど、あらゆる環境でコンテナとして稼働するアプリケーションに、柔軟性、拡張性、信頼性、高可用性、移植性を備えたコンピューティングインフラストラクチャを提供します。
Kubernetesは、デプロイ、負荷分散、水平スケーリング、ロールアウトとロールバック、自己修復など、コンテナ化されたワークロードを大規模に管理する際の一般的なタスクを自動化します。
多くの組織が、一部または大半のアプリケーションですでにKubernetesを本番環境に導入しており、導入を検討している組織もあります。その普及により、Kubernetesはコンテナのオーケストレーションと管理における事実上の標準となっています。
Kubernetesのメリット
Kubernetesは、次のような点で役立つため、急速に導入が進んでいます。
- アプリケーションのリリースライフサイクルを迅速化・簡素化
- パブリック、プライベート、ハイブリッドクラウド、およびマルチクラウド環境間でワークロードのポータビリティを実現
- リソース利用効率を向上
- スケーラビリティを確保し、本番環境への移行準備を整えやすくする
- ビジネスSLAを満たすように環境を最適化
Kubernetesとマイクロサービス
従来のモノリシックアプリケーションを、マイクロサービス(https://www.f5.com/glossary/microservices-architecture)と呼ばれる、より小さく疎結合な構成要素へリファクタリングすることで、アプリケーションの新機能やアップデートをより迅速にリリースし、容易にスケールできるようになるため、ビジネスアジリティの向上につながります。クラウドネイティブなマイクロサービスアーキテクチャの導入に伴い、基盤となるコンピューティングインフラストラクチャも進化させる必要があります。そのため、マイクロサービスを実行する最も効率的な方法の1つとして、物理システムや仮想マシンからコンテナへの移行が進んでいます。
マイクロサービスとコンテナの数が増えるにつれて、コンテナ管理を自動化する必要性も高まります。そこで活躍するのがKubernetesです。
KubernetesとDockerの比較
Kubernetesは、コンテナ化されたアプリケーションを大規模にオーケストレーションして実行します。ただし、アプリケーションコードを配布および実行可能なコンテナ形式にパッケージ化する手段は提供しません(コンテナイメージには、アプリケーションコードのほか、必要なランタイム、ライブラリ、その他のソフトウェア依存関係が含まれます)。Podを実行するには、各ノードにコンテナランタイムをインストールする必要もあります。Kubernetesは当初、コンテナランタイムとしてDocker Engineを使用していました。しかし、Kubernetes 1.24以降、コンテナランタイムはContainer Runtime Interface(CRI)に準拠する必要がありますが、Docker Engineは準拠していません。広く利用されているCRI準拠のコンテナランタイムには、CRI-Oとcontainerd(元はDockerプロジェクト)があります。
アプリをコンテナにパッケージ化するには、Dockerのようなツールが必要です。Dockerは、コンテナ化されたアプリのビルド、共有、実行に広く利用されているツールの1つです。アプリを、オンプレミスやクラウド(Kubernetes環境を含む)ですぐに実行、デプロイできるポータブルなコンテナイメージにパッケージ化する作業を効率化、自動化します。Dockerでパッケージ化されたコンテナは、containerdおよびCRI-Oランタイム上でネイティブに実行できます。
Kubernetesアーキテクチャ
Kubernetesプラットフォームは、クラスターとして相互に接続され、プールされたコンピューティングリソースを共有するノードで構成されます。各クラスターは、Kubernetesアーキテクチャにおけるデプロイ可能な最小単位であるPodを管理します。Podには、1つ以上のアプリコンテナが含まれます。複数のPodをグループ化してサービスを構成します。Kubernetesクラスター内のアプリには、外部から複数の方法でアクセスできます。その中でも、Ingressコントローラーは特に広く利用されている効率的な方法の1つです。
Kubernetes環境のコンポーネントを詳しく見ていきましょう。
Kubernetes Pod
Kubernetes Podは、Kubernetesにデプロイできる最小の実行単位です。Podは、アプリのコンテナイメージ(複数の場合もあります)の「仮想ホスト」として機能し(従来のアプリにおける物理サーバーや仮想マシンに相当)、同じコンピューティング、ストレージ、ネットワーキングのリソースを共有する1つ以上のコンテナをカプセル化します。そのため、これらのコンテナは比較的密に結合されていると考えられます。PodはKubernetesノードにデプロイされ、実行されます。
Kubernetesノード
Kubernetesノードは、コンピューティングインフラストラクチャの最小単位です。ノードには仮想マシンまたは物理サーバーを使用でき、Podのデプロイ、実行、スケーリング、管理に必要なプロセッサ、メモリ、ストレージ、ネットワークリソースを割り当てます。複数のノードを結合してクラスターを構成します。
Kubernetesクラスター
Kubernetesクラスターは、プールされたコンピューティングリソースをPod間で共有するノードのグループです。クラスターには、次の2種類のノードがあります。
- ワーカーノード:Pod内のコンテナ化されたアプリを実行
- マスターノード:ワーカーノードとPodをオーケストレーションおよび管理するKubernetesコントロールプレーンを実行
通常、Kubernetesクラスターでは、高可用性と耐障害性を確保するため、各タイプのノードが複数存在します。
Kubernetesデプロイメント
Kubernetesデプロイメントは、クラスター内でPodのレプリカ(またはインスタンス)のセットとしてアプリを実行する方法を記述します。デプロイメントでは、以下を定義します。
- 実行するPodレプリカの数
- Podの更新を段階的にロールアウトする方法
- Podレプリカを以前の状態にロールバックする方法
- Podレプリカを水平方向にスケーリングする方法
Kubernetesにおけるアプリ接続
KubernetesはIPv4/IPv6デュアルスタックをサポートし、クラスター内で実行されるコンテナ化アプリにネットワーク接続を提供します。Kubernetesクラスター内のアプリとの通信、およびクラスター内のサービス間通信は、レイヤー4(IPアドレス、ポート)とレイヤー7(ホスト名、統一資源識別子[URI])で管理され、ルーティング、負荷分散、セキュリティ、監視、可視化の機能が含まれます。
Kubernetesネットワーキング
In the Kubernetesネットワークモデルでは、各Podに、クラスターのプライベートアドレスプールから一意のIPアドレスが動的に割り当てられます。同じクラスター内のすべてのノードで実行されるすべてのPodは、同じIPネットワークに属し、そのネットワークを介して相互に通信できます。Pod内の複数のコンテナは、ループバックインターフェースを介して相互に通信します。
Kubernetesサービス
Kubernetesサービスは、クラスター内で1つ以上のPodとして実行されているアプリまたはマイクロサービスを、ネットワーク経由でアクセス可能にします(「公開」します)。Kubernetesサービスは、Webサービスの提供など、同じ機能を実行する指定されたPodを論理グループとしてまとめ、アプリを表します。サービス内のすべてのPodには、同じセレクター(またはラベル)が適用され、そのサービスに属していることが示されます。Kubernetesは、新しいPodがデプロイされたり、実行中のPodが終了したりする際に、ラベルを使用してサービスに属するPodの集合を追跡します。
Kubernetesサービスは、定義された接続ポリシーに従ってクラスター内で相互に通信できます。また、Ingressコントローラーなどを使用して、クラスター外部からアクセスできるようにすることも可能です。
Kubernetes Ingress
Kubernetes Ingress APIの一部であるIngressオブジェクトを使用すると、HTTPなどのレイヤー7(アプリケーション層)プロトコルを介して、Kubernetes上で稼働するアプリケーションを外部に公開できます。IngressゲートウェイとIngressコントローラーは、Ingressオブジェクトを制御し、ユーザーとアプリケーション間の通信(ユーザーからサービスへの接続、またはノースサウス接続)を管理するためのツールです。
Ingressオブジェクトは、その設計上、カスタマイズされたリクエスト処理ポリシーへの対応が限定されています。たとえば、セキュリティポリシーを定義してIngressオブジェクトに適用することはできません。そのため、多くのベンダーは、変化する顧客要件に対応するために、カスタムリソース定義(CRD)を使用してIngressコントローラーの機能を拡張しています。
たとえば、NGINX Ingress Controllerは、KubernetesクラスターのエッジにおけるAPIゲートウェイ、ロードバランサー、Ingressの各機能について、パフォーマンス、レジリエンス、稼働時間、セキュリティ、オブザーバビリティを強化するために、カスタムリソース(VirtualServer、VirtualServerRoute、TransportServer、Policy)を定義しています。
NGINXは、通信の高速性、信頼性、セキュリティを確保するため、負荷分散、認証、認可、アクセス制御、暗号化、可観測性、トラフィック分割(サーキットブレーカー、A/Bテスト、ブルーグリーンデプロイおよびカナリアデプロイ)の各サービスを提供します。また、アプリを頻繁にリリースできるよう、NGINXカスタムリソースにより、マルチテナント環境の開発チームとDevOpsチーム全体でセルフサービス型のガバナンスを実現できます。
Kubernetes Gateway API
The Gateway APIは、Kubernetesにおけるサービスネットワーキングの改善と標準化を目的としたオープンソースプロジェクトです。Kubernetesコミュニティが管理するGateway API仕様は、Kubernetes Ingress APIを発展させたもので、リクエスト処理に関するきめ細かなポリシーの定義や、複数のチームおよびロールへの設定管理権限の委譲など、本番環境におけるIngressリソースの制約を解消することを目的としています。
NGINXによるGateway APIの実装について詳しくは、ブログ記事「NGINX Gateway Fabricについて知っておくべき5つのこと」をご覧ください。
サービスメッシュ
A サービスメッシュは、Kubernetesクラスター内のサービス間通信(サービス間接続またはEast-West接続)を制御するインフラストラクチャレイヤーです。サービスメッシュの代表的なユースケースには、K8sクラスター内のサービス間通信におけるmTLS認証と暗号化、および可観測性の確保があります。
統合アプリケーションデリバリーの詳細については、Ingressコントローラーとサービスメッシュのユースケースを1つのツールに効果的に統合するよう設計された「NGINX Gateway Fabric」をご紹介する、F5ブログの記事「NGINX Gateway Fabricバージョン1.0の発表」をご覧ください。
Kubernetesセキュリティ
Kubernetesセキュリティは、インフラストラクチャ(オンプレミスおよびクラウドのコンピューティングリソース、ネットワーク通信、管理プレーン)と、Kubernetesクラスター内で実行されるアプリケーションを保護するための多層的なアプローチです。
インフラストラクチャを保護するには、クラウドおよびオンプレミス環境の実装を保護するための一般的なセキュリティに関する推奨事項、チュートリアル、ベストプラクティスに従ってください。
アプリケーションのセキュリティを確保するには、エッジおよびKubernetesクラスター内に強固なセキュリティ制御を実装し、クラスターとの間およびクラスター内のすべての通信に対して、認証、認可、アクセス制御、暗号化、監視、可視化を提供します。必要に応じて、Webアプリケーションファイアウォールとサービス拒否攻撃対策も導入します。
Kubernetesのセキュリティ確保について詳しくは、F5のブログ記事「トラフィック管理ツールを使用してKubernetesを保護する6つの方法」をご覧ください。
本番環境でのKubernetes
Kubernetesの導入初期には、Do-It-Yourself(DIY)方式が主流でした。しかし、多くの組織にとって、この方式は複雑で、構築や運用が困難です。そのため、本番環境への導入では、さまざまなテクノロジーコンポーネントを統合して保守ライフサイクルを簡素化し、ハイブリッド環境やマルチクラウド環境に展開できる、クラウド管理型Kubernetesプラットフォームやパッケージ化済みのKubernetesディストリビューションが採用されています。
マネージド型およびパッケージ済みのKubernetesプラットフォームの例を以下に示します。
クラウド管理型Kubernetes:
- Amazon Elastic Kubernetes Service (EKS)
- Microsoft Azure Kubernetes Service (AKS)
- Google Kubernetes Engine (GKE)
パッケージ済みのKubernetesディストリビューション:
NGINXがどのように役立つか
NGINXのKubernetesネイティブな接続およびセキュリティスタックは、オンプレミス、クラウド、エッジで稼働するKubernetesアプリケーションの複雑さを軽減し、稼働時間を向上させ、大規模環境でも詳細なリアルタイムの可視性を提供することで、顧客体験の向上を支援します。
Connectivity Stack for Kubernetes – ハイブリッドおよびマルチクラウド環境全体でKubernetesアプリを最適化、スケーリング、保護します。
- NGINX Ingress Controller – 分散したKubernetes環境全体で、ビジネスSLAの向上を支援し、大規模なアプリの健全性とパフォーマンスに関するインサイトを提供する、統合型APIゲートウェイ、ロードバランサー、Ingressコントローラーです。
- NGINX Gateway Fabric – ハイブリッドおよびマルチクラウドのKubernetes環境全体で、アプリ、サービス、APIの接続を効率化する統合アプリケーションデリバリーファブリックです。
- NGINX App Protect – アプリとAPIをレイヤー7攻撃から保護するために設計された、包括的なWAFセキュリティおよびサービス拒否(DoS)攻撃対策ソリューションです。
まずは、NGINX App Protect WAFおよびDoSを搭載したNGINX Ingress Controllerの30日間無料トライアルをお申し込みください。

