Core-Concepts/36/Service

y001·2025년 2월 9일
post-thumbnail

Service

✔ Pod 간의 네트워크 통신을 가능하게 함
✔ 외부 트래픽을 Kubernetes 내부로 연결함
✔ Pod는 동적으로 생성되고 삭제되므로, 직접 Pod의 IP를 사용할 수 없음
✔ Service는 하나의 고정된 네트워크 인터페이스(ClusterIP) 를 제공하여 지속적인 접근 가능

Kubernetes Service 유형

NodePort (외부 노출)

  • 외부 트래픽을 특정 노드의 특정 포트 → Pod 내부로 전달
    kubectl create service nodeport my-service --tcp=80:80

✅ 구성 요소

  • TargetPort: Pod 내부에서 애플리케이션이 실행되는 포트 (예: 80)
  • Port: Service에서 사용할 포트 (80)
  • NodePort: 노드에서 외부에 개방할 포트 (30008)

✅ 예제 : 사용자는 http://<노드IP>:30008로 접근 가능

ClusterIP (내부 통신)

  • 기본적으로 Kubernetes 내에서만 접근 가능한 서비스
  • 내부 Pod들 간의 통신을 지원
    kubectl create service clusterip my-service --tcp=80:80

✅ 예제

  • 백엔드 Pod이 my-service:80을 호출하여 다른 Pod과 통신 가능

LoadBalancer (클라우드 환경에서 외부 노출)

  • AWS, GCP, Azure 같은 클라우드 환경에서 외부 트래픽을 자동으로 로드 밸런싱
  • 클라우드 제공자의 로드 밸런서를 활용하여 다중 노드에 트래픽 분산
    kubectl create service loadbalancer my-service --tcp=80:80

✅ 예제

  • 사용자는 http://my-loadbalancer.com으로 접속 가능

주요 명령어

YAML 파일을 사용한 생성

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
    # Pod(8080) → 서비스(80) → 노드(30008) → 사용자.
    # 사용자가 외부에서 접근 (http://192.168.1.100:30008)
    - protocol: TCP
      port: 80         # Service 내부 포트
      targetPort: 8080  # Pod 내부 포트
      nodePort: 30008   # 노드에서 개방할 포트 (NodePort 타입일 경우)
  type: NodePort

CLI를 사용한 생성

kubectl expose deployment my-app --type=NodePort --port=80 --target-port=8080
kubectl create service nodeport my-service --tcp=80:80

0개의 댓글