Services
2024. 12. 31. 00:45ㆍ카테고리 없음
728x90
반응형
clusterIP | nodePort | loadBalancer |
![]() |
![]() |
![]() |
클러스터 외부에서는 접근이 불가능 | NodePort Service는 모든 쿠버네티스 노드의 동일 포트를 개방한다. 그리고 실제로 해당 포트로 트래픽이 들어오면, 결국 ClusterIP로 전달되어 Pod로 로드밸런싱 | LoadBalancer 타입 Service는 NodePort 타입 Service를 한 번 더 감싸서 만들어진 것 |
https://seongjin.me/kubernetes-service-types/
쿠버네티스에서 반드시 알아야 할 서비스(Service) 유형
파드는 특성상 생성될 때마다 내부 IP 주소가 계속 변화하게 된다. 쿠버네티스의 서비스(Service)는 이러한 파드에 탑재된 애플리케이션이 외부와 상호 통신이 가능하도록 만들어준다. 이번 글에
seongjin.me
Kubernetes 리소스 Service에 대해 이해하고 실습해보기
- Service 정의, 주요 기능 및 종류를 이해한다. - ClusterIP 타입과 서비스 디스커버리를 이해하고 실습한다. - NodePort 타입과 외부에 노출하는 방법을 이해하고 실습한다. - LoadBalancer 타입과 클라우드
velog.io
Cluster IP
1. ClusterIP 서비스란?
- 정의:
- Kubernetes의 기본 서비스 유형으로, 클러스터 내부에서만 접근 가능한 가상 IP를 제공.
- Pod 간 통신을 지원하며, 외부에서는 접근할 수 없음.
- 필요성:
- Pod의 IP 주소는 동적으로 변경되므로, 안정적인 통신을 위해 고정된 인터페이스가 필요.
- ClusterIP는 Pod 그룹을 묶어 단일 IP로 접근 가능하게 하여 안정적인 내부 통신 제공.
2. ClusterIP 서비스의 특징
- 내부 통신 지원:
- 클러스터 내 애플리케이션의 마이크로서비스 간 통신에 적합.
- 예: 프론트엔드 Pod가 백엔드 Pod에 API 요청을 보낼 때 사용.
- 자동 부하 분산:
- 동일한 레이블을 가진 여러 Pod에 트래픽을 무작위로 분산.
- 내장된 로드 밸런서를 통해 고가용성 제공.
- 고정 IP 제공:
- 서비스 생성 시 고유한 가상 IP 주소(ClusterIP)를 자동 할당.
- Pod가 삭제되거나 재생성되어도 서비스의 IP는 변경되지 않음.
- DNS 이름으로 접근 가능:
- 각 서비스는 클러스터 내에서 DNS 이름으로도 접근 가능.
- 예: http://backend-service로 백엔드 서비스에 연결.
apiVersion: v1
kind: Service
metadata:
name: backend-service
spec:
selector:
app: backend
ports:
- name: http
protocol: TCP
port: 80 # 서비스가 노출하는 포트
targetPort: 8080 # Pod에서 애플리케이션이 실행 중인 포트
type: ClusterIP # 생략 가능 (기본값)
- Pod와 연결:
- selector 필드로 특정 레이블을 가진 Pod를 그룹화하여 서비스와 연결.
주요 필드 설명
- spec.selector:
- 특정 레이블을 가진 Pod를 선택하여 서비스와 연결.
- 예: app: backend 레이블을 가진 모든 Pod를 연결.
- spec.ports:
- port: 클라이언트가 서비스를 호출할 때 사용하는 포트.
- targetPort: 트래픽이 전달될 Pod 내부 애플리케이션 포트.
- protocol: 기본값은 TCP.
- spec.type:
- 기본값은 ClusterIP. 명시하지 않아도 자동으로 설정됨.
ClusterIP 서비스의 동작
- Pod 그룹화:
- 동일한 레이블을 가진 여러 Pod를 하나의 서비스로 묶음.
- 트래픽 분산:
- 서비스는 요청을 무작위로 선택된 Pod로 전달(랜덤 알고리즘).
- 다중 노드 지원:
- 여러 노드에 분산된 Pod도 동일한 방식으로 연결 가능.
- DNS 기반 접근:
- 클러스터 내 다른 Pod는 DNS 이름(http://service-name) 또는 ClusterIP를 통해 접근 가능.
활용 사례
- 마이크로서비스 아키텍처:
- 프론트엔드, 백엔드, 데이터베이스 등 서로 다른 계층 간 통신.
- 내부 데이터 처리:
- 데이터 처리 및 분석을 위한 내부 API 호출.
- 고가용성 애플리케이션:
- 여러 인스턴스(Pod)를 실행하여 부하 분산 및 장애 복구 지원.
NodePort
- NodePort:
- 노드의 특정 포트를 통해 외부에서 Pod에 접근 가능.
- 노드 포트 범위: 30,000~32,767 (기본값).
- 외부 사용자가 노드 IP와 NodePort를 통해 웹 서버에 접근.
- Pod와 서비스 연결:
- 서비스는 레이블과 셀렉터를 사용하여 특정 Pod를 식별하고 연결.
- 예: Pod 레이블이 app=myapp인 경우, 서비스 셀렉터에 동일한 레이블을 지정.
- 다중 Pod 지원:
- 동일한 레이블을 가진 여러 Pod가 있을 경우, 서비스는 모든 Pod를 엔드포인트로 설정.
- 부하 분산 알고리즘으로 랜덤 방식 사용.
다중 노드 환경에서의 서비스
- 여러 노드에 분산된 Pod를 지원하기 위해, Kubernetes는 모든 노드에 동일한 NodePort를 자동으로 설정.
- 클러스터 내 어떤 노드 IP와 NodePort를 사용해도 애플리케이션에 접근 가능.
apiVersion: v1
kind: Service
metadata:
name: myapp-service
spec:
type: NodePort
ports:
- targetPort: 80 #지정하지않으면 port와 같은포트 지정됨
port: 80 # 필수로 적어줘야 함
nodePort: 30008 #지정하지 않으면 랜덤으로 포트 지정됨
selector:
app: myapp #pod의 labels.app 적용
type: front-end #pod의 labels.type 적용
#pod yaml
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
type: front-end
sepc:
containers:
- name: nginx-containers
image: nginx
- 같은 레벨이 있는 포드를 찾아 자동으로 배치, 무작위 알고리즘 사용
- 여러노드에 파드가 분산되어 있어도 서비스는 타깃 포트로 모든 노드로 알아서 보내 줌
Loadbalnacer
apiVersion: v1
kind: Service
metadata:
name: nginx-loadbalancer
spec:
selector:
app: nginx
type: LoadBalancer
ports:
- name: http
port: 80 # 서비스가 노출하는 포트
targetPort: 8080 # Pod에서 애플리케이션이 실행 중인 포트
protocol: TCP
- 필수 필드 설명:
- type: LoadBalancer: 서비스 유형을 LoadBalancer로 설정.
- selector: 연결할 Pod를 식별하는 레이블.
- ports:
- port: 클라이언트가 요청을 보낼 서비스 포트.
- targetPort: Pod 내부 애플리케이션 포트.
LoadBalancer 서비스란?
- 정의:
- Kubernetes의 서비스 유형 중 하나로, 클라우드 제공자의 외부 로드 밸런서를 통해 애플리케이션을 외부 네트워크에 노출.
- 클러스터 내부의 여러 Pod에 대한 트래픽을 분산 처리하며, 단일 IP 주소를 통해 접근 가능.
- 필요성:
- NodePort 서비스는 각 노드의 IP와 포트를 통해 접근해야 하므로 사용자 경험이 불편.
- LoadBalancer는 단일 URL 또는 IP를 제공하여 사용자 접근을 간소화.
주요 특징
-
-
- 단일 진입점 제공:
- 외부 사용자가 단일 IP 주소 또는 도메인 이름으로 애플리케이션에 접근 가능.
- 예: votingapp.com 또는 resultapp.com.
- 자동 부하 분산:
- 여러 Pod에 트래픽을 균등하게 분산하여 고가용성과 성능 보장.
- 클라우드 통합:
- AWS, GCP, Azure와 같은 클라우드 플랫폼에서 네이티브 로드 밸런서를 자동으로 생성 및 구성.
- 노드 간 트래픽 라우팅:
- 클러스터 내 모든 노드에서 동일한 포트를 통해 애플리케이션에 접근 가능.
- 건강 상태 확인:
- Pod의 상태를 실시간으로 모니터링하고, 비정상적인 Pod로의 트래픽을 차단.
- Pod의 상태를 실시간으로 모니터링하고, 비정상적인 Pod로의 트래픽을 차단.
- 단일 진입점 제공:
-
LoadBalancer 서비스 동작 방식
- 클라우드 환경에서의 동작:
- 클라우드 제공자의 API와 통합하여 로드 밸런서를 생성.
- 로드 밸런서는 NodePort를 통해 클러스터 내부로 트래픽을 전달.
- 비클라우드 환경에서의 동작:
- VirtualBox와 같은 비지원 환경에서는 NodePort와 동일하게 동작.
- 외부 로드 밸런서가 생성되지 않음.
반응형