このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

Kubernetes入門:サービスの定義ファイルを作成する

 Kubernetesでアプリケーションを稼働させる際、デプロイメントとセットでよく使用されるのがサービスです。サービスの役割は、Podへのアクセスを管理し、内部や外部のクライアントが適切にPodと通信できるようにすることです。サービスの定義ファイルはデプロイメントよりもシンプルですが、通信に関する重要な設定が含まれます。

サービスの定義ファイルの書き方

 サービスの定義ファイルには、metadataspecという2つの大項目の設定が中心となります。サービスの設定項目は以下の通りです。

apiVersion:
kind:
metadata:
  name: ←サービスの名前を設定します
spec:
  type:  ←サービスの種類(ClusterIP, NodePort, LoadBalancer, ExternalName)
  ports: ←通信に関するポート設定
    - port: ←サービスが公開するポート番号
      targetPort: ←コンテナの内部で使用するポート番号
      protocol: ←使用するプロトコル(通常はTCP)
      nodePort: ←NodePortタイプを使用する場合に指定するワーカーノードのポート番号
  selector: ←対象となるPodを識別するラベル

大項目のサービスの設定項目

  • apiVersion: サービスのAPIバージョンを指定。
  • kind: リソースの種類。ここでは「Service」を指定。
  • metadata: サービスのメタデータ、主に名前を指定。
  • spec: サービスのスペックとして、サービスのタイプ、ポート設定、対象Podのラベルなどを記述。

主なサービスの設定項目

 サービスのタイプやポート設定は、クライアントがどのようにPodにアクセスするかを決定します。typeでは、外部アクセスの可否や通信の仕組みを設定し、portsでは通信に関わる具体的なポートを設定します。

タイプ(type)の設定

 サービスのtypeは、どのようにPodにアクセスするかを決定する重要な設定です。以下は、代表的なタイプの種類です。

タイプ名内容
①ClusterIPCluster内でのみアクセスを許可する。外部からのアクセスはできません。
②NodePortワーカーノードのIPでサービスにアクセスできるようにします。
③LoadBalancerロードバランサーのIPでサービスにアクセスできるようにします。
④ExternalNamePodから外部サービスにアクセスするための設定。
タイプ(type)の設定

ポート(ports)の設定

 ポートの設定により、サービスがどのポートで通信を受け付けるか、またコンテナ内部でどのポートが使われるかを指定します。nodePortは、外部から直接アクセスする場合に使用され、範囲は30000〜32767です。

項目内容
①portサービスの公開ポートを設定します。
②nodePortワーカーノードのポート(30000~32767)を指定します。
③targetPortコンテナ内部で使用するポートを指定します。
ポート(ports)の設定

セレクター(selector)の設定

 サービスは、どのPodにアクセスを渡すかを指定する必要があります。そのためにselectorを使用します。selectorは、Podやデプロイメントで設定されたラベルに基づいてPodを識別し、管理するための機能です。

【作成手順】サービスの定義ファイル

 サービスの定義ファイル「service.yml」を作成する手順について詳しく解説します。サービスはPodへのアクセスを管理するため、通信に関する設定を中心に記述します。ここでは手順を1つずつ詳細に説明していきます。

サービスの定義ファイルの作成手順

サービスの定義ファイルを作成する際に行う手順は下表の流れとなります。

手順説明
1. 大項目を並べるapiVersion, kind, metadata, specの項目を配置する
2. メタデータを記述するmetadataにデプロイメント名やラベルを記述する
3. スペックを記述するspecにレプリカ数、セレクター、テンプレート(Podの設定)を記述する
サービスの定義ファイルの作成手順

作成するサービスとコンテナの情報

サービスの定義に必要な情報を以下にまとめます。

項目
APIグループとバージョンv1
リソースの種類Service
サービスの名前apache-ser
セレクターの対象とするラベルapp: apache
サービスのタイプ (種類)NodePort
サービスのポート (port)8099
コンテナのポート (targetPort)80
ノードのポート (nodePort)30080
プロトコルTCP
作成するサービスとコンテナの情報

サービスの定義ファイル名と置く場所

作成した「service.yml」ファイルを保存する場所も決めておく必要があります。

項目
サービスの定義ファイル名service.yml
ファイル置く場所C:\Users\ユーザー名\Desktop\kubernetes\apache
サービスの定義ファイル名と置く場所

サービスの定義ファイルの作成

 ここから、サービスを定義する「service.yml」ファイルを作成していきます。サービスの定義ファイルは、KubernetesにおいてPodへのアクセスを管理するための重要な設定です。サービスを作成することで、外部からPodへの通信を確立し、必要なリソースにアクセスできるようになります。

 サービスの定義には、APIバージョンやリソースの種類、メタデータ、そしてポートやプロトコルの設定が含まれます。また、サービスの種類を指定することで、どのように外部や内部ネットワークからアクセスを受け付けるかを制御します。

1.【STEP1】「service.yml」ファイルを作成する

まず、VScodeを使って「service.yml」ファイルを作成します。

  • PowerShellを起動します。
  • 作業ディレクトリに移動します。
PS C:\Users\joeac> cd desktop\kubernetes
PS C:\Users\joeac\Desktop\kubernetes>

・「apache」ディレクトリに移動して、VSCodeを使って「service.yml」ファイルを作成します。

PS C:\Users\joeac\Desktop\kubernetes> cd apache 
PS C:\Users\joeac\Desktop\kubernetes\apache> code service.yml

VSCodeが起動します。

2.【STEP2】大項目を並べます。

ファイルの中に、以下の大項目を入力します。

apiVersion:
kind:
metadata:
spec:

3.【STEP3】apiVersionkindの設定を入力します。

apiVersionに「v1」、kindに「Service」と入力します。

以下のように編集します。

apiVersion: v1
kind: Service
metadata:
spec:

4.【STEP4】メタデータの設定値を入力します。

 次に、metadataの値として、サービスの名前(name)を設定します。名前は「apache-ser」とします。

以下のように編集します。

apiVersion: v1
kind: Service
metadata:
  name: apache-ser
spec:

5.【STEP5】specの設定値を入力します

 最後に、specにtypeとports、selectorを設定します。typeは「NodePort」、portは「8099J、targetPortは「80」、protocolは「TCP」、nodePortは「30080」とします。selectorは、「app: apache(Podで設定したラベル」を指定します。

以下のように編集します。

apiVersion: v1
kind: Service
metadata:
  name: apache-ser
spec:
  type: NodePort
  ports:
    - port: 8099
      targetPort: 80
      protocol: TCP
      nodePort: 30080
  selector:
    app: apache

6.【STEP6】ファイルを保存します

 設定内容を確認し、問題がなければ「service.yml」を保存します。スペースやコロンの有無に特に注意して確認してください。

まとめ

 サービスは、KubernetesにおいてPodへのアクセスを管理する重要なリソースです。定義ファイルはシンプルですが、ポートやタイプの設定によって、アクセス方法や通信の方向を管理することが可能です。