105-115
공식문서 참조
https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/
kubectl create secret generic my-secret --from-literal=key1=supersecret
k get secret
k describe secret my-secret
k get secret my-secret -o yaml의 data 인코딩 된 값
echo "" | base64 -d
etcd 데이터네 초점 맞추기
etcd에 어떻게 저장되는지
apt-get intsall etcd-client
ETCDCTL_API=3 etcdctl \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
get /registry/secrets/default/secret1 | hexdump -C
시크릿 쉽게 확인 가능 -> 저장된 데이터 확인 가능 -> 데이터는 암호화 되지 않는 상태로 저장 됨
암호화 주소가 활성화 되어 있는지 확인 -> -encryption-provider-config 옵션을 통해 rest암호화가 이미 활성화 되어 있는ㄴ지
ps -aux | grep kube-api | grep "encryption-provider-config"
vi /etc/kubernetes/manifests/kube-apiserver.yaml 옵션이 없다면 rest에서 암호화가 비활성화
일부분만 암호화 모든부분 암호화 필요없음
apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
- resources: <- 암호화할 리소스 목록
- secrets
- configmaps
- pandas.awesome.bears.example
providers:
- identity: {} <- 암호화에서 사용 됨
- aesgcm:
keys:
- name: key1
secret: c2VjcmV0IGlzIHNlY3VyZQ==
- name: key2
secret: dGhpcyBpcyBwYXNzd29yZA==
- aescbc:
keys:
- name: key1
secret: c2VjcmV0IGlzIHNlY3VyZQ==
- name: key2
secret: dGhpcyBpcyBwYXNzd29yZA==
- secretbox:
keys:
- name: key1
secret: YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoxMjM0NTY=
vi enc.yaml
apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
- resources:
- secrets
- configmaps
- pandas.awesome.bears.example
providers:
- aescbc:
keys:
- name: key1
secret: <BASE 64 ENCODED SECRET> <-- head -c 32 /dev/urandom | base64 로 생성
- identity: {}
파드 내부에 마운트 해야함
mkdir /etc/kubernetes/enc
mv enc.yaml /etc/kubernetes/enc
vi /etc/kubernetes/manifests/kube-apiserver.yaml
- --encryption-provider-config=/etc/kubernetes/enc/enc.yaml 옵션 추가하여 암호화 활성화 하기
파드내의 컨테이너는 네트워크를 공유, 볼륨 공유 가능
pod.spec.containers가 - array인 이유
멀티 컨테이너 환경에서 컨테이너가 하나라도 활성 상태가 유지 되지 않으면 파드를 재실행 하게 됨
컨테이너에서 완료될 때까지 실행되는 프로세스를 실행할 수 도 잇음 -> initContainers
ex) 데이터베이스가 가동될 때까지 대기하는 프로세스
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
spec:
containers:
- name: myapp-container
image: busybox:1.28
command: ['sh', '-c', 'echo The app is running! && sleep 3600']
initContainers:
- name: init-myservice
image: busybox
command: ['sh', '-c', 'git clone <some-repository-that-will-be-used-by-application> ; done;']
여러개 구성 가능 -> 순차적으로 하나씩 실행 함
initContainers 중 하나라도 완료되지 않으면 InitContainers가 성공할 때까지 Kubernetes가 파드를 반복적으로 재시작
...
spec:
containers:
- name: myapp-container
image: busybox:1.28
command: ['sh', '-c', 'echo The app is running! && sleep 3600']
initContainers:
- name: init-myservice
image: busybox:1.28
command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;']
- name: init-mydb
image: busybox:1.28
command: ['sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;']
https://kubernetes.io/docs/concepts/workloads/pods/init-containers/