Mitomex Blog

Kubernetes の NodePort Service を作るために必要な yaml ファイルの書き方

Jan 15, 2021

記述例

apiVersion: v1
kind: Service
metadata:
  name: posts-srv
spec:
  type: NodePort
  selector:
    app: posts
  ports:
    - name: posts
      protocol: TCP
      port: 4000
      targetPort: 4000

apiVersion

apiVersion は表示させたい Kubernetes Object のセットを指定する。

kind

kind は apiVersion で指定した Kubernetes Object セットの中から使いたいタイプを指定する。

metadata

metadata はオブジェクトの情報を指定する。名前など。

posts-srvsrv は service の略。

spec

オブジェクトに適用するものを指定する。

spec は specification の略で、仕様書の意味。

type

type は Service のどのタイプかを指定。今回は NodePort

selector

selector はどの Pod との通信を管理するのかを指定する。

今回は app: posts を指定。ここで指定されたものを Deployment Object の template にある labels から探してくる。

ports

ports が NodePort のメイン部分。

portNodePort 自身のポート番号。

targetPort が通信する Pod のポート番号。Pod 内で稼働しているアプリが受け付けているポート番号。

NodePort を Kubernetes に適用する

NodePort を Kubernetes に適用するには、posts-srv.yaml ファイルがあるディレクトリで以下のコマンドを実行する。

kubectl apply -f posts-srv.yaml

NodePort へのアクセス

Kubernetes Cluster の外から NodePort にアクセスする方法。

NodePort の yaml ファイルを Kubernetes に適用後、以下のコマンドで稼働中の Service を確認。

kubectl get services

現在稼働中の Service が一覧で表示される。

image01

その中から NodePort である posts-srv の PORT(S) 欄を確認。

4000:32626/TCP とあるのが分かる。

: で区切って左側にある 4000 が NodePort 自身のポート番号。

右側にある 32626 が Cluster 外からこの Node(Container を実行している Virtual Machine) にアクセスするときに使うポート番号。

このポート番号はランダムで割り振られる。

このポートのことを nodePort と呼ぶ。

nodePort は以下のコマンドでも確認できる。

kubectl describe service <service name>

kubectl describe service posts-srv

image02