0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Kubernetes運用前に勉強していること基礎編03-04

Posted at

Kubernetes運用前に勉強していること基礎編03-04

注意
本記事の内容は個人的な勉強・備忘録を目的としており、勤務先や関係者とは一切関係ありません。


はじめに

Kubernetesの本番環境での運用を始めるにあたり、個人で勉強している内容を整理した記事です。構築や運用に必要な知識、注意点、実践して学んだことを随時更新していきます。基礎編の想定読者はコンテナの知識があり、Kubernetesでコンテナ運用したいがどうすればいいかを迷っている人です。今回は前回の引き続きで、Kubernetesのリソースカテゴリを学ぶことを目的としています。

勉強中の主な内容

  • 基礎編
    • クラウドネイティブとは
    • Kubernetesのアーキテクチャ概要
    • Kubernetesのリソース(今回の話)

Service APIs

Service(サービス)リソースおよび関連するネットワークリソースは、Kubernetes上のアプリケーション間の通信や、外部からのアクセス経路を抽象化するためのものである。複数のPodを1つの論理的なサービスエンドポイントに束ねたり、ロードバランシングやサービスディスカバリを行う役割である。Kubernetesにおけるサービス周りの代表的リソースは次のとおりである。

  • Service
    • ClusterIP
    • NodePort
    • LoadBalancer
    • ExternalName
    • Headless
  • Ingress

サービス関連リソースはクラスタ内外の通信を管理するための抽象レイヤを提供し、動的に変化するPod群に対して安定したアクセス方法を確立している。以下、それぞれのリソースとその関係、ユースケースを解説する。

前提知識

サービスディスカバリーパターンはサービスを提供するインスタンスに対して、そのサービスの利用背がアクセスできる、安定したエンドポイントを提供する。サービス指向アーキテクチャにおいて、サービスプロバイダー(Pod)はそのサービス機能を提供するのに加えて、自身をサービスレジストリに登録する必要があり、サービスコンシューマーはそのサービスへ到達するためのレジストリ情報にアクセスできる。図はkubenetesによって登録と検索がお紺われているかを示している図である。

サービスディスカバリーパターン01.png

Service

Serviceは、一連のPodに対するシングルなアクセスポイント(仮想IPとホスト名)を提供するKubernetesリソースである。通常、Serviceはラベルセレクタにより対象となるPod群(たとえばapp: frontendというラベルを持つ全Pod)を動的に紐づけ、その集合に対して仮想的なIPアドレス(ClusterIP)とDNS名を割り当てる。クラスター内部では、他のPodはそのClusterIPやDNS名を使ってサービスにアクセスすれば、背後にいる実Podへとリクエストがロードバランシングされる。要するに、ServiceはPodの集合に対するネットワークフロントエンドの役割である。これから、サービスの主な型(Type)と用途について説明する。

ClusterIP

サービスクラスタIP01.png

デフォルトのタイプで、クラスター内部にのみ有効な仮想IP(ClusterIP)を付与する。サービス発見は自動登録されるDNS名(<サービス名>..svc.cluster.local)で行う。他のPodからはこのDNS名かClusterIP宛に通信すれば、Serviceが背後のPodにトラフィックを流れる。図のように内部的なサービスディスカバリーとして用いられるリソースである。

NodePort

ノードポートサービス01.png

各ワーカーノードの特定ポート(30000-32767の範囲から割り当て)を開放し、そのポートへの通信をServiceに転送する。NodeのIP:NodePortでクラスター外からアクセス可能になるが、負荷分散はクライアント側で各ノードに振り分ける必要がある。シンプルな開発用途や、独自のロードバランサを別途配置する場合などに利用している。

LoadBalancer

ロードバランサーサービス01.png

クラウドプロバイダ統合されたロードバランサをプロビジョンし、外部アクセスをServiceに流すためのタイプである。AWS EKSでは、このServiceを作成するとAWSのElastic Load Balancer (ELB)が自動的に割り当てられる。
結果として、インターネットからのアクセス用にAWS側のパブリックIPやDNS名を持つLB(クラシックロードバランサー)が用意され、受信した通信をクラスタ内の各Podに配分される。本番環境で外部公開する際によく使われる。

所感

kubenetesを運用するうえで、ネットワークトラブルで運用が難しいと聞く、今回のサービスについて説明しているが、本質的には一般的なネットワーク設計の知識を持っていれば、理解しやすいと思われる。今後、別記事でネットワークに対する記事も書いていきたいと思う。次の記事は引き続き、サービスの説明を行います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?