[Kubernetes] 15. 서비스와 네트워크 (1편) - 개요

JIWON·2025년 7월 7일

Kubernetes

목록 보기
15/32
post-thumbnail

1. Service API 란?

1) 개요

쿠버네티스에서 Service API 카테고리로 분류되는 리소스들은 클러스터 상의 컨테이너에 올바르게 접속하기 위한 네트워크 엔드포인트를 제공하거나, 레이블과 일치하는 컨테이너를 찾아내는(Discovery) 역할을 한다.

사용자가 직접 사용하는 리소스는 크게 두 가지 로드 밸런싱 레벨로 나뉜다.

  1. 서비스(Service): L4 레벨의 로드 밸런싱을 제공 (IP + Port 기반)

  2. 인그레스(Ingress): L7 레벨의 로드 밸런싱을 제공 (HTTP/HTTPS, URL 경로 기반)

이 리소스들은 목적에 따라 클러스터 내부 혹은 외부에서 파드에 접속할 수 있는 창구가 되거나, 고정된 가상 IP 등을 통해 안정적인 통신을 보장한다.

2) 종류

Service API에 속하는 리소스들은 다음과 같다.

  1. Service

    • ClusterIP: 클러스터 내부에서만 접근 가능한 가상 IP를 할당 (기본값)

    • ExternalIP: ClusterIP의 확장 형태로, 특정 외부 IP를 서비스에 매핑함

    • NodePort: 모든 노드의 특정 포트를 개방하여 외부에서 접근하게 함

    • LoadBalancer: 클라우드 공급자(AWS, GCP 등)의 로드 밸런서를 프로비저닝하여 외부와 연결

    • Headless (None): ClusterIP를 할당하지 않고, DNS를 통해 파드의 IP를 직접 반환

    • ExternalName: 외부 도메인(예: https://www.google.com/search?q=google.com)을 내부 서비스 이름으로 매핑

    • None-Selector: 셀렉터 없이 엔드포인트를 사용자가 직접 지정하여 사용하는 방식

  2. Ingress: HTTP/HTTPS 경로를 기반으로 서비스를 외부로 노출함함


2. 쿠버네티스 클러스터 네트워크와 서비스

1) 파드 간 통신 구조

쿠버네티스 클러스터는 생성 시 노드 상에 파드를 위한 내부 네트워크가 자동으로 구성된다.

  1. 같은 파드 내 컨테이너 간 통신

    • 하나의 파드 안에 있는 컨테이너들은 동일한 네트워크 네임스페이스와 IP를 공유한다

    • 따라서 localhost를 통해 포트 번호로 서로 통신할 수 있다.

  2. 다른 파드 간 통신

    • 각 파드는 고유한 IP 주소를 할당받으며, NAT(주소 변환) 없이 서로의 IP로 직접 통신할 수 있는 구조(Flat Network)를 가진다.
      • 파드간 통신 구조
  3. 내부 네트워크 구성(CNI)

    • 이러한 네트워크는 CNI(Container Network Interface) 플러그인(예: Calico, Flannel, AWS VPC CNI 등)에 의해 구현된다.

    • 기본적으로 노드별로 다른 네트워크 대역(CIDR)을 할당받으며, 노드 간 트래픽은 VXLAN(오버레이 네트워크)이나 L2 Routing 기술을 통해 캡슐화되어 전송됨

      • 클러스터 내부 파드 네트워크 전반

2) 서비스를 사용하는 이유

파드 간에는 IP를 통해 직접 통신이 가능함에도 불구하고, 서비스(Service)라는 별도의 리소스가 필요한 이유는 가장 큰 이유는 '파드의 휘발성(Ephemeral)' 때문이다.

📌 추가 설명
파드는 스케일링, 업데이트, 혹은 장애 발생 시 언제든 죽고 새로 생성되므로 영구적이지 않다. 이때 파드는 새로운 IP 를 할당 받게 되는데, 클라이언트는 통신해야 될 대상인 파드의 IP가 계속 변하는 문제가 발생한다.

서비스를 사용하면 아래와 같은 이점을 얻을 수 있다.

① 파드에 대한 트래픽 로드 밸런싱 (Load Balancing)

Deployment를 통해 여러 개의 Pod를 운영할 때, 각 파드는 서로 다른 IP를 가진다. 서비스를 사용하지 않는다면 클라이언트는 이 모든 파드의 IP 목록을 실시간으로 추적하고 관리해야 한다.

  • 서비스의 역할: 서비스는 여러 파드를 묶어 하나의 EndPoint를 제공

  • 동작: 클라이언트가 서비스의 가상 IP(ClusterIP)로 요청을 보내면, 서비스는 연결된 여러 파드 중 하나로 트래픽을 적절히 분산(로드 밸런싱)하여 전달한다.

② 서비스 디스커버리 (Service Discovery)

서비스 디스커버리는 클라이언트가 접속해야 할 대상(서비스)의 위치(IP/Port)를 자동으로 찾아내는 메커니즘이다.
MSA 환경에서는 서비스가 빈번하게 생성되고 소멸하므로, 자동화된 검색 기능이 필수적입니다.

  • 개념: IP 주소를 하드코딩하지 않고, "이름(Service Name)"만으로 통신 대상을 찾을 수 있게 해준다. 파드의 IP가 바뀌어도 서비스의 이름과 서비스 IP는 유지되므로 안정적인 통신이 가능함

  • 쿠버네티스의 제공 방식:

    1. 환경 변수(Environment Variables): 파드가 생성될 때, 현재 존재하는 서비스들의 정보를 환경 변수로 주입받음. (생성 순서에 의존적이므로 잘 사용되지 않음)

    2. DNS A 레코드: my-service.default.svc.cluster.local과 같은 도메인 이름을 쿼리하면 서비스의 IP를 반환합니다. (가장 일반적인 방식)

    3. DNS SRV 레코드: IP뿐만 아니라 포트 번호와 프로토콜 정보까지 포함하여 응답합니다.

0개의 댓글