Kubernetes Service 실습: ClusterIP 이해와 적용
1. Kubernetes Service 개념: ClusterIP란?
쿠버네티스에서 Service는 동적으로 변하는 Pod를 하나의 고정된 네트워크 엔드포인트로 묶어주는 역할을 합니다. Pod는 언제든지 죽거나 재생성될 수 있기 때문에, 클러스터 내부에서 안정적인 접근점을 제공하려면 Service가 반드시 필요합니다.
그중 ClusterIP는 기본 Service 타입으로, 클러스터 내부에서만 접근 가능한 가상의 IP를 부여합니다.
쉽게 말해, ClusterIP는 "클러스터 내부 전용 전화번호"입니다. 외부에서는 걸 수 없고, 내부의 Pod들끼리만 이 번호를 사용해 서로 통화할 수 있는 셈이죠.
2. Deployment와 Service 설정 파일 분석
먼저 deployment.yml입니다.
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80
주요 포인트:
replicas: 3 → nginx Pod가 3개 생성됨
labels: app: nginx → Service가 이 라벨을 기준으로 Pod를 선택
containerPort: 80 → Pod 내부에서 80포트를 열어줌
이제 cluster_ip.yml을 보겠습니다.
apiVersion: v1 kind: Service metadata: name: nginx-cluster-ip-service spec: selector: app: nginx type: ClusterIP ports: - port: 80 # Cluster 내부에서 노출할 포트 targetPort: 80 # Pod의 컨테이너 포트
주요 포인트:
type: ClusterIP → 클러스터 내부에서만 접근 가능
port: 80 → 클러스터 내부 접근 포트
targetPort: 80 → 실제 Pod 컨테이너의 포트와 연결
결국, 클러스터 안에서는 nginx-cluster-ip-service:80 으로 Pod들에 접근할 수 있습니다.
3. kubectl 명령어로 실습 진행
이제 설정 파일을 적용해 봅니다.
kubectl apply -f ./8_cluster_ip/
출력 결과:
service/nginx-cluster-ip-service created deployment.apps/nginx-deployment created
서비스 목록 확인:
kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2d18h nginx-cluster-ip-service ClusterIP 10.99.1.243 <none> 80/TCP 11s
➡️ 여기서 nginx-cluster-ip-service에 10.99.1.243이라는 클러스터 전용 IP가 부여된 것을 확인할 수 있습니다.
4. Cluster 내부에서 접근 테스트
ClusterIP는 외부에서 바로 접근할 수 없으므로, 클러스터 내부에서 curl Pod를 실행해 접근해야 합니다.
kubectl run test-curl --rm -it --image=curlimages/curl -- /bin/sh
Pod 안으로 들어간 뒤, ClusterIP 서비스를 호출해 봅니다:
curl nginx-cluster-ip-service
출력 결과:
<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> ... <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working.</p> ... </html>
➡️ 내부 curl Pod에서 정상적으로 nginx의 기본 Welcome 페이지가 출력되었습니다.
5. 응용 포인트
마이크로서비스 간 통신: ClusterIP는 외부 노출이 필요 없는 내부 서비스 간 통신에 최적입니다.
보안성: 외부에서 접근 불가능하기 때문에 보안적으로 안전합니다.
DNS 이름 활용: nginx-cluster-ip-service 같은 서비스 이름은 자동으로 DNS에 등록되므로, 다른 Pod는 IP 대신 서비스 이름으로 접근할 수 있습니다.
실습 확장: ClusterIP를 기반으로, NodePort나 LoadBalancer로 확장하면 외부 접근이 가능해집니다.
✅ 이 전체 내용 요약
ClusterIP는 쿠버네티스 서비스의 기본 타입으로, 클러스터 내부 전용 IP를 부여한다.
nginx Pod 3개를 Deployment로 생성하고, ClusterIP Service로 묶었다.
외부에서는 접근할 수 없고, 클러스터 내부 Pod에서만 접근 가능하다.
curl Pod을 실행하여 nginx-cluster-ip-service에 요청 시 nginx Welcome 페이지를 확인했다.
ClusterIP는 내부 마이크로서비스 통신의 핵심 도구이며, 외부 노출이 필요할 경우 NodePort나 LoadBalancer로 확장한다.
댓글 ( 0)
댓글 남기기