概要
本投稿はK8sのサービス機能の一つである NodePort
の動作確認を行った際の個人メモです。
前提条件
- MacOSにminikube、kubectlがインストールされていること。
- K8sクラスタが既に起動していること
$ minikube start
サービスとは
サービス
とは一時的な存在であり永続的なIPアドレスを持たないポッドに対し、クライアントがアクセスするためのオブジェクトです。
以下記事でデプロイメントまでの動作確認を行っているため、今回は外部からpodに対してアクセスできるか確認を行います。
サービスには以下のようなタイプがありますが、今回はNodePort
を使用します。
サービスタイプ | アクセス可能範囲と手段 |
---|---|
ClusterIP | ポッドネットワーク上のポッドから、内部DNSに登録された名前でアクセスできる。 |
NodePort | CluterIPに加え、K8sの外部クライアントのノードのIPとポートを指定することでアクセスできる |
LoadBalancer | NodePortのアクセス範囲に加え、K8sクラスタ外のクライアントも代表アドレスとプロトコルのデフォルトポートを使用してアクセスできる |
ExternalName | K8sクラスタ内のポッドネットワーク上のクライアントから、外部のIPアドレスを名前でアクセスできる。 |
NodePortのマニフェスト
nginxのpodを起動させるためのデプロイメント用と、サービス用でファイルを分けています。
deploy.yml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: web-deploy
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: nginx
image: nginx:latest
service-np.yml
apiVersion: v1
kind: Service
metadata:
name: web-service-np
spec:
selector:
app: web
ports:
- protocol: TCP
port: 80
type: NodePort # NodePortを指定
デプロイと動作確認
サービスの確認を行うと、32496ポートにマッピングしていることがわかります。
公開用のポート番号は、デフォルトで30000~32767です。
$ kubectl apply -f deploy.yml
deployment.extensions/web-deploy configured
$ kubectl apply -f service-np.yml
service/web-service-np created
$ kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 16d
web-service-np NodePort 10.0.0.56 <none> 80:32496/TCP 30s
クラスタのIPを確認後、使用している端末からnginxのhtmlにアクセスできるか確認します。
$ minikube ip
192.168.99.100
$ curl 192.168.99.100:32496
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
サービスを使用することで、ポッドに外部からアクセスできることが確認できました。
NodePortはお手軽に動作確認ができて便利ですが、本番運用向きではないためご注意を。