본문으로 건너뛰기

Kubernetes 클러스터 아키텍처

Kubernetes 클러스터 아키텍처

목차


전체 네트워크 토폴로지

┌─────────────────────────────────────────────────────────────────────────────┐
│ Windows 호스트 (Physical) │
│ │
│ ┌──────────────────────────┐ ┌──────────────────────────┐ │
│ │ VMnet8 (NAT) │ │ VMnet1 (Host-only) │ │
│ │ 192.168.5.1/24 │ │ 172.100.100.1/24 │ │
│ │ ┌────────────────────┐ │ │ │ │
│ │ │ DHCP 범위: │ │ │ (호스트-VM 전용 통신) │ │
│ │ │ .201 ~ .254 │ │ │ │ │
│ │ └────────────────────┘ │ │ │ │
│ └──────────┬───────────────┘ └───────────┬──────────────┘ │
│ │ │ │
│ │ (외부 인터넷 연결) │ (관리 네트워크) │
└─────────────┼────────────────────────────────────┼──────────────────────────┘
│ │
│ │
┌─────────────┼────────────────────────────────────┼──────────────────────────┐
│ │ VMware Workstation │ │
│ │ │ │
│ ┌──────────▼────────────────────────────────────▼──────────────────────┐ │
│ │ k8s-master VM │ │
│ │ ┌────────────────────────────────────────────────────────────────┐ │ │
│ │ │ Ubuntu Server 24.04 │ │ │
│ │ │ - CPU: 2 Core │ │ │
│ │ │ - RAM: 4GB │ │ │
│ │ │ - Disk: 100GB (ext4) │ │ │
│ │ │ - Hostname: k8s-master │ │ │
│ │ │ - User: pista │ │ │
│ │ └────────────────────────────────────────────────────────────────┘ │ │
│ │ │ │
│ │ ┌─────────────────────┐ ┌─────────────────────┐ │ │
│ │ │ ens33 (NAT) │ │ ens37 (Host-only) │ │ │
│ │ │ 192.168.5.11/24 │ │ 172.100.100.2/24 │ │ │
│ │ │ │ │ │ │ │
│ │ │ Gateway: 192.168.5.2│ │ (No Gateway) │ │ │
│ │ │ DNS: 8.8.8.8 │ │ │ │ │
│ │ │ 8.8.8.4 │ │ │ │ │
│ │ └─────────────────────┘ └─────────────────────┘ │ │
│ │ │ │
│ │ ┌────────────────────────────────────────────────────────────────┐ │ │
│ │ │ Docker / containerd │ │ │
│ │ │ - Container Runtime: containerd │ │ │
│ │ │ - CRI: Container Runtime Interface │ │ │
│ │ │ - SystemdCgroup: enabled │ │ │
│ │ └────────────────────────────────────────────────────────────────┘ │ │
│ │ │ │
│ │ ┌────────────────────────────────────────────────────────────────┐ │ │
│ │ │ Kubernetes Control Plane (예정) │ │ │
│ │ │ ┌──────────────────────────────────────────────────────────┐ │ │ │
│ │ │ │ kube-apiserver - REST API 제공 │ │ │ │
│ │ │ │ kube-scheduler - Pod 스케줄링 │ │ │ │
│ │ │ │ kube-controller - 상태 관리 │ │ │ │
│ │ │ │ etcd - 클러스터 데이터 저장 │ │ │ │
│ │ │ └──────────────────────────────────────────────────────────┘ │ │ │
│ │ └────────────────────────────────────────────────────────────────┘ │ │
│ │ │ │
│ │ ┌────────────────────────────────────────────────────────────────┐ │ │
│ │ │ kubelet & kube-proxy │ │ │
│ │ │ - kubelet: Pod 생명주기 관리 │ │ │
│ │ │ - kube-proxy: 서비스 네트워크 관리 │ │ │
│ │ └────────────────────────────────────────────────────────────────┘ │ │
│ └───────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌───────────────────────────────────────────────────────────────────────┐ │
│ │ k8s-worker1 VM (예정) │ │
│ │ - IP: 192.168.5.12 (ens33), 172.100.100.3 (ens37) │ │
│ │ - 역할: Worker Node │ │
│ └───────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌───────────────────────────────────────────────────────────────────────┐ │
│ │ k8s-worker2 VM (예정) │ │
│ │ - IP: 192.168.5.13 (ens33), 172.100.100.4 (ens37) │ │
│ │ - 역할: Worker Node │ │
│ └───────────────────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────────────────────┘

네트워크 레이어별 구성

Layer 1: 물리 네트워크 (Windows 호스트)

Windows 호스트
├── VMnet8 (NAT)
│ ├── IP: 192.168.5.1/24
│ ├── DHCP: 192.168.5.201 ~ 192.168.5.254
│ └── 용도: VM ↔ 인터넷 연결

└── VMnet1 (Host-only)
├── IP: 172.100.100.1/24
└── 용도: 호스트 ↔ VM 관리 통신

Layer 2: 가상 네트워크 (VMware)

VMware Virtual Network
├── NAT Network (192.168.5.0/24)
│ ├── Gateway: 192.168.5.2
│ ├── k8s-master: 192.168.5.11
│ ├── k8s-worker1: 192.168.5.12 (예정)
│ └── k8s-worker2: 192.168.5.13 (예정)

