CKA Study Day 9

김건호·2023년 4월 6일
0

105-115

Demo: Encryptin Secret Data at Rest

공식문서 참조
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 옵션 추가하여 암호화 활성화 하기

Multi Container Pods

파드내의 컨테이너는 네트워크를 공유, 볼륨 공유 가능

pod.spec.containers가 - array인 이유

Multi-container Pods Design Patterns

InitContainers

멀티 컨테이너 환경에서 컨테이너가 하나라도 활성 상태가 유지 되지 않으면 파드를 재실행 하게 됨

컨테이너에서 완료될 때까지 실행되는 프로세스를 실행할 수 도 잇음 -> 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/

profile
Ken, 🔽🔽 거노밥 유튜브(house icon) 🔽🔽

0개의 댓글