심플코더
간단한 코딩 공간
   

글쓰기    관리    수식입력
  • 분류 전체보기 (84)
    • AWS (1)
    • JavaScript (11)
    • 개인학습 (5)
    • DB (11)
    • OS (9)
    • Network (7)
    • DevOps (0)
    • TypeScript (1)
    • 개발 (1)
    • CKA (28)
hELLO · Designed By 정상우.
심플코더

간단한 코딩 공간

CKA

(TIL) Kube-Proxy

Kubernetes의 Pod 네트워크

Kubernetes에서 모든 Pod는 클러스터 내부의 가상 네트워크에 연결된다.

이 네트워크는 모든 Node 간에 공유되며, 이를 통해 Pod이 서로 통신할 수 있다.

간단히 말해서 Kubernetes는 자체적으로 하나의 가상 네트워크를 구성하여 Pod간의 통신을 지원한다.

Pod의 주소 문제

Kubernetes 내부에 두 개의 어플리케이션이 실행되고 있다고 가정해보자

Node1: Web application이 실행  
Node2: DB가 실행

Web application은 DB의 Pod IP 주소를 사용해서 DB에 접근하고 데이터에 대한 읽기와 쓰기 작업을 진행할 것이다.
다만 여기서 문제는 Pod의 IP 주소는 동적으로 변경될 수 있다는 점이다. Pod이 삭제되거나 재시작되면 새로운 IP주소가 할당되는데, 이러한 IP의 변경사항을 추적하면서 Web application이 DB에 연결을 시도하는 것은 거의 불가능에 가까운 일이다.

이러한 문제를 해결하기 위한 것이 Kubernetes의 Service이다.

Kubernetes Service와 kube-proxy의 역할

Kubernetes Service

Service란 Pod의 네트워크 접근을 쉽게 하기위한 Kubernetes의 개념이다.
Pod을 고정된 네트워크 엔드포인트로 만들고, 내부적으로 실제 Pod으로 트래픽을 전달한다.

Service의 예시 yaml 파일은 아래와 같다.

apiVersion: v1
kind: Service
metadata:
  name: database-service
spec:
  selector:
    app: database
  ports:
    - protocol: TCP
      port: 3306
      targetPort: 3306

다만 Service는 Pod처럼 실제로 실행되는 컨테이너가 아니며, 단순한 논리적 개념이다.

즉 자체적인 네트워크 인터페이스를 가지지않으며 물리적으로 존재하는 개체가 아닌것이다.

그렇다면 어떻게 Service는 클러스터 내부에서 고정된 IP주소를 가질 수 있을까?

여기서 kube-proxy가 사용된다.

kube-proxy

kube-proxy는 kubernetes 클러스터에서 Service를 실제로 동작하게 만드는 핵심 컴포넌트이다.

쉽게말해, kube-proxy는 트래픽을 Service에서 실제 Pod으로 라우팅하는 역할을 한다.

새로운 서비스가 생성되면 이를 감지하고 네트워크 규칙을 설정하며, iptables 또는 IPVS를 사용하여 트래픽을 제어한다.

kube-proxy의 동작방식

웹 어플리케이션이 데이터베이스에 접근한다고 가정해보자

요청 대상
웹 애플리케이션 http://database-service:3306
Service IP 주소 10.16.0.10
실제 DB의 IP 주소 10.11.0.12

웹 어플리케이션이 service를 호출하면, kube-proxy가 생성한 iptables 규칙에 따라 10.16.0.10으로 들어온 트래픽은 10.11.0.12로 전달된다.
위 과정을 통해 웹 어플리케이션의 요청이 실제 pod로 routing되는 것이다.

kube-proxy의 특징

kube-proxy는 클러스터 내의 모든 노드에서 실행되는 프로세스로, kubernetes는 kube-proxy를 DaemonSet으로 실행한다.

여기서 DaemonSet이란 Kubernetes에서 특정 Pod이 모든 노드에서 실행되도록 보장하는 메커니즘이다. 즉, 클러스터에 새로운 노드가 추가되면 자동으로 kube-proxy Pod이 생성된다.

kube-proxy의 설정 파일 확인 방법

kubeadm을 사용한 경우 DaemonSet의 형태로 자동 배포되며, 수동으로 구축한 경우는 시스템 서비스로 실행된다.

설정파일의 경우 kubeadm은 /etc/kubernetes/manifests/kube-proxy.yaml에 저장되며
수동으로 설정한 경우 /etc/systemd/system/kube-proxy.service에 위치한다.

'CKA' 카테고리의 다른 글

(TIL) Replicaset  (0) 2025.03.15
(TIL) Kubernetes의 Pod  (0) 2025.03.13
(TIL) Kube-Scheduler  (0) 2025.03.09
(TIL) Kube Controller Manager in Kubernetes  (0) 2025.03.09
(TIL) Kube-API Server  (0) 2025.03.09
    'CKA' 카테고리의 다른 글
    • (TIL) Replicaset
    • (TIL) Kubernetes의 Pod
    • (TIL) Kube-Scheduler
    • (TIL) Kube Controller Manager in Kubernetes
    심플코더
    심플코더

    티스토리툴바