본문 바로가기

kubernetes

쿠버네티스 nodeport clusterip

서비스

서비스는 pod 집합에서 실행 중인 애플리케이션을 네트워크 서비스로 노출하는 추상화 방법이다.

즉 특정 pod들의 집합을 클러스터 내 다른 pod들 혹은 외부 서비스에 어떻게 노출할 것인지를 정의한 추상화 방법이다

쿠버네티스에서의 pod은 영구적이지 않다. 종종 소멸되거나 복구되며, pod들은 고유한 IP 주소를 가지긴 하지만 이는 동적으로 변경된다.

이런 환경 속에서 다른 서비스가 이 pod 집합들과 통신하려면 일반적으로는 서비스 디스커버리 메커니즘이 필요하다. 그러나 서비스 디스커버리 메커니즘을 사용하려면 애플리케이션을 수정해야 하는 경우가 있는데,

쿠버네티스에서는 서비스라는 개념을 통해 팟에게 고유한 IP 주소와 집합에 대한 단일 DNS 명을 부여하고 레플리카들에게 알아서 로드밸런싱을 수행해준다.

클러스터 내 프론트앤드와 백엔드 서버가 있다고 가정하자.

백엔드는 고 가용성을 위해 여러 개의 레플리카들로 관리된다. 만약에 프론트엔드가 백엔드와 통신하려고 하면 “서비스”라는 개념 없이는 실제 IP 주소를 추적해야 한다. 그러나 쿠버네티스에서 제공하는 서비스라는 추상화 개념을 이용하면, 백엔드 파트의 실제 IP 주소를 추적할 필요 없이 등록된 내부 DNS 주소를 통해 통신이 가능하다.

쿠버네티스의 서비스 종류

클러스터ip 노드포트 인그레스

clusterIP

Cluster IP는 클러스터 안에 있는 다른 Pod들이 접근할 수 있도록 IP를 할당한다.

내부 IP만을 할당하기 때문에 클러스터 외부에서는 접근이 불가능하다.

Pod들은 K8s 클러스터 내 존재하고 Cluster IP Service는 해당 Pod들에게 트래픽을 로드밸런싱 한다. Cluster IP는 클러스터 내부에서만 유효하며, 클러스터 외부와의 통신을 위해서는 NodePort나 LoadBalancer 서비스가 필요하다

 

NodePort

NodePort는 고정 포트로 Pod이 배포된 노드들의 IP에 서비스를 노출시킨다. NodePort 서비스는 ClusterIP

서비스를 자동으로 생성한다.

NodeIP:NodePort를 요청하여 클러스터 외부에서 NodePort 서비스에 접근할 수 있다.

여기서 port, targetPort, nodePort 세 가지 개념이 나오는데 nodePort는 실제 VM 노드에 접근할 때 사용되는 port, port 서비스의 포트, 마지막으로 targetPort는 Pod에 접근할 때 사용하는 포트이다.

NodePort는 노드의 개방된 Port로 네트워크 접근을 허용할 수 있지만, 실제 분산 노드 애플리케이션을 구현한다고 가정했을 때 auto scaling의 이유로 노드들의 네트워크 환경이 동적으로 변경된다면, 서비스 디스커버리와 같은 방법으로 클라이언트 단에서 노드들의 네트워크 엔드포인트들을 관리해야한다는 문제가 생긴다.

이를 해결할 수 있는 것이 로드밸런서이다.

로드 밸런서는 서비스를 외부에 노출시키는 표준 방법이다. 로드밸런서는 따로 물리 장비(컴퓨터)가 필요한데, 클라우드 컴퓨팅 환경에서는 벤더사가 제공하는 로드밸런서를 사용하면 된다.

'kubernetes' 카테고리의 다른 글

쿠버네티스 노드생성  (0) 2023.10.10
쿠버네티스 기본 환경 설정  (0) 2023.10.10
쿠버네티스 아키텍쳐  (0) 2023.10.10
쿠버네티스 네트워크  (0) 2023.10.10
쿠버네티스 개념  (0) 2023.10.10