현재 k8s 자동 프로비저닝 툴을 개발 중입니다.

k8s version : v1.30.7
k8s 자동 프로비저닝을 개발하면서 시간이 없어서 해결하지 못했던 보안 과정을 CIS kubernetes benchmark에 맞춰서 구성하는 과정이다.
간단한 것들도 제외하고 내가 직접 해본것만 작성할 예정이다.
히히 보안싫어
[root@temp-cp-node-1 ~]# curl -k https://localhost:6443
{
"kind": "Status",
"apiVersion": "v1",
"metadata": {},
"status": "Failure",
"message": "forbidden: User \"system:anonymous\" cannot get path \"/\"",
"reason": "Forbidden",
"details": {},
"code": 403
}
[root@temp-cp-node-1 ~]# ps -ef | grep kube-apiserver | grep anonoymous-auth
[root@temp-cp-node-1 ~]# vi /etc/kubernetes/manifests/kube-apiserver.yaml
## 해당 옵션을 추가한다.
# --anonymous-auth=false
[root@temp-cp-node-1 ~]# curl -k https://localhost:6443
{
"kind": "Status",
"apiVersion": "v1",
"metadata": {},
"status": "Failure",
"message": "Unauthorized",
"reason": "Unauthorized",
"code": 401
}
etc/kubernetes/admission-config.yaml 생성kind: AdmissionConfiguration
apiVersion: apiserver.k8s.io/v1alpha1
plugins:
- name: EventRateLimit
path: /etc/kubernetes/admission-config-eventratelimit.yaml
/etc/kubernetes/admission-config-eventratelimit.yaml 생성apiVersion: eventratelimit.admission.k8s.io/v1alpha1
kind: Configuration
limits:
- type: Namespace
qps: 1048576
burst: 1048576
cacheSize: 4096
- type: User
qps: 1048576
burst: 1048576
cacheSize: 4096
- type: Server
qps: 1048576
burst: 1048576
/etc/kubernetes/manifests/kube-apiserver.yaml 수정--enable-admission-plugins=...,EventRateLimit,... 추가admission-control-config-file: /etc/kubernetes/admission-config.yaml 추가항상 이미지 pull
/etc/kubernetes/manifests/kube-apiserver.yaml 수정--enable-admission-plugins=...,AlwaysPullImages,... 추가Kubelet은 자신이 관리하는 노드의 Node API 객체만 수정할 수 있도록 제한
/etc/kubernetes/manifests/kube-apiserver.yaml 수정--enable-admission-plugins=...,NodeRestriction,... 추가병목 현상을 감시하고 시스템 성능 문제를 찾기 위해서 사용하는 도구
문제가 없거나 필요하지않다면 비활성화
/etc/kubernetes/manifests/kube-apiserver.yaml 수정--profiling=false 추가API server 요청 타임아웃 제한
기본은 60초
/etc/kubernetes/manifests/kube-apiserver.yaml 수정--request-timeout=300s로 변경etcd 보안을 위해 암호화 프로바이더 설정
https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/
/etc/kubernetes/secrets_encryption.yaml 생성apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
- resources:
- secrets
providers:
- secretbox:
keys:
- name: ---
secret: ---
- identity: {}
/etc/kubernetes/manifests/kube-apiserver.yaml 수정--encryption-provider-config=/etc/kubernetes/secrets_encryption.yaml 추가알고리즘에 맞춰서 API server 암호화
/etc/kubernetes/manifests/kube-apiserver.yaml 수정tls-cipher-suites: 자신이 원하는 알고리즘 추가