파드에서 환경 변수 형태로 시크릿을 사용하려면 다음과 같이 한다.
- 시크릿을 생성(하거나 기존 시크릿을 사용)한다. 여러 파드가 동일한 시크릿을 참조할 수 있다.
- 사용하려는 각 시크릿 키에 대한 환경 변수를 추가하려면 시크릿 키 값을 사용하려는 각 컨테이너에서 파드 정의를 수정한다. 시크릿 키를 사용하는 환경 변수는 시크릿의 이름과 키를 env[].valueFrom.secretKeyRef 에 채워야 한다.
- 프로그램이 지정된 환경 변수에서 값을 찾도록 이미지 및/또는 커맨드 라인을 수정한다.
다음은 환경 변수를 통해 시크릿을 사용하는 파드의 예시이다.
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"라는 키를 포함해야 한다
restartPolicy: Never
올바르지 않은 환경 변수
유효하지 않은 환경 변수 이름으로 간주되는 키가 있는 envFrom 필드로 환경 변수를 채우는 데 사용되는 시크릿은 해당 키를 건너뛴다. 하지만 파드를 시작할 수는 있다.
유효하지 않은 변수 이름이 파드 정의에 포함되어 있으면, reason이 InvalidVariableNames로 설정된 이벤트와 유효하지 않은 스킵된 키 목록 메시지가 파드 시작 실패 정보에 추가된다. 다음 예시는 2개의 유효하지 않은 키 1badkey 및 2alsobad를 포함하는 mysecret 시크릿을 참조하는 파드를 보여준다.
kubectl get events
출력은 다음과 같다.
LASTSEEN FIRSTSEEN COUNT NAME KIND SUBOBJECT TYPE REASON
0s 0s 1 dapi-test-pod Pod Warning InvalidEnvironmentVariableNames kubelet, 127.0.0.1 Keys [1badkey, 2alsobad] from the EnvFrom secret default/mysecret were skipped since they are considered invalid environment variable names.
환경 변수로부터 시크릿 값 사용하기
환경 변수 형태로 시크릿을 사용하는 컨테이너 내부에서, 시크릿 키는 일반적인 환경 변수로 보인다. 이러한 환경 변수의 값은 시크릿 데이터를 base64 디코드한 값이다.
다음은 위 예시 컨테이너 내부에서 실행된 명령의 결과이다.
echo "$SECRET_USERNAME"
출력 결과는 다음과 비슷하다.
admin
echo "$SECRET_PASSWORD"
출력 결과는 다음과 비슷하다.
1f2d1e2e67df
참고: 컨테이너가 이미 환경 변수 형태로 시크릿을 사용하는 경우, 컨테이너가 다시 시작되기 전에는 시크릿 업데이트를 볼 수 없다. 시크릿이 변경되면 컨테이너 재시작을 트리거하는 써드파티 솔루션이 존재한다.
'Kubernetes' 카테고리의 다른 글
rpc error: code = Unknown desc = failed to pull and unpack image : 403 Forbidden (0) | 2023.08.14 |
---|---|
스토리지로 퍼시스턴트볼륨(PersistentVolume)을 사용하도록 파드 설정하기 (0) | 2023.06.29 |
kubectl 을 사용해 시크릿 생성 (0) | 2023.06.15 |
k9s (0) | 2023.06.08 |
kube-bench (0) | 2023.05.18 |