【Kubernetes】YAMLファイルの書き方(service) no.9


こんにちは。まゆみです。

Kubernetesについての記事をシリーズで書いています。

前回の記事でdeploymentオブジェクトを作る時のyamlファイルの書き方を紹介しました。

ただ、deploymentオブジェクトだけでは、外部からアプリケーションにアクセスできません。

外部からアクセスをしようとしたら、『service』オブジェクトも作る必要があります。

今回の記事では、service オブジェクトを作る時のyamlファイルの書き方を紹介しようと思います

では早速はじめて行きますね。

Kubernetesのドキュメント

Serviceオブジェクトを作るときのyamlファイルの書き方も、Kubernetesのドキュメントを参考にしながら書くと良いでしょう

そして基本的には、前回の記事で紹介したdeploymentオブジェクトのyamlファイルと似ています

Serviceオブジェクトのyamlファイルの概要

Service オブジェクトを作るためのyamlファイルを作る時、最終完成形は以下のような感じになります


引用元:Kubernetesドキュメント

前回の記事で、deploymentオブジェクトのためのyamlファイルの書き方を書かせてもらいましたが、前回の解説と似ているところは今回の記事では省略させていただきます。

kind

今回はServiceオブジェクトを作りたいので、

kind: Service

と書きます。

オブジェクト名の最初の文字を大文字ではじめてくださいね。(serviceではなく、Service)

metadata

どのPodをServiceオブジェクトでマネージするのかの特定のために、キーバリューペアーを書きます。

前回の記事で扱ったdeployment・podのyamlファイルに書いたPodのlabels(キーバリューペア)と同じものをServiceのselectorに書くことで、

『このServiceがある特定のpodをマネージしているのだ』

ということが分かります

ports

specの項目のなかにインデントしてportsを書きます

portsと複数形になっていることから分かるように、複数のportを書くことができます

複数のportを書く場合は - (ダッシュ)で、それぞれのportを区切ってください。

ではそのportsのなかに書く項目を下記に書いていきます

protocol

ディフォルトでは 'TCP'になっていますので、

ports:
  - protocol: 'TCP'

と書きましょう

port

他のpodがもし、このServiceオブジェクトでマネージされているpodとコミュニケーションを取りたい場合のポート番号を書きます

targetPort

Containerに開けられたポート番号を書きます。

例えば、Nodeでアプリを作っているのなら下記の赤で囲んでいる部分に書かれている番号を書いてください。

type

Imperative なアプローチを使ってServiceオブジェクトを作った時

kubectl expose deployment <deployment名> --port=<ポート番号> --type=<タイプ>

でdeploymentオブジェクトを外部からアクセスできる状態にしました。(忘れた方はこちらを参考にどうぞ)

上記の--type=に書いていたものをyamlファイルにも記載します。

type: LoadBalancer

Serviceオブジェクトのためのyamlファイルの最終的な物は下のスクショのようになります。

YAMLファイルでは、インデントも重要な意味を持ちますので、インデントがされるべき場所でちゃんとされているかなどにも注意して書いてみてくださいね。

kubectl applyでファイルの内容を適用する

yamlファイルが書き終わりましたら、コマンドラインに

kubectl apply -f=<ファイル名.yaml>

と打って、Service オブジェクトを作りましょう

Serviceオブジェクトができ、実際アプリにアクセスしてみたいって方は、その方法をこちらに書いています。

まとめ

今回の記事はここで締めくくらせていただきます。

次回の記事では、Declarativeなアプローチによるイメージの更新方法について書いていこうと思います