Nodejs

 

 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로 확장하면 외부 접근이 가능해집니다.

 

 

이 전체 내용 요약

  1. ClusterIP는 쿠버네티스 서비스의 기본 타입으로, 클러스터 내부 전용 IP를 부여한다.

  2. nginx Pod 3개를 Deployment로 생성하고, ClusterIP Service로 묶었다.

  3. 외부에서는 접근할 수 없고, 클러스터 내부 Pod에서만 접근 가능하다.

  4. curl Pod을 실행하여 nginx-cluster-ip-service에 요청 시 nginx Welcome 페이지를 확인했다.

  5. ClusterIP는 내부 마이크로서비스 통신의 핵심 도구이며, 외부 노출이 필요할 경우 NodePort나 LoadBalancer로 확장한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

about author

PHRASE

Level 60  라이트

공자는 성인으로서 때를 알아서 해 나간 사람이었다. 즉 공자는 완급, 출처, 진퇴 등 모든 것을 그 때를 알아서 해 나가는 성인이라는 말. 백이(伯夷)는 성인으로서 맑았던 사람이고 이윤(伊尹)은 성인으로서 사명을 자임하였던 사람이고 유하혜(柳下惠)는 성인으로서 온화한 기질을 가졌던 사람이었다. -맹자

댓글 ( 0)

댓글 남기기

작성