Kubernetes Managed Service Column <Kubernetes運用コラム>

Kubernetes Serviceとは?その役割と用途、設定や運用上の注意点を解説

Category: 入門編

2024.02.06

Kubernetes を活用するために欠かせないKubernetes Serviceについて

Kubernetes とは、多数のコンテナの調整と管理の自動化によりコンテナの統合的な管理を容易にするコンテナ・オーケストレーション・ソフトウェアです。

この記事では、 Kubernetes を活用する上で重要となるコンセプトの一つ Kubernetes Service について、その概要と役割、設定や運用について解説いたします。

1. Kubernetes Service とは?

Kubernetes Service の役割を説明するため、まずアプリケーションと Pod の関係から解説いたします。

Kubernetes 上のクラスタは、アプリケーションを動かす 1 つまたは複数のコンテナを実行する Pod、さらにはそれらの Pod を含む 1 つ以上のノードで構成されています。

Kubernetes Service とは?

全ての Pod はそれぞれ独自の IP アドレスを持っており、その IP アドレスを使ってアプリケーションに直接アクセスすることが可能です。

しかし、Pod は非永続的なオブジェクトのため、スケーリングなどにより破棄と作成が行われ、その際に IP アドレスが変化してしまいます。また、 Pod に直接アクセスする場合、負荷分散を行えないこともあります。

Kubernetes Service は、この問題を解決するために Pod やノードを抽象化し、それらへのアクセスのための単一の仮想 IP を提供します。これにより、 Pod の破棄・作成に関わらずクラスタ上のアプリケーションへの恒常的なアクセスと負荷分散を提供することが可能になります。

Kubernetes Serviceの重要性

Kubernetesは、コンテナ化されたアプリケーションのデプロイやスケーリングを自動化し、大規模システムの運用工数の削減や、障害発生時にロールバック機能によってシステムを復元し、負荷分散によるパフォーマンスの向上など、多くの利点を提供します。これらの利点は、アプリケーションのモダナイゼーションや DX 推進につながります。

Kubernetes Service は、これらのビジネス的に有意義な利点を活かすために、不可欠な要素といえます。

2. Kubernetes Service の用途

Kubernetes Service は、複数の Pod やノードに対する単一のアクセスポイントを提供し、以下3つの主要な用途があります。

クラスタ内部での通信

プライベートな API や、データベースが動作している Pod グループへのアクセスなど、セキュリティの観点から内部アクセスのみ可能とすることが望ましい場合などに使用されます。

外部との通信

Pod グループで稼働している Web アプリケーションをクラスタ外に公開する時などに活用されます。ただし、クライアントはノードの IP アドレスやポート番号を意識する必要があります。

負荷分散

本番環境向けの用途で、外部のロードバランサを利用してサービスを公開する場合に利用されます。この場合、ノードの IP アドレスやポート番号を意識する必要はなくなります。

3. Kubernetes Service の設定と運用の留意点

Service の基本的な設定

Service の設定は YAML 形式の設定ファイルで行います。設定ファイルは Git などのバージョン管理システムで管理し、予期せぬ動作時のロールバックやクラスタの再作成が可能なようにしておきましょう。

また、Serviceの主なタイプ( type )には ClusterIP 、 NodePort 、 LoadBalancer があり適切に設定を行います。

ClusterIP

クラスタ内部での通信を可能にするための設定です。仮想 IP アドレスを Pod グループに割り当て、クラスタ内部での通信を管理します。

NodePort

外部からアクセス可能な仮想 IP アドレスを、各クラスタノードの静的ポートを介して外部に公開するための設定です。この設定により、クラスタ外からアクセスできるようになります。NodePort 設定の際には ClusterIP も同時に作成されます。

LoadBalancer

NodePort と同様に外部からアクセスするための設定であり、外部のロードバランサを構成します。この設定により、クラスタ外部の負荷分散が可能になり、ノードに障害が発生した場合でもクラスタへのアクセスが維持されます。

LoadBalancer

ネットワーキングの留意点

DNS 設定

クラスタ DNS は Kubernetes Service の名前解決を提供する DNS サーバです。このアドオンは、全ての Pod が自動的に Service の名前解決を行えるようにし、 Kubernetes の他の多くの機能も DNS を前提としているので、このアドオンは導入すべきでしょう。

トラフィックルーティング

各ノードで動作するネットワークプロキシ( kube-proxy )が行うトラフィック転送には、異なる方式があります。 user-space 、 iptables 、 IPVS などがあり、それぞれ異なるトラフィック転送の方式を提供します。

負荷分散

LoadBalancer type だけでなく、 ClusterIP type でも内部でロードバランサが動作しています。複数の Pod により構成された ClusterIP type を設定すると、自動的にロードバランサが構成され、複数の Pod への負荷分散が行われます。ヘルスチェックの設定を行えば、障害が発生した Pod を自動的に除外することも可能です。

セキュリティの留意点

可用性の向上

Service の利用により、外部公開サービスの複数 Pod と複数ノードでの構成が可能となります。さらに LoadBalancer type でクラスタ外部のロードバランサを構成すれば、冗長化により可用性の向上を実現できます。

セキュリティポリシー

Kubernetes はデフォルトでクラスタ内の Pod 間通信を制限しません。そのため、セキュリティポリシーを初期段階から設定し、1つのPodがクラスタ内の他のPodに影響を与えるリスクを軽減するべきです。

脆弱性への対応

過去に Kubernetes Service でも脆弱性が発見されています。脆弱性情報には常に気を配り、迅速に対応を行う体制を整える必要があります。

運用の留意点

設定のバックアップ

Serviceを含む Kubernetes の構成情報は etcd に格納されます。etcd は定期的にスナップショットが作成されますが、ディザスタリカバリに備えて別ホストへのバックアップと、そのバックアップデータを用いたリストアの確認を行うべきです。

監視

システムのリソース監視ソフトウェア Prometheus を導入して Kubernetes の監視を行なうことができます。異常があればアラートを送り、 CPU やメモリの使用量などの情報をクラスタの改善に活用できます。

トラブルシューティング

Service が機能しない場合、 DNS による名前解決や kube-proxy の正常性を確認するなど、 Kubernetes システムに関する知識とスキルが必要になります。

4. まとめ

ここまで解説したように、Kubernetes Service は Kubernetes を活用するために欠かせない重要な概念です。しっかり理解して設定・運用を行うことが、 Kubernetes のスムーズな導入と、ビジネスにおける有効利用へとつながるでしょう。

もし、スキルや人的・時間的な資源が不足する場合、設計から導入、運用までプロフェッショナルに依頼することも一つの方法です。

Kubernetes の運用を相談したい

Kubernetes運用サポートサービス

Kubernetes運用サポートサービス

クラウドベンダが提供するKubernetes 環境の運用をサポートします。

Free

資料ダウンロード

課題解決に役立つ詳しいサービス資料はこちら

資料ダウンロード
  • Kubernetes運用サポートサービスカタログ

    サービスの詳細をご覧いただけます。

Tag: Kubernetes Service

Contactお問い合わせ

お見積もり・ご相談など、お気軽にお問い合わせください。

single.php