Vagrantで構築したK8sクラスタにNodeportからアクセスをする

2025/02/09に公開

今回はVagrantで構築したK8sクラスタにNodeportのサービスを作り、ノードを横断してリクエストが送られることを確認する。

もともとのVagrantfileはこちら。

https://github.com/kodekloudhub/certified-kubernetes-administrator-course/blob/master/kubeadm-clusters/virtualbox/Vagrantfile

加えた変更点はこちらで見れる:

https://zenn.dev/greenteabiscuit/articles/c65ecbaf463f83

まず、Vagrantfileを以下のように変更して外部からアクセスできるようにする。

node.vm.network "forwarded_port", guest: 30785, host: "123#{i}"

Vagrant内でNodeportサービスを作成する。

$ cat svc-np.yml
apiVersion: v1
kind: Service
metadata:
  name: web-service-np
spec:
  selector:
    app: web
  ports:
  - protocol: TCP
    port: 80
  type: NodePort

Applyする。

kubectl apply -f svc-np.yml

ホストマシンからCurlを投げてみる。

curl localhost:1231 # or curl localhost:1232

<!DOCTYPE html>
<head>                                                                                                                                         [0/297]
<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>

結果をゲットできた。

各Nginxの初期ページを以下のように変えてみる。

for pod in $(kubectl get pods | awk 'NR > 1 {print $1}' | grep web-deploy); do kubectl exec $pod -- /bin/sh -c "hostname>/usr/share/nginx/html/index.html"; done
kubectl get pods -o wide
NAME                          READY   STATUS    RESTARTS      AGE     IP            NODE     NOMINATED NODE   READINESS GATES
nginx                         1/1     Running   2 (26m ago)   16d     10.244.2.12   node02   <none>           <none>
web-deploy-66fbbff65d-cxcjc   1/1     Running   2 (27m ago)   4d19h   10.244.1.14   node01   <none>           <none>
web-deploy-66fbbff65d-f6bgd   1/1     Running   2 (26m ago)   4d19h   10.244.2.11   node02   <none>           <none>
web-deploy-66fbbff65d-ghklh   1/1     Running   2 (27m ago)   4d19h   10.244.1.13   node01   <none>           <none>

これでリクエストをNode02に投げてみる(Node02はポート1232を開放している。)

while true; do curl localhost:1232; sleep 1; done

node01の ...ghklh, ...cxcjc にも分散されていることがわかる。

web-deploy-66fbbff65d-ghklh
web-deploy-66fbbff65d-cxcjc
web-deploy-66fbbff65d-ghklh
web-deploy-66fbbff65d-f6bgd
web-deploy-66fbbff65d-ghklh
web-deploy-66fbbff65d-ghklh
web-deploy-66fbbff65d-cxcjc
web-deploy-66fbbff65d-f6bgd
web-deploy-66fbbff65d-f6bgd

このことからサービスはkube-proxyと連動してノード横断でポッドにリクエストを分配することがわかる。

Discussion