전공공부
[K8S - CKA] Configure Secrets in Applications 본문
1. Secret
암호화를 사용하는 범위
ConfigMap 활용하여 MySQL 또는 java 파일 구성 시 Docker의 환경 설정을 지정 할 수 있겠다.
예시로 PW, DB_HOST 등의 설정을 구성 할 수 있다. 그러나 아래와 같이 직접적으로 쓸거면 필요가 없다.
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
DB_HOST: mysql
자 아래 처럼 사용해보자
First, Create Secret
DB_host: mysql
DB_User: root
DB_Password: passwd
명령 버전
k create secret generic <secret-name> --from-literal=<key>=<value>
--from-literal 옵션 자체가 key-value 쌍을 저장하기 위해서 쓰인다.
k create secret generic <secret-name> --from-file=<fileName>
또는, 위와 같이 파일에 저장한 옵션을 가지고 와서 가져올 수 있다.
Declarative 모드
apiVersion: v1
kind: Secret
metadata:
name: mysecret
data:
DB_HOST: YWRtaW4=
PASSWORD: MWYyZDFlMmU2N2Rm
음, 그러면 어떻게 인코딩을 했을까?
우선 아래 명령어를 쓰면 인코딩이 된다.
echo -n 'mysql' | base64
이렇게 지정하면 k describe secret 해도 value 값을 볼 수 없고 직접 값을 보려면
echo -n 'bXlzcWw=' | base64 --decode
이렇게 지정을 해야 한다.
Second, Configuring POD
1. SINGLE ENV 방식
apiVersion: v1
kind: Pod
metadata:
name: secret-env-pod
spec:
containers:
- name: mycontainer
image: redis
env:
- name: SECRET_USERNAME
valueFrom:
secretKeyRef:
name: mysecret
key: username
optional: false # 기본값과 동일하다
# "mysecret"이 존재하고 "username"라는 키를 포함해야 한다
- name: SECRET_PASSWORD
valueFrom:
secretKeyRef:
name: mysecret
key: password
optional: false # 기본값과 동일하다
# "mysecret"이 존재하고 "password"라는 키를 포함해야 한다
2. ENV 방식
apiVersion: v1
kind: Pod
metadata:
name: secret-test-pod
spec:
containers:
- name: test-container
image: registry.k8s.io/busybox
command: [ "/bin/sh", "-c", "env" ]
envFrom:
- secretRef:
name: mysecret
restartPolicy: Never
3. Volume 방식
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mypod
image: redis
volumeMounts:
- name: foo
mountPath: "/etc/foo"
readOnly: true
volumes:
- name: foo
secret:
secretName: mysecret
optional: false # 기본값임; "mysecret" 은 반드시 존재해야 함
2. Secret 추가 정리
실제로 시크릿은 암호화 된 것이 아니고 Base64로 인코딩 된 것이므로 기본 암호를 확인 할 수 있다.
ETCD에서 암호화 되어 있지 않다. 허나, REST로 암호화 가능하다.
RBAC를 고려해서 역할 별로 접근자를 허용해야 실제로 접근 제어가 가능하다,
'Study > K8S' 카테고리의 다른 글
[K8S - CKA] initContainers (0) | 2023.11.12 |
---|---|
[K8S - CKA] Multi Container Pods (0) | 2023.11.12 |
[K8S - CKA] Application Commands (0) | 2023.11.05 |
[K8S] 서로 다른 네임스페이스 Pod간 볼륨을 공유하는 방법 (0) | 2023.11.04 |
[K8S - CKA] Rolling Updates ands Rollbacks (0) | 2023.10.28 |