CKS

[CKS] Cluster Setup - Kubernetes Binaries

mov.M 2024. 1. 8. 17:40

Cluster Setup (10%)

 - Use Network security policies to restrict cluster level access

 - Use CIS benchmark to review the security configuration of Kubernetes components (etcd, kubelet, kubedns, kubeapi)

 - Properly set up Ingress objects with security control

 - Protect node metadata and endpoints

 - Minimize use of, and access to, GUI elements

 - Verify platform binaries before deploying

 

Kubernetes Binaries

Kubernetes 에서는 kubectl, kubeadm, kubelet등의 컴포넌트들을 Binary를 통해 실행할 수 있다.

Binary에 악성코드가 감염되었을 경우 클러스터의 정보를 탈취당할 수 있으므로,

Binary 검증을 통하여 안전한 Binay를 사용하는 것이 중요하다. 

 

※ 참고 : https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/#install-kubectl-binary-with-curl-on-linux

 

Kubernetes checksum files

Binary File 설치 전, Checksum File을 통해 Binary의 안전성을 검증할 수 있다.

kubectl version --short --client
curl -LO "https://dl.k8s.io/<kubectl client version>/bin/linux/amd64/kubectl.sha256"
echo "$(<kubectl.sha256) /usr/bin/kubectl" | sha256sum --check
# if binary is valid, you should see output "OK"

 

 

예제 문제

1. (유형1) sha256sum  --check

* binary 가 설치되어있는 경로 제시.

* binary 들이 사용하는 version 정보 제시. (주의! kubectl version 등의 명령어를 사용하면 안됨! 아직 안전한 binary인지 검증이 안되어 있음) 

* binary checksum 파일을 다운받은 후 검증.

 

cloud_user@k8s-control:~/k8s-binaries$ ll
total 169388
drwxr-xr-x 2 cloud_user cloud_user      4096 Jan  8 08:30 ./
drwxr-xr-x 7 cloud_user cloud_user      4096 Jan  8 06:32 ../
-rwxr-xr-x 1 cloud_user cloud_user 123715584 Jan  8 06:32 kube-apiserver*
-rw-rw-r-- 1 cloud_user cloud_user        64 Jan  8 08:30 kube-apiserver.sha256
-rwxr-xr-x 1 cloud_user cloud_user  49704960 Jan  8 06:32 kubectl*
-rw-rw-r-- 1 cloud_user cloud_user        64 Jan  8 08:29 kubectl.sha256
-rwxr-xr-x 1 cloud_user cloud_user 114113512 Jan  8 06:32 kubelet*
-rw-rw-r-- 1 cloud_user cloud_user        64 Jan  8 08:29 kubelet.sha256
-rw-r--r-- 1 cloud_user cloud_user         7 Jan  8 06:32 version.txt
user@k8s-control:~/k8s-binaries$ cat version.txt
v1.29.0
user@k8s-control:~/k8s-binaries$ curl -LO "https://dl.k8s.io/release/v1.29.0/bin/linux/amd64/kubectl.sha256"  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   138  100   138    0     0   3136      0 --:--:-- --:--:-- --:--:--  3136
100    64  100    64    0     0    984      0 --:--:-- --:--:-- --:--:--   984
user@k8s-control:~/k8s-binaries$ curl -LO "https://dl.k8s.io/release/v1.29.0/bin/linux/amd64/kubelet.sha256"
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   138  100   138    0     0   3209      0 --:--:-- --:--:-- --:--:--  3209
100    64  100    64    0     0   1015      0 --:--:-- --:--:-- --:--:--  1015
cloud_user@k8s-control:~/k8s-binaries$ curl -LO "https://dl.k8s.io/release/v1.29.0/bin/linux/amd64/kube-apiserver.sha256"
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   138  100   138    0     0   2875      0 --:--:-- --:--:-- --:--:--  2936
100    64  100    64    0     0    397      0 --:--:-- --:--:-- --:--:--   397
user@k8s-control:~/k8s-binaries$ echo "$(cat kubectl.sha256)  kubectl" | sha256sum --check
kubectl: OK
user@k8s-control:~/k8s-binaries$ echo "$(cat kubelet.sha256)  kubelet" | sha256sum --check
kubelet: FAILED
sha256sum: WARNING: 1 computed checksum did NOT match
user@k8s-control:~/k8s-binaries$ echo "$(cat kube-apiserver.sha256)  kube-apiserver" | sha256sum --check
kube-apiserver: OK

 

2. (유형2) sha512sum --check

* cat | uniq 명령어를 통해 2개의 hash 값을 비교할 수 있음. 

* 설치된 binary의 sha512sum hash값과 다운로드 받은 hash를 하나의 파일에 작성

* cat <파일명> | uniq 

명령어를 통해 해쉬값 일치여부 체크.