쿠버네티스 클러스터의 컨트롤 플레인노드는 버전이 일치해야만 최적의 성능과 안정성을 보장할 수 있습니다. 이는 단순히 기능적 호환성을 넘어, 클러스터의 보안을 유지하는 데 필수적인 요소입니다.


주요 원인

1. API 버전 호환성 문제

쿠버네티스 API는 지속적으로 발전하며 새로운 기능이 추가되거나 기존 기능이 변경됩니다. 만약 컨트롤 플레인의 API 서버와 각 노드의 Kubelet 버전이 서로 다르면, API 호출이 예상치 않게 실패할 수 있습니다. 예를 들어, 최신 API를 사용하는 컨트롤 플레인이 구형 API만 아는 Kubelet에 명령을 내리면, 명령이 제대로 수행되지 않아 클러스터의 기능적 오류와 더불어 보안 정책에 허점이 생길 수 있습니다.

2. 보안 기능 불일치

새로운 쿠버네티스 버전에는 항상 최신 보안 패치취약점 수정 사항이 포함됩니다. 만약 컨트롤 플레인만 최신 버전으로 업데이트되고 노드는 그대로 남아 있다면, 패치되지 않은 노드가 클러스터의 가장 약한 고리가 됩니다. 공격자는 이 취약한 노드를 통해 클러스터에 침투할 수 있으며, 이는 전체 시스템의 보안을 위협합니다.

3. 인증 및 권한 문제

버전이 다르면 Kubelet과 컨트롤 플레인 간의 통신에서 인증 및 권한 부여 방식에 차이가 발생할 수 있습니다. 이는 Kubelet이 API 서버로부터 필요한 권한을 얻지 못하거나, 반대로 과도한 권한으로 민감한 리소스에 접근하는 문제를 일으킬 수 있습니다. 이러한 문제는 클러스터의 보안 모델을 무너뜨릴 수 있는 심각한 위험을 내포합니다.

4. 기능적 비정상 작동

버전 불일치는 파드 스케줄링, 볼륨 마운트 등 기본적인 클러스터 운영에도 영향을 미칩니다. 컨트롤 플레인에는 존재하는 새로운 기능이 노드에는 없어 정상적으로 작동하지 않거나, 예측 불가능한 오류가 발생할 수 있습니다. 이러한 기능적 불안정성은 클러스터를 취약하게 만들고, 결국 보안 문제로 이어질 수 있습니다.

결론적으로, 컨트롤 플레인과 노드의 버전을 일관되게 유지하는 것은 클러스터의 안정성을 넘어, 최신 보안 기능을 모두에게 적용하고, 불필요한 보안 취약점을 예방하는 가장 핵심적인 보안 관리 방법입니다.

 

적용 방법

https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/upgrading-linux-nodes/

 

Upgrading Linux nodes

This page explains how to upgrade a Linux Worker Nodes created with kubeadm. Before you begin You need to have shell access to all the nodes, and the kubectl command-line tool must be configured to communicate with your cluster. It is recommended to run th

kubernetes.io

 

예시 사진

controlplain 1.33.3

node01 1.33.2

 

1. 노드에서 kubeadm 설치

# replace x in 1.3x.x-* with the latest patch version
sudo apt-mark unhold kubeadm && \
sudo apt-get update && sudo apt-get install -y kubeadm='1.33.3-*' && \
sudo apt-mark hold kubeadm

 

2. 노드에서 kubeadm 을 통한 업그레이드

sudo kubeadm upgrade node

 

3. 컨트롤플레인에서 node drain 적용

kubectl drain node01 --ignore-daemonsets

 

 

4. 노드에서 kubelet 과 kubectl 적용

# replace x in 1.34.x-* with the latest patch version
sudo apt-mark unhold kubelet kubectl && \
sudo apt-get update && sudo apt-get install -y kubelet='1.33.3-*' kubectl='1.33.3-*' && \
sudo apt-mark hold kubelet kubectl

 

5. 노드에서 설정 적용을 위해 재기동

sudo systemctl daemon-reload
sudo systemctl restart kubelet

 

6. 컨트롤플레인에서 버전 확인 후 uncordon 수행

# execute this command on a control plane node
# replace <node-to-uncordon> with the name of your node
kubectl uncordon node01

 

'k8s > CKS' 카테고리의 다른 글

[CKS] Pod Security Standards - restricted  (0) 2025.09.08
[CKS] cilium  (0) 2025.09.08
[CKS] Pod Security Standards  (1) 2025.09.07
[CKS] falco 사용방법 및 샘플 - 2  (0) 2025.09.07
[CKS] falco 사용방법 및 샘플 - 1  (0) 2025.09.07

+ Recent posts