[CKS] Cluster Setup - Kubernetes Binaries
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를 사용하는 것이 중요하다.
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
명령어를 통해 해쉬값 일치여부 체크.