Service(SVC)
Kubernetes에서 Service(SVC)는 논리적 포드 세트와 액세스에 대한 정책을 정의하는 중요한 추상화입니다. 응용 프로그램에 안정적인 엔드 포인트를 제공하여 클러스터 내부 및 외부 모두의 원활한 상화 작용을 허용합니다.
Kubernetes 서비스는 동적 POD 관리의 복잡성에서 응용 프로그램 논리를 분리하여 트래픽 라우팅을 단순화하고 고가용성을 보장합니다.
Kubernetes 서비스는 무엇입니까?
Kubernetes 서비스는 응용 프로그램과 이를 향한 트래픽 사이의 다리 역할을 합니다. Pod는 휘발성 리소스이며, 언제든지 스케일 업/다운되거나 다시 시작될 수 있습니다. 서비스는 이러한 변경 사항에 관계 없이 안정적인 endpoint(Cluster IP, NodePort, LoadBalancer, External Name)을 통해 응용 프로그램에 액세스 할 수 있도록 합니다.
Kubernetes 서비스의 유형
Cluster IP
- 목적 : 가상 IP를 서비스에 할당하므로 클러스터 내에서만 엑세스 할 수 있습니다.
- 사용 사례 : 클러스터 내의 다른 앱이 소비해야하는 데이터 베이스 또는 마이크로 서비스와 같은 내부 서비스에서 사용
- 기본 유형 : 유형을 지정하지 않으면 Kubernetes는 클러스터 립 서비스를 만듭니다.
Nodeport
- 목적 : 클러스터의 특정 포트 모든 노드에 서비스를 노출시킵니다. 서비스는 <node ip>:<nodeport>(ex : 192.168.207.10:31222) 를 통해 외부에 엑세스 할 수 있게됩니다.
- 사용 사례 : 클라우드 제공 업체의 로드 밸런서에 의존하지 않고 외부 엑세스가 필요한 테스트, 개발 또는 시나리오
Load Balancer
- 목적 : 클라우드 제공 업체의 로드 밸런서와 통합되어 외부 트래픽에 서비스를 노출시킵니다.
- 사용 사례 : 안정적인 외부 로드 밸런싱이 필요한 프로덕션 애플리케이션
External Name
- 목적 : 서비스를 외부 DNS에 매핑합니다. 트래픽 프록시를 하지 않고 DNS 이름으로 직접 연결을 해결합니다.
- 사용 사례 : 클러스터 내부에서 서드 파티 또는 기존 레거시 외부 서비스를 호출해야하는 경우
NodePort 서비스 생성하기
예제(Nginx용 NodePort 생성)
- nginx-deployment-name : 기존 nginx 배포의 이름
- --type=NodePort : 서비스 유형을 NodePort로 설정
- --name=nginx-svc : 서비스 이름 설정
- --port=80 : 서비스가 노출될 포트 번호
# kubectl expose deployment nginx-deployment-name --type=NodePort --name=nginx-svc --port=80
service/nginx-svc exposed
서비스 확인
# k get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 76d
nginx-svc NodePort 10.107.124.94 <none> 80:31212/TCP 8s
Web Page 접속 확인
NodePort 로드 밸런싱 확인
NodePort 서비스를 생성하면, 쿠버네티스는 자동으로 들어오는 트래픽을 여러 Pod에 분산시킵니다. 로드 밸런싱이 작동하는지 확인하려면 다음을 실행합니다.
# kubectl get pods -o wide
nginx-deployment-76bc884bdf-g8g4z 1/1 Running 0 30s 10.99.23.84 jenkins211 <none> <none>
nginx-deployment-76bc884bdf-lz4nq 1/1 Running 0 28s 10.107.180.139 kubenode213 <none> <none>
nginx-deployment-76bc884bdf-z5569 1/1 Running 0 26s 10.108.5.17 kubenode214 <none> <none>
# curl 192.168.207.210:31212
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
쿠버네티스 로드 밸런싱의 장점
높은 가용성
트래픽을 여러 Pod에 분산하여 단일 장애 지점을 방지합니다. 하나의 Pod가 중단되더라도, 트래픽이 자동으로 건강한 Pod로 라우팅됩니다.
확장성
트래픽 변화에 따라 Pod 수를 동적으로 확장하거나 축소할 수 있으며, 쿠버네티스는 자동으로 트래픽 분배를 조정합니다.
성능 최적화
요청을 여러 Pod에 분산하여 지연 시간을 줄이고 전체 응답 시간을 개선합니다.
단순화된 트래픽 관리
개발자는 트래픽 라우팅, 확장성, 가용성 걱정 없이 애플리케이션 로직에만 집중할 수 있습니다.
'DevOps > Kubernetes' 카테고리의 다른 글
[EKS] kubectl 설치 & eksctl 명령어 설치 후 EKS 생성 test (0) | 2025.02.11 |
---|---|
[Kubernetes] CoreDNS: Kubernetes 네트워킹의 핵심을 파헤치다 (0) | 2025.02.08 |
[Kubernetes] Rolling Update : 점진적 업데이트, 버전 관리 (0) | 2025.02.06 |
[Kubernetes] Kubernetes Pod 및 Docker Container 최소 권한 관리 (0) | 2025.02.05 |
[Kubernetes] Kubernetes Deployment replicas 설정 이해 및 실습 (0) | 2025.02.04 |