Kubernetes 클러스터 아키텍처
Kubernetes 클러스터 아키텍처
목차
- 전체 네트워크 토폴로지
- 네트워크 레이어별 구성
- 커널 및 시스템 설정
- 시스템 구성 요약
- 트래픽 흐름도
- 다음 단계 (구현 예정)
- 포트 매핑 (Control Plane)
- 보안 그룹 (예정)
전체 네트워크 토폴로지
┌─────────────────────────────────────────────────────────────────────────────┐
│ 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 노드
| 카테고리 | 설정 | 값 |
|---|---|---|
| 하드웨어 | CPU | 2 Core |
| RAM | 4GB | |
| Disk | 100GB (ext4) | |
| OS | Distribution | Ubuntu Server 24.04 |
| Hostname | k8s-master | |
| Timezone | Asia/Seoul | |
| Locale | ko_KR.UTF-8 | |
| 네트워크 | ens33 (NAT) | 192.168.5.11/24 |
| ens33 Gateway | 192.168.5.2 | |
| ens33 DNS | 8.8.8.8, 8.8.4.4 | |
| ens37 (Host-only) | 172.100.100.2/24 | |
| 시스템 | Swap | Disabled |
| NTP | Enabled (time.ravnus.com) | |
| IP Forward | Enabled | |
| 커널 | overlay | Loaded |
| br_netfilter | Loaded | |
| Container | Runtime | containerd |
| SystemdCgroup | true | |
| Kubernetes | Role | Control Plane |
| Components | apiserver, 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)
다음 단계 (구현 예정)
- Docker/containerd 설치 완료
- kubeadm, kubelet, kubectl 설치
- Control Plane 초기화
kubeadm init --pod-network-cidr=10.244.0.0/16 \--apiserver-advertise-address=172.100.100.2
- CNI 플러그인 설치 (Flannel/Calico/Weave)
- Worker 노드 추가 (k8s-worker1, k8s-worker2)
- 클러스터 검증
포트 매핑 (Control Plane)
| 포트 | 프로토콜 | 컴포넌트 | 용도 |
|---|---|---|---|
| 6443 | TCP | kube-apiserver | Kubernetes API |
| 2379-2380 | TCP | etcd | etcd 클라이언트 통신 |
| 10250 | TCP | kubelet | Kubelet API |
| 10259 | TCP | kube-scheduler | Scheduler |
| 10257 | TCP | kube-controller-manager | Controller 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)