はじめに
KubernetesのSericeのNodePortが、ホストマシンからアクセスを確認した
環境
環境:Ubuntu+k3s
実行
Deployment, Serviceを以下とする。
deploy.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: web-deploy spec: replicas: 1 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 type: NodePort ports: - protocol: TCP port: 80 nodePort: 30001
それぞれのリソースをデプロイする
$ kubectl apply -f deploy.yaml $ kubectl apply -f service-np.yml $ kubectl get all -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES pod/web-deploy-7469f999db-z59kw 1/1 Running 0 39m 10.42.0.10 inoue-vm2 <none> <none> NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR service/web-service-np NodePort 10.43.108.235 <none> 80:30001/TCP 37m app=web NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR deployment.apps/web-deploy 1/1 1 1 39m nginx nginx:latest app=web NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR replicaset.apps/web-deploy-7469f999db 1 1 1 39m nginx nginx:latest app=web,pod-template-hash=7469f999db
nodePortで指定したPortを活用し、 ホストマシンからServiceを経由してnginxにアクセスできることを確認する
$ curl http://localhost:30001 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> html { color-scheme: light dark; } 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>
$ kubectl get nodes -o wide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME 5gran-5gc2 Ready control-plane 19d v1.25.16 192.168.122.26 <none> Ubuntu 20.04.6 LTS 5.4.0-174-generic cri-o://1.25.2 $ curl http://192.168.122.26:30001 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> (省略)
また、次のようにCLUSTER-IP, Target Port(80)を指定してもcurlできる。ただし、非推奨である。
$ kubectl get all -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES pod/web-deploy-7469f999db-z59kw 1/1 Running 0 39m 10.42.0.10 inoue-vm2 <none> <none> NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR service/web-service-np NodePort 10.43.108.235 <none> 80:30001/TCP 37m app=web $ curl http://10.43.108.235:80
なお、NodePortは、30000~32767のポートは割当が可能である。
参考: