EncryptionConfiguration을 사용하여 etcd에 저장되는 secret을 암호화 하기
kubectl create secret generic secret-1 --from-literal=key=value
enc.yaml
apiVersion: v1
kind: EncryptionConfiguration
resources:
- resources:
- secrets
providers:
- aescbc:
keys:
- name: key1
secret: c2Vj~~~base64인코딩데이터 # 암호화 시킬 때 사용함
- identity: {}
identity는 아무런 암호화 하지 않겠다는 뜻
aescbc는 알고리즘의 한 종류로 이 알고리즘으로 암호화 하겠다는 뜻
생성한 enc.yaml 파일을 볼륨마운트하여 사용하기 위해 아래의 경로로 이동시킴
mkdir /etc/kubernetes/enc
mv enc.yaml /etc/kubernetes/enc
vi /etc/kubernetes/manifests/kube-apiserver.yaml
apiVersion: v1
kind: Pod
metadata:
name: kube-apiserver
namespace: kube-system
....
spec:
containers:
- command:
- kube-apiserver
- --advertise-address:10.6.188.3
- ...
- ...
- --encryption-provider-config=/etc/kubernetes/enc/enc.yaml
volumeMounts:
- name: enc # add this line
mountPath: /etc/kubernetes/enc # add this line
readOnly: true # add this line
volumes:
...
- name: enc # add this line
hostPath: # add this line
path: /etc/kubernetes/enc # add this line
type: DirectoryOrCreate # add this line
이렇게 파일 수정 & 저장하면 kube apiserver가 재시작되면서 약간의 시간 필요함
crictl 명령어로 올라오는지 여부 체크 가능
재시작되면 이때부터 secret이 암호화되어 저장되기 시작한다.
다만 새로 추가되는 secret에 대해서만 암호화가 적용됨
kubectl create secret generic secret-2 --from-literal=key=value
kubectl get secrets --all-namespace -o json | kubectl replace -f -