반응형
들어가며: Pod와 외부 트래픽 연결 문제
Kubernetes에서 Pod는 기본적으로 동적 IP를 사용합니다.
Pod가 재시작되면 IP가 변경되기 때문에, 외부 트래픽을 안정적으로 연결할 수 있는 방법이 필요합니다.
이 문제를 해결하는 리소스가 바로 Service입니다.
이번 글에서는 다음을 다룹니다:
- Kubernetes Service의 개념과 필요성
- Service가 Pod와 통신하는 방식
- ClusterIP, NodePort, LoadBalancer 소개
- YAML 예제와 실습 방법
목차 (Table of Contents)
- Kubernetes Service란 무엇인가?
- 왜 Service가 필요한가?
- Service의 주요 특징
- ClusterIP: 기본 내부 서비스
- NodePort: 외부 접근
- LoadBalancer: 클라우드 환경의 로드밸런싱
- Service YAML 예제
- FAQ (Answer Engine Optimization)
- 핵심 요약
- 마무리
1. Kubernetes Service란 무엇인가?
Service는 Pod의 IP 변경에도 불구하고 안정적인 네트워크 접근을 제공하는 리소스입니다.
간단히 말해, Pod 집합에 대한 고정된 네트워크 엔드포인트 역할을 합니다.
2. 왜 Service가 필요한가?
- Pod는 재시작될 때마다 IP가 변경됩니다.
- 여러 Pod(ReplicaSet, Deployment)로 구성된 애플리케이션에 단일 접점을 제공해야 합니다.
- 로드밸런싱 및 서비스 디스커버리(Discovery)를 지원합니다.
3. Service의 주요 특징
- Pod 셀렉터(Selector) 기반으로 동작
- kube-proxy가 Service 트래픽을 관리
- 엔드포인트(Endpoints) 리소스를 통해 Pod와 연계
- 다양한 Service 타입(ClusterIP, NodePort, LoadBalancer) 제공
4. ClusterIP: 기본 내부 서비스
- Kubernetes의 기본 Service 타입
- 클러스터 내부에서만 접근 가능
- 테스트 또는 마이크로서비스 간 통신에 적합
예제:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
type: ClusterIP
5. NodePort: 외부 접근
- 각 노드에 **고정 포트(30000~32767)**를 할당하여 외부 접근 가능
http://<노드IP>:<NodePort>
로 접속 가능- 테스트 환경에서 주로 사용
예제:
type: NodePort
ports:
- port: 80
targetPort: 8080
nodePort: 30080
6. LoadBalancer: 클라우드 환경의 로드밸런싱
- **클라우드 프로바이더(AWS, GCP, Azure)**에서 로드밸런서를 자동 생성
- 외부 트래픽을 여러 노드와 Pod로 분산
- 운영 환경에서 가장 많이 사용되는 타입
예제:
type: LoadBalancer
ports:
- port: 80
targetPort: 8080
7. Service YAML 예제
다음은 Deployment + Service를 함께 사용하는 예시입니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: nginx
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- port: 80
targetPort: 8080
type: ClusterIP
8. FAQ (Answer Engine Optimization)
Q1. NodePort와 LoadBalancer의 차이는?
A. NodePort는 노드의 고정 포트를 열어 접근하고, LoadBalancer는 클라우드 로드밸런서를 통해 트래픽을 분산시킵니다.
Q2. Service 없이 Pod에 접근할 수 있나요?
A. 가능하지만, Pod IP가 변할 수 있어 안정적인 접근을 위해 Service를 사용하는 것이 일반적입니다.
Q3. ClusterIP는 외부에서 접근할 수 없나요?
A. 기본적으로 불가능하지만, kubectl port-forward
나 Ingress를 통해 우회할 수 있습니다.
9. 핵심 요약
타입 | 접근 범위 | 사용 사례 |
---|---|---|
ClusterIP | 내부 통신 | 마이크로서비스 간 통신 |
NodePort | 외부 접근 | 개발/테스트 환경 |
LoadBalancer | 외부 접근 | 운영 환경 (클라우드) |
10. 마무리
Service는 Pod의 네트워크 접근성을 안정적으로 보장하는 핵심 리소스입니다.
반응형
'개발 창고 > Server' 카테고리의 다른 글
네트워킹 - Part3: 서비스 타입 알아보기 (1) | 2025.07.28 |
---|---|
네트워킹 - Part2: 서비스의 역할 (3) | 2025.07.27 |
Pod 살펴보기 - Part7: Pod의 건강상태는? (4) | 2025.07.25 |
Pod 살펴보기 - Part6: 컨테이너 한 개로는 부족해 (1) | 2025.07.24 |
Pod 리소스 관리: Requests, Limits, QoS 완벽 이해하기 (2) | 2025.07.23 |