2022年6月16日
Continuous Delivery
このチュートリアルでは、4つのKubernetesサービスタイプの違いと、アプリケーションに最適なサービスタイプをどのように選択すべきかを説明します。
Kubernetesは、クラウドネイティブなアプリケーションを管理・拡張するための強力なツールとして登場しました。企業は、ダウンタイムゼロを維持するために、拡張性が高く、常に利用可能な機能を活用して、ソフトウェアを迅速にデプロイする必要があります。より多くのアプリケーションがコンテナ化され、デプロイされるにつれて、これらのコンテナを管理することは、どの組織にとってもますます複雑になっています。そのため、拡張性が問題になります。そこで注目されるのがKubernetesです。Kubernetesを使えば、アプリケーションの自動化、デプロイ、拡張、監視を簡単に行えます。
Kubernetesのサービスやネットワーキングに関するドキュメントを読んだことがあれば、ClusterIP、NodePort、LoadBalancer、Ingressという用語に出くわしたことがあるのではないでしょうか。これらの用語については多くの混乱があるようです。次のKubernetesベースのアプリケーションの構築を始める前に、その違いを理解する必要があります。
このチュートリアルでは、これら4つのKubernetesサービスタイプの違いと、アプリケーションに最適なサービスタイプをどのように選択すべきかを説明します。
Kubernetesのネットワーキングとサービスは、複雑なトピックです。Kubernetesへのデプロイを成功させるためには、アプリケーションのニーズを理解する必要があります。つまり、提供したいサービスの種類、クラスターのサイズと場所、アプリケーションが受け取ることを想定しているトラフィックの種類を理解することです。
Kubernetesがサポートするサービスは4種類あります。ClusterIP、NodePort、LoadBalancer、Ingressの4つです。それぞれ、アプリケーションで有効にするための要件があるので、デプロイ前にどれが必要かを理解する必要があります。
例えば、NodePortを使用すると、同じノード内のPod同士が、IPアドレスを割り当てられることなく通信することができます。このタイプのネットワーク通信が正しく動作するためには、Kubernetesクラスターには少なくとも2つのノードが必要です。また、外部からのアクセスが可能なLoadBalancersやIngressとは異なり、NodePortはクラスター内部からアクセスした場合のみ機能します。それぞれの仕組みを理解するために見ていきましょう。
ClusterIPは、クラスター内の複数のPodの通信を可能にするデフォルトのサービスです。手動で定義しない場合、デフォルトでは、サービスはClusterIP上で公開されます。ClusterIPは外部からアクセスすることはできません。しかし、Kubernetesプロキシーを使用すればサービスにアクセスすることができます。このサービスタイプは、サービスのデバッグや内部ダッシュボードの表示など、ワークロード間の内部ネットワークに使用されます。
NodePortは最もシンプルなネットワーキングのタイプです。設定は不要で、単にホスト上のランダムなポートのトラフィックをコンテナ上のランダムなポートにルーティングします。これはほとんどのケースに適していますが、いくつかの欠点もあります。
それでも、実験中や、デモ、POC、社内研修など、トラフィックルーティングがどのように機能するかを示すための一時的な使用例では、NodePortを使用することができます。実運用環境では、NodePortを使用してサービスを公開しないことをお勧めします。
LoadBalancerは、Kubernetesのネットワーキングに最もよく使われるサービスタイプです。これは標準的なロードバランサーサービスで、各Pod上で実行され、インターネットなどのネットワーク、またはデータセンター内の外部との接続を確立します。
ロードバランサーは、アップしているPodへの接続をオープンにしておき、ダウンしているPodへの接続をクローズします。これは、AWSのELBやAzureのApplication Gatewayと同じようなものです。上りはHTTP(S)トラフィックに対してレイヤー4のルーティングを提供し、下りはHTTP(S)トラフィックに対してレイヤー7のルーティングを提供します。
宛先ポート番号、プロトコル、ホスト名でトラフィックをルーティングしたり、アプリケーションラベルを使用することができます。このサービスタイプには、HTTP、TCP、UDP、Grpcなど、ほとんど全ての種類のトラフィックを送ることができます。この方法を使用して、サービスを直接公開します。
Ingressは公式のKubernetesサービスとは見なされていませんが、サービスを公開するために使用することができます。どのインバウンド接続がどのサービスに到達すべきかを定義するルールを作成することで、Ingressサービスを設定することができます。
Ingressは、複数のサービスの前に位置し、インテリジェントなルーターとして機能するKubernetesオブジェクトです。外部トラフィックがクラスターサービスに到達する方法を定義し、インバウンド接続がクラスター上のサービスに到達することを許可する一連のルールを設定するものです。
Ingressのルールは通常、アノテーションで定義されます。Ingressコントローラーはこれらのアノテーションを読み取り、それに応じてiptablesやNGINXを設定します。Ingressコントローラーには、さまざまな機能を持つ多くの種類があります。Ingressコントローラーの一覧はこちらでご覧いただけます。
Ingressは、サービスを公開するために使われる最も強力なサービスタイプで、ロードバランサーを1つだけ維持すればよいので、LoadBalancerサービスタイプを使うよりも安価で済む場合があります。
ここでは、サービスの種類が一目でわかるように、簡単な比較表を掲載します。
画像引用元:StackOverflow
Kubernetesは、ITインフラストラクチャーを自動化・管理するための強力なツールです。インフラストラクチャーの関連部分をグループ化し、クラスター内の独自の「ノード」を与えることで、管理、監視、更新を容易にする機能を提供します。
Kubernetesの導入が急増していることから、開発者や企業がクラウドネイティブの領域で競争力を発揮するためには、必ず知っておかなければならないプラットフォームとなっています。
Harness Platformは、Kubernetesのデプロイメントを簡単に一気通貫させるための全ての機能を備えています。Harnessには直感的なダッシュボードがあり、デプロイメントステージ、ターゲットインフラ、実行戦略を簡単に設定することができます。今すぐデモをリクエストしてください。
HarnessではKubernetesを集中的に使用しているため、ぜひあなたの旅に参加させてください。これから始めようと思っている方Kubernetesのクイックスタートガイドがありますので、Harness CDを使用して最初のアプリケーションをデプロイするのにお役立てください。
この記事はHarness社のウェブサイトで公開されているものをDigital Stacksが日本語に訳したものです。無断複製を禁じます。原文はこちらです。