쿠버네티스 서비스 유형(Kubernetes Service Types)
Kubernetes에서 서비스 유형은 클러스터 내의 애플리케이션을 외부 또는 다른 파드와 연결하는 방법을 정의합니다. 서비스는 파드의 IP 주소가 동적으로 변경될 수 있기 때문에 안정적인 네트워크 접점을 제공하는 역할을 합니다.
서비스 유형 비교
서비스 유형 | 외부 접근 가능 | 로드 밸런싱 | 사용 사례 |
Cluster IP | 아니요 | 예 | 클러스터 내부 통신 |
NodePort | 예 | 예 | 외부에서 간단히 접근 가능 |
LoadBalancer | 예 | 예 | 클라우드 환경에서 외부 트래픽을 분배 |
Ingress | 예 | 예 | 여러 서비스에 대한 경로 기반 라우팅 |
Port Forwarding | 예 | 아니요 | 로컬 개발 환경에서 파드에 접근 |
External IP | 예 | 아니요 | 특정 노드에 외부 IP 할당 |
ExternalName | 아니요 | 아니요 | 외부 서비스를 클러스터 내에서 일관되게 접근 |
Headless Service | 아니요 | 아니요 | 파드의 직접 접근 필요 |
1. ClusterIP
기능 : 클러스터 내부에서만 접근 가능한 가상 IP를 제공합니다.
사용 사례 : 클러스터 내의 파드들이 서로 통신할 때 사용합니다.
장점
- 간단한 설정으로 클러스터 내에서 안정적인 통신 가능.
- 기본값으로 자동 설정되어 특별한 구성 필요 없음.
단점
- 외부에서는 접근할 수 없으며 오직 클러스터 내부에서만 접근 가능.
2. NodePort
기능 : 각 노드에서 지정된 포트를 열어 외부에서 클러스터 내부의 서비스에 접근할 수 있게 합니다.
사용 사례 : 클러스터 외부에서 서비스에 접근해야 하지만 간단한 설정이 필요할 때 사용합니다.
장점
- 외부에서 클러스터의 노드 IP와 포트를 통해 접근 가능.
- 클러스터 외부에서 쉽게 테스트 가능.
단점
- 노드의 IP를 알아야 하며 노드가 많을 경우 관리가 번거로울 수 있음.
- 특정 포트 범위(30000-32767) 내에서만 사용할 수 있음.
3. LoadBalancer
기능 : 클라우드 환경에서 외부 로드 밸런서를 생성하여 외부에서 서비스에 접근할 수 있게 합니다.
사용 사례 : 클라우드 환경에서 외부 트래픽을 클러스터의 서비스로 라우팅할 때 사용합니다.
장점
- 외부에서의 접근을 위한 공인 IP와 로드 밸런싱을 자동으로 제공.
- 클라우드 제공자가 관리하므로 설정이 간편.
단점
- 클라우드 환경에서만 사용할 수 있음.
- 클라우드 서비스 비용이 추가될 수 있음.
4. Ingress
기능 : HTTP 및 HTTPS 경로 기반의 라우팅을 제공하여 도메인 이름을 통해 여러 서비스에 접근할 수 있게 합니다.
사용 사례 : 여러 서비스에 대한 외부 접근을 관리하고, 경로 기반 라우팅을 통해 트래픽을 분배할 때 사용합니다.
장점
- 하나의 공인 IP로 여러 서비스에 접근 가능.
- TLS/SSL 인증서 관리와 경로 기반 라우팅을 지원.
단점
- 설정이 복잡하며 Ingress Controller를 설치해야 함.
- 모든 클라우드 환경에서 완전히 지원되지 않을 수 있음.
5. Port Forwarding
기능 : 로컬 컴퓨터에서 Kubernetes 클러스터 내의 특정 파드에 직접 접근할 수 있게 포트를 포워딩합니다.
사용 사례 : 로컬 개발 환경에서 클러스터 내 파드의 특정 포트에 접근해야 할 때 사용합니다.
장점
- 간단한 명령으로 로컬에서 파드에 직접 접근 가능.
- 클러스터 내부 네트워크에 대한 자세한 지식 없이도 사용할 수 있음.
단점
- 일시적이며 로컬 머신과 클러스터 간 연결이 필요함.
- 스케일링 및 프로덕션 환경에는 적합하지 않음.
6. External IP
기능 : 특정 노드에 외부 IP를 직접 할당하여 외부 트래픽을 받아들이고, 이를 서비스로 라우팅합니다.
사용 사례 : 물리적 서버 또는 특정 외부 IP가 필요한 상황에서 사용합니다.
장점
- 특정 노드의 IP 주소를 외부에 직접 노출 가능.
- 노드 수준에서의 외부 접근이 필요할 때 유용.
단점
- 특정 노드에만 적용되며 노드의 고가용성 문제가 발생할 수 있음.
- 클라우드 환경에 따라 지원 여부가 다를 수 있음.
7. ExternalName
기능: 외부에 있는 서비스를 Kubernetes 서비스로 매핑합니다. 주로 DNS CNAME 레코드를 통해 외부 서비스를 참조합니다.
사용 사례 : 클러스터 내부에서 외부 서비스(예: 데이터베이스, API 등)에 접근할 때 사용합니다.
장점
- 클러스터 내부에서 외부 서비스를 일관되게 접근 가능.
- 설정이 간단하며 외부 서비스의 DNS 이름만 필요함.
단점
- 외부 서비스에 대한 DNS 이름 변경 시 재배포 필요.
- 트래픽은 외부 DNS를 통해 라우팅되므로 성능에 영향을 줄 수 있음.
8. Headless Service
기능 : 클러스터IP 없이 DNS 레코드를 통해 개별 파드에 직접 접근할 수 있도록 합니다.
사용 사례 : StatefulSet 등에서 개별 파드에 직접 접근이 필요할 때 사용합니다.
장점
- 개별 파드의 DNS 이름을 통해 파드에 직접 접근 가능.
- 로드 밸런싱 없이 클라이언트가 직접 파드를 제어할 수 있음.
단점
- 클라이언트가 로드 밸런싱 및 파드 선택을 직접 처리해야 함.
- 클러스터 내부에서만 사용 가능.
참고URL
- The Baeldung : ClusterIP, NodePort, and LoadBalancer: Kubernetes Service Types
- Undefined - Blog by Eunsu Kim : 쿠버네티스 서비스(Service) 개념 정리
- Kubernetes Documentation : 서비스, 로드밸런싱, 네트워킹
- Kubernetes Documentation : 서비스와 애플리케이션 연결하기
- Kubernetes Documentation : 외부 로드 밸런서 생성하기
- Sysdig : Kubernetes Services: ClusterIP, Nodeport and LoadBalancer
'리눅스' 카테고리의 다른 글
쿠버네티스 워커 노드를 설치하고 클러스터에 참여시키기 (0) | 2024.08.16 |
---|---|
쿠버네티스 클러스터에서 노드를 재기동하는 방법 (0) | 2024.08.16 |
쿠버네티스 클러스터를 구현하는 방법 (0) | 2024.08.15 |
HAProxy에서 TLS/SSL 인증서를 생성하고 적용하는 방법 (0) | 2024.08.12 |
외부 etcd TLS 클러스터를 구성하고 kubeadm을 사용하여 쿠버네티스 클러스터를 설정하는 방법 (0) | 2024.08.09 |