DevOps/K8S

[k8s] NodePort

kyoulho 2024. 8. 29. 19:45

NodePort는 Kubernetes 서비스 유형 중 하나로, 클러스터의 모든 노드에서 지정된 포트를 열어 외부에서 접근할 수 있도록 해준다. NodePort 유형의 서비스는 다음과 같은 방식으로 작동한다.

  1. NodePort 할당: NodePort 서비스가 생성되면, Kubernetes는 클러스터 내의 모든 노드에서 동일한 포트를 열어둔다. 이 포트는 30000-32767 범위 내에서 할당된다.
  2. 트래픽 라우팅: 클러스터 외부의 클라이언트가 노드의 외부 IP와 NodePort를 통해 접속하면, 해당 요청은 Kubernetes의 kube-proxy에 의해 처리된다. kube-proxy는 요청을 적절한 Pod로 라우팅 하며, 이 Pod는 클러스터 내 어디에 위치하든 접근할 수 있다.
  3. 로드 밸런싱: kube-proxy는 요청을 서비스에 연결된 여러 Pod로 분산시키는 역할도 한다. 따라서, 여러 노드에서 동일한 NodePort를 사용해 접근할 수 있고, 실제로 서비스하는 Pod가 어떤 노드에 위치하는지 상관없이 균등하게 요청이 분산된다.

 

Pod 노출

$ k expose pod nginx --type=NodePort --port=80 service/nginx exposed

nginx라는 이름의 Pod를 NodePort 서비스로 노출시킨다. 이 경우, Pod의 80번 포트가 클러스터의 모든 노드에서 열리게 된다.

서비스 확인

$ k get service
NAME         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1     <none>        443/TCP        14m
nginx        NodePort    10.104.83.3   <none>        80:31322/TCP   36s

nginx 서비스는 NodePort 유형으로 설정되어 있으며, 클러스터 내 IP 주소 10.104.83.3와 포트 80을 외부에서 31322 포트로 접근할 수 있도록 설정되었다.

노드 IP 확인

$ k get node -o wide
NAME     STATUS   ROLES           AGE     VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION       CONTAINER-RUNTIME
cp-k8s   Ready    control-plane   5h20m   v1.30.0   192.168.1.10    <none>        Ubuntu 22.04.4 LTS   5.15.0-107-generic   containerd://1.6.28
w1-k8s   Ready    <none>          5h17m   v1.30.0   192.168.1.101   <none>        Ubuntu 22.04.4 LTS   5.15.0-107-generic   containerd://1.6.28
w2-k8s   Ready    <none>          5h16m   v1.30.0   192.168.1.102   <none>        Ubuntu 22.04.4 LTS   5.15.0-107-generic   containerd://1.6.28
w3-k8s   Ready    <none>          5h14m   v1.30.0   192.168.1.103   <none>        Ubuntu 22.04.4 LTS   5.15.0-107-generic   containerd://1.6.28

클러스터의 각 노드는 내부 IP 주소를 가진다. 이 IP 주소와 NodePort를 통해 외부에서 접근할 수 있다.

접속

노드의 IP와 NodePort를 사용하여 nginx 서비스에 접근할 수 있다.

'DevOps > K8S' 카테고리의 다른 글

[k8s] Deployment  (0) 2024.08.29
[k8s] Pod  (0) 2024.08.29
[k8s] Namespace  (0) 2024.08.28
[k8s] Service  (0) 2024.08.28
[k8s] 배포 흐름  (0) 2024.08.28