NodePort는 Kubernetes 서비스 유형 중 하나로, 클러스터의 모든 노드에서 지정된 포트를 열어 외부에서 접근할 수 있도록 해준다. NodePort 유형의 서비스는 다음과 같은 방식으로 작동한다.
- NodePort 할당: NodePort 서비스가 생성되면, Kubernetes는 클러스터 내의 모든 노드에서 동일한 포트를 열어둔다. 이 포트는 30000-32767 범위 내에서 할당된다.
- 트래픽 라우팅: 클러스터 외부의 클라이언트가 노드의 외부 IP와 NodePort를 통해 접속하면, 해당 요청은 Kubernetes의 kube-proxy에 의해 처리된다. kube-proxy는 요청을 적절한 Pod로 라우팅 하며, 이 Pod는 클러스터 내 어디에 위치하든 접근할 수 있다.
- 로드 밸런싱: 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 서비스에 접근할 수 있다.
728x90
'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 |