└── Host-only Network (172.100.100.0/24)
├── Windows Host: 172.100.100.1
├── k8s-master: 172.100.100.2
├── k8s-worker1: 172.100.100.3 (예정)
└── k8s-worker2: 172.100.100.4 (예정)

Layer 3: Kubernetes 클러스터 구성

Kubernetes Cluster

├── Control Plane (k8s-master)
│ ├── kube-apiserver (6443)
│ ├── kube-scheduler
│ ├── kube-controller-manager
│ ├── etcd (2379-2380)
│ ├── kubelet
│ └── kube-proxy

└── Worker Nodes (예정)
├── k8s-worker1
│ ├── kubelet
│ ├── kube-proxy
│ └── container runtime (containerd)

└── k8s-worker2
├── kubelet
├── kube-proxy
└── container runtime (containerd)

커널 및 시스템 설정

네트워크 설정

┌─────────────────────────────────────────────────────────────┐
│ Kernel Network Stack │
│ │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ IP Forwarding (net.ipv4.ip_forward = 1) │ │
│ │ - 컨테이너 간 패킷 포워딩 활성화 │ │
│ └───────────────────────────────────────────────────────┘ │
│ │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ Bridge Netfilter │ │
│ │ - net.bridge.bridge-nf-call-iptables = 1 │ │
│ │ - net.bridge.bridge-nf-call-ip6tables = 1 │ │
│ │ - 브리지 네트워크의 iptables 처리 활성화 │ │
│ └───────────────────────────────────────────────────────┘ │
│ │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ Kernel Modules │ │
│ │ - overlay: OverlayFS 파일시스템 (컨테이너 레이어) │ │
│ │ - br_netfilter: 브리지 네트워크 필터링 │ │
│ └───────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘

Container Runtime 구성

┌──────────────────────────────────────────────────────────────┐
│ containerd │
│ │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ CRI (Container Runtime Interface) │ │
│ │ - Kubernetes와 containerd 간 통신 인터페이스 │ │
│ └────────────────────────────────────────────────────────┘ │
│ │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ runc Runtime │ │
│ │ - SystemdCgroup = true │ │
│ │ - cgroup 관리를 systemd에게 위임 │ │
│ └────────────────────────────────────────────────────────┘ │
│ │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ Image & Snapshot Management │ │
│ │ - OverlayFS 사용 (overlay 모듈) │ │
│ │ - 컨테이너 이미지 레이어 관리 │ │
│ └────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────┘

시스템 구성 요약

k8s-master 노드

카테고리설정
하드웨어CPU2 Core
RAM4GB
Disk100GB (ext4)
OSDistributionUbuntu Server 24.04
Hostnamek8s-master
TimezoneAsia/Seoul
Localeko_KR.UTF-8
네트워크ens33 (NAT)192.168.5.11/24
ens33 Gateway192.168.5.2
ens33 DNS8.8.8.8, 8.8.4.4
ens37 (Host-only)172.100.100.2/24
시스템SwapDisabled
NTPEnabled (time.ravnus.com)
IP ForwardEnabled
커널overlayLoaded
br_netfilterLoaded
ContainerRuntimecontainerd
SystemdCgrouptrue
KubernetesRoleControl Plane
Componentsapiserver, scheduler, controller, etcd (예정)

트래픽 흐름도

외부 인터넷 접속 (NAT)

k8s-master (192.168.5.11)

├─ ens33 (192.168.5.11/24)

├─ VMnet8 Gateway (192.168.5.2)

├─ Windows Host (192.168.5.1)

└─ 인터넷 (8.8.8.8 DNS)

호스트-VM 관리 통신 (Host-only)

Windows Host (172.100.100.1)

├─ VMnet1 (172.100.100.0/24)

└─ k8s-master ens37 (172.100.100.2)

Kubernetes 클러스터 내부 통신 (예정)

Pod A (10.244.0.x)

├─ kube-proxy (iptables/IPVS)

├─ Service Network (10.96.0.0/12)

└─ Pod B (10.244.1.x)

다음 단계 (구현 예정)

  1. Docker/containerd 설치 완료
  2. kubeadm, kubelet, kubectl 설치
  3. Control Plane 초기화
    kubeadm init --pod-network-cidr=10.244.0.0/16 \
    --apiserver-advertise-address=172.100.100.2
  4. CNI 플러그인 설치 (Flannel/Calico/Weave)
  5. Worker 노드 추가 (k8s-worker1, k8s-worker2)
  6. 클러스터 검증

포트 매핑 (Control Plane)

포트프로토콜컴포넌트용도
6443TCPkube-apiserverKubernetes API
2379-2380TCPetcdetcd 클라이언트 통신
10250TCPkubeletKubelet API
10259TCPkube-schedulerScheduler
10257TCPkube-controller-managerController Manager

보안 그룹 (예정)

Firewall Rules (ufw/iptables)
├── Allow 6443/tcp (API Server)
├── Allow 2379-2380/tcp (etcd)
├── Allow 10250/tcp (kubelet)
├── Allow 10259/tcp (scheduler)
├── Allow 10257/tcp (controller)
├── Allow 22/tcp (SSH)
└── Allow ICMP (ping)

관련 문서

그래프 뷰

그래프 데이터 로딩 중…
현재: Kubernetes 클러스터 아키텍처
노드 클릭 → 이동 · 드래그 → 위치 조정