본문 바로가기
Infra/Kubernetes

서비스

by TrendPilot 2025. 2. 21.

Kubernetes 서비스는 클러스터 내에서 실행 중인 pod들에 접근하기 위한 추상화된 방법을 제공하는 핵심 리소스입니다.

 

일반적으로 일시적인 특성을 가진 파드는 언제든 새로 생성되고, 삭제 됨에 따라 파드가 가진 IP 주소도 동적으로 변경될 수 있습니다.

 

이 때문에 Kubernetes 서비스는 일시적인 파드 앞에서 Endpoints 를 제공하여 고정된 진입점 역할을 수행하며 안정적으로 네트워크 연결을 할 수 있게 합니다.

 

Endpoints (리소스 명칭이 복수형입니다.)
네트워크 엔드포인트의 목록을 정의하며, 일반적으로 트래픽이 어떤 파드에 보내질 수 있는지를 정의합니다.

서비스 타입

ClusterIP

https://excalidraw.com/ 에서 그렸습니다.

서비스 타입의 default 값 입니다. 서비스를 클러스터 내부 IP 에 노출을 시키는데 클러스터 내에서만 서비스에 동작할 수 있습니다.

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080

 


NodePort

각 노드의 IP 에 서비스를 노출시킵니다. 노출된 각 노드의 특정 포트를 통해 외부 접근을 허용하여 동작합니다.

apiVersion: v1
kind: Service
metadata:
  name: my-nodeport-service
spec:
  type: NodePort
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
      nodePort: 30000

 


LoadBalancer

https://excalidraw.com/ 에서 그렸습니다.

클라우드 제공자의 로드 밸런서를 사용하여 외부에 서비스를 노출시켜 동작합니다.

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app.kubernetes.io/name: MyApp
  ports:
    - protocol: TCP
      port: 80
      targetPort: 9376
  clusterIP: 10.0.171.239
  type: LoadBalancer
status:
  loadBalancer:
    ingress:
    - ip: 192.0.2.127

ExternalName

외부 서비스를 클러스터 내부로 매핑시켜 동작합니다.


서비스 주요 기능

서비스 디스커버리

클러스터 내에서 자동으로 서비스를 탐색합니다.

 

* 메커니즘
서비스 디스커버리는 마이크로서비스 간의 통신(IPC: Inter-Process Communication)을 가능하게 하는 핵심 메커니즘입니다.
- DNS 이름에 여러 IP를 할당하여 특정 IP를 찾아가도록 함
- kube-proxy와 selector를 통해 서비스 디스커버리 구현
- 파드의 동적인 IP 변경에도 안정적인 엔드포인트 제공

 

로드 밸런싱

여러 Pod 로 네트워크 트래픽을 분배하여 부하를 분산시킵니다.

 

* 작동 방식
- 클라이언트와 서버 사이에서 트래픽을 관리
- 여러 파드에 걸쳐 네트워크 트래픽을 균등하게 분배
- 각 파드가 최적의 성능을 발휘할 수 있도록 부하 분산

 

엔드 포인트

파드의 생성, 제거와 상관없이 일관된 접근점(Endpoints) 을 제공합니다.

 

DNS 통합

CoreDNS 를 활용하여 Service 에 대한 Domain Name 을 제공합니다.


서비스 동작 방식

1.서비스 생성

쿠버네티스 에서 service 객체를 생성하여 특정 pod 에 대한 네트워크 접근을 제공합니다.

 

2.엔드포인트 생성

서비스가 선택한 pod 들의 IP 주소와 port 를 엔드포인트 객체로 관리합니다.

 

3.kube-proxy 설정

kube-proxy 가 iptables 또는 IPVS 를 사용하여 서비스 IP 를 실제 pod IP 로 라우팅 합니다.

 

4.DNS 레코드 생성

kube-dns 또는 CoreDNS 가 해당 서비스에 대한 DNS 엔트리를 생성하여, 서비스명을 도메인 처럼 사용 가능하게 합니다.

 

5.트래픽 처리

클러스터 내부 혹은 외부에서 들어오는 트래픽을 kube-proxy 가 적절한 pod 로 전달합니다.

 

6.모니터링

서비스 상태 및 성능을 모니터링 합니다.

 

감사합니다.

'Infra > Kubernetes' 카테고리의 다른 글

CNI  (0) 2025.03.06
Helm  (1) 2025.02.27
CRI & 컨테이너 런타임  (0) 2025.02.20
파드 생성 과정  (0) 2025.02.18
etcd  (0) 2025.02.17