공부하기싫어

https://kubernetes.io/ko/docs/concepts/configuration/secret/#%EC%8B%9C%ED%81%AC%EB%A6%BF%EC%9D%84-%ED%99%98%EA%B2%BD-%EB%B3%80%EC%88%98-%ED%98%95%ED%83%9C%EB%A1%9C-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0

 

시크릿(Secret)

시크릿은 암호, 토큰 또는 키와 같은 소량의 중요한 데이터를 포함하는 오브젝트이다. 이를 사용하지 않으면 중요한 정보가 파드 명세나 컨테이너 이미지에 포함될 수 있다. 시크릿을 사용한다

kubernetes.io

 

 

파드에서 환경 변수 형태로 시크릿을 사용하려면 다음과 같이 한다.

  1. 시크릿을 생성(하거나 기존 시크릿을 사용)한다. 여러 파드가 동일한 시크릿을 참조할 수 있다.
  2. 사용하려는 각 시크릿 키에 대한 환경 변수를 추가하려면 시크릿 키 값을 사용하려는 각 컨테이너에서 파드 정의를 수정한다. 시크릿 키를 사용하는 환경 변수는 시크릿의 이름과 키를 env[].valueFrom.secretKeyRef 에 채워야 한다.
  3. 프로그램이 지정된 환경 변수에서 값을 찾도록 이미지 및/또는 커맨드 라인을 수정한다.

다음은 환경 변수를 통해 시크릿을 사용하는 파드의 예시이다.

 

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
참고: 컨테이너가 이미 환경 변수 형태로 시크릿을 사용하는 경우, 컨테이너가 다시 시작되기 전에는 시크릿 업데이트를 볼 수 없다. 시크릿이 변경되면 컨테이너 재시작을 트리거하는 써드파티 솔루션이 존재한다.