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-srv
の srv
は service の略。
spec
オブジェクトに適用するものを指定する。
spec は specification の略で、仕様書の意味。
type
type は Service のどのタイプかを指定。今回は NodePort
。
selector
selector はどの Pod との通信を管理するのかを指定する。
今回は app: posts
を指定。ここで指定されたものを Deployment Object の template にある labels から探してくる。
ports
ports が NodePort のメイン部分。
port
が NodePort 自身のポート番号。
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 が一覧で表示される。
その中から 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