2022年6月16日

Continuous Delivery

Kubernetesサービス解説

このチュートリアルでは、4つのKubernetesサービスタイプの違いと、アプリケーションに最適なサービスタイプをどのように選択すべきかを説明します。

62d0eeb581fb9e02042da0a7_04.-Design_Blog-header-15.png

ClusterIP、NodePort、LoadBalancer、Ingressについて理解する

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

62d0ef40c5c447258d6d711d_nik8t90VaFPFx1zTrKdTyqVKXaXQVH8VCeXbcbw-tuxNbJeOOc0SnnqDQakRgOBv_U-0fx1Yu8wE3zdhgoqdJrApfD3OajtagGqyCFHFokxVzRuHtdoqgMZ3Ym07ZXNWaH_o2CM2pXnZRaUdxQ.png

ClusterIPは、クラスター内の複数のPodの通信を可能にするデフォルトのサービスです。手動で定義しない場合、デフォルトでは、サービスはClusterIP上で公開されます。ClusterIPは外部からアクセスすることはできません。しかし、Kubernetesプロキシーを使用すればサービスにアクセスすることができます。このサービスタイプは、サービスのデバッグや内部ダッシュボードの表示など、ワークロード間の内部ネットワークに使用されます。 

NodePort

62d0ef40b4e06c57d1831f61_QH4AYEItl4f3u8URv3WhsEvoxUr19WJgYfrJAW6XSTWvpIA97gBSWj0a5Vlw_JQ1r9Ij5Yrf2aXhDgwzJ6urXWqX684x_kv38mo4HPQecn_5K6CwEfyFJ2bQrO4GBAqwYyTDcXcRDczOz8MzYg.png

NodePortは最もシンプルなネットワーキングのタイプです。設定は不要で、単にホスト上のランダムなポートのトラフィックをコンテナ上のランダムなポートにルーティングします。これはほとんどのケースに適していますが、いくつかの欠点もあります。 

  • ウェブリクエストが正しくルーティングされるように、リバースプロキシー(Nginxなど)を使用する必要がある場合があります。 
  • 1つのポートに公開できるのは1つのサービスのみです。
  • コンテナIPはPod起動のたびに異なるため、DNS解決が不可能になります。 
  • IPが設定されていないため、コンテナはPod外からlocalhostにアクセスできません。 

それでも、実験中や、デモ、POC、社内研修など、トラフィックルーティングがどのように機能するかを示すための一時的な使用例では、NodePortを使用することができます。実運用環境では、NodePortを使用してサービスを公開しないことをお勧めします。 

LoadBalancer

62d0ef40e8be9513ef41a1fc_U6gd-YhKFWe_JDwH0sErpPYGeXFGoSrf40amhCBJAv-bgWmo0EnQR0dtd-3zQQ4E17FooygjPkJnb0gH0az66qLVYCJjiMx1HfLbfv1IwhqqHzwvnmp8d3v_1BMctZ_cOB46dJMo7noOWlcNVg.png

LoadBalancerは、Kubernetesのネットワーキングに最もよく使われるサービスタイプです。これは標準的なロードバランサーサービスで、各Pod上で実行され、インターネットなどのネットワーク、またはデータセンター内の外部との接続を確立します。 

ロードバランサーは、アップしているPodへの接続をオープンにしておき、ダウンしているPodへの接続をクローズします。これは、AWSのELBやAzureのApplication Gatewayと同じようなものです。上りはHTTP(S)トラフィックに対してレイヤー4のルーティングを提供し、下りはHTTP(S)トラフィックに対してレイヤー7のルーティングを提供します。 

宛先ポート番号、プロトコル、ホスト名でトラフィックをルーティングしたり、アプリケーションラベルを使用することができます。このサービスタイプには、HTTP、TCP、UDP、Grpcなど、ほとんど全ての種類のトラフィックを送ることができます。この方法を使用して、サービスを直接公開します。 

Ingress

62d0ef40f0c56e72d9433cc2_EEcT7vHbhMsp-_2JxvxUN0VLIq2rnBGNlPkya_NoHAoURjfY8zMcjI4m6oSASuGbeW8smf_KNx22WVqE_93zExyRnpFTI-Dm7zh4Es-aVU639xZ4YaZCiwtdI1QDzGfTu6NfDtggB4Qphm8gog.png

Ingressは公式のKubernetesサービスとは見なされていませんが、サービスを公開するために使用することができます。どのインバウンド接続がどのサービスに到達すべきかを定義するルールを作成することで、Ingressサービスを設定することができます。

Ingressは、複数のサービスの前に位置し、インテリジェントなルーターとして機能するKubernetesオブジェクトです。外部トラフィックがクラスターサービスに到達する方法を定義し、インバウンド接続がクラスター上のサービスに到達することを許可する一連のルールを設定するものです。 

Ingressのルールは通常、アノテーションで定義されます。Ingressコントローラーはこれらのアノテーションを読み取り、それに応じてiptablesやNGINXを設定します。Ingressコントローラーには、さまざまな機能を持つ多くの種類があります。Ingressコントローラーの一覧はこちらでご覧いただけます。 

Ingressは、サービスを公開するために使われる最も強力なサービスタイプで、ロードバランサーを1つだけ維持すればよいので、LoadBalancerサービスタイプを使うよりも安価で済む場合があります。 

ここでは、サービスの種類が一目でわかるように、簡単な比較表を掲載します。

62d0ef403a9c5f0fad0e77da_PoEsXVj6MJDRbNDFxnP1CdE-K-mamNc_2dBmkMoYAT515tt4LOibXxnBrcg6lHQRWGx_hyVeWdg6um1LU998nNbS87pLctBw_zaAE80ZRtLoFxIDUMpRoO56i8nsLsqN2n-fOCTU9-Oc17fdBQ.png

画像引用元:StackOverflow

結論 クラウドネイティブの世界ではKubernetesが必須

Kubernetesは、ITインフラストラクチャーを自動化・管理するための強力なツールです。インフラストラクチャーの関連部分をグループ化し、クラスター内の独自の「ノード」を与えることで、管理、監視、更新を容易にする機能を提供します。 

Kubernetesの導入が急増していることから、開発者や企業がクラウドネイティブの領域で競争力を発揮するためには、必ず知っておかなければならないプラットフォームとなっています。 

Harness Platformは、Kubernetesのデプロイメントを簡単に一気通貫させるための全ての機能を備えています。Harnessには直感的なダッシュボードがあり、デプロイメントステージ、ターゲットインフラ、実行戦略を簡単に設定することができます。今すぐデモをリクエストしてください。

HarnessではKubernetesを集中的に使用しているため、ぜひあなたの旅に参加させてください。これから始めようと思っている方Kubernetesのクイックスタートガイドがありますので、Harness CDを使用して最初のアプリケーションをデプロイするのにお役立てください。 


この記事はHarness社のウェブサイトで公開されているものをDigital Stacksが日本語に訳したものです。無断複製を禁じます。原文はこちらです。

Harnessに関するお問い合わせはお気軽にお寄せください。

お問い合わせ