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