Search
Duplicate

Environment Variables

생성일
2021/05/08 10:55
태그

Configure Environment Variables In Applications

ENV variables in Docker

$ docker run -e APP_COLOR=pink simple-webapp-color
Plain Text
복사

ENV variables in kubernetes

환경변수 지정을 위해 env 항목을 pod definition file에 추가.
ENV 속성은 배열 타입이다. ENV 하위 값은 Name과 Value 속으로 구성된다.
apiVersion: v1 kind: Pod metadata: name: simple-webapp-color spec: containers: - name: simple-webapp-color image: simple-webapp-color ports: - containerPort: 8080 env: - name: APP_COLOR value: pink
Plain Text
복사
환경변수를 지정하는 다른 방법은 ConfigMaps and Secrets 을 사용하는 방법이 있다.
이 방식을 사용할 때는 Value를 명시하는 대신 valueFrom을 사용해서 ConfigMaps과Secret을 선택한다.

Configure ConfigMaps in Applications

ConfigMaps

ConfigMaps는 쿠버네티스 상에 설정 관련 데이터를 Key-Value 형태로 저장할 때 사용하는 오브젝트이다
ConfigMaps 구성의 2가지 단계.
configMaps 생성
configMaps를 Pod에 넣기
configmap을 만드는 2가지 방법.
The Imperative way
$ kubectl create configmap app-config --from-literal=APP_COLOR=blue --from-literal=APP_MODE=prod $ kubectl create configmap app-config --from-file=app_config.properties (Another way)
Plain Text
복사
The Declarative way
apiVersion: v1 kind: ConfigMap metadata: name: app-config data: APP_COLOR: blue APP_MODE: prod $ kubectl create -f config-map.yaml
Plain Text
복사

View ConfigMaps

To view configMaps
$ kubectl get configmaps (or) $ kubectl get cm
Plain Text
복사
To describe configmaps
$ kubectl describe configmaps
Plain Text
복사

ConfigMap in Pods

Pod에 Configmap 정의하기
apiVersion: v1 kind: Pod metadata: name: simple-webapp-color spec: containers: - name: simple-webapp-color image: simple-webapp-color ports - containerPort: 8080 envFrom: - configMapRef: name: app-config
Plain Text
복사
apiVersion: v1 kind: ConfigMap metadata: name: app-config data: APP_COLOR: blue APP_MODE: prod
Plain Text
복사
$ kubectl create -f pod-definition.yaml
Plain Text
복사

구성 변수를 포드에 삽입하는 다른 방법

Single Environment Variable 로 삽입
Volume 에 파일로 삽입

Secrets

ConfigMaps은 설정 관련 데이터를 일반적인 텍스트 포맷을 저장한다. 하지만 Secrets은 비밀스러운 데이터나 비밀번호, 비밀키 같은 민감한 데이터를 저장하기 위해 사용한다.
근본적으로 Secrets은 Configmaps와 같지만 데이터를 BASE64로 인코딩해서 저장한다는 점에서 차이가 있다.
Secrets을 매니페스트 파일로 정의해서 생성할 때는 반드시 데이터를 BASE64로 해시한 뒤 입력해야 한다

Web-Mysql Application

한 가지 방법은 앱 속성 / env를 configmap으로 이동하는 것입니다. 그러나 configmap은 데이터를 일반 텍스트 형식으로 저장합니다. 확실히 암호를 저장하기에 적합한 장소가 아닙니다.
apiVersion: v1 kind: ConfigMap metadata: name: app-config data: DB_Host: mysql DB_User: root DB_Password: paswrd
Plain Text
복사

Secret을 사용하는 방법

1, secret 생성
2, Pod에 삽입

secret 생성하

The Imperative way
$ kubectl create secret generic app-secret --from-literal=DB_Host=mysql --from-literal=DB_User=root --from-literal=DB_Password=paswrd $ kubectl create secret generic app-secret --from-file=app_secret.properties
Plain Text
복사
The Declarative way
Generate a hash value of the password and pass it to secret-data.yaml definition value as a value to DB_Password varaible. $ echo -n "mysql" |base64 $ echo -n "root" |base64 $ echo -n "paswrd"|base64
Plain Text
복사
kubectl create 를 통해 pod 생성
apiVersion: v1 kind: Secret metadata: name: app-secret data: DB_Host: bX1zcWw= DB_User: cm9vdA== DB_Password: cGFzd3Jk
Plain Text
복사
$ kubectl create -f secret-data.yaml
Plain Text
복사

Encode Secrets

Secrets 조회

$ kubectl get secrets $ kubectl describe secret $ kubectl get secret app-secret -o yaml
Plain Text
복사

Decode Secrets

To decode secrets
$ echo -n "bX1zcWw=" |base64 --decode $ echo -n "cm9vdA==" |base64 --decode $ echo -n "cGFzd3Jk" |base64 --decode
Plain Text
복사

Pod에 secret 구성하기

Secret을 Pod에 삽입하려면 새 속성 envFrom 다음에 secretRef 이름을 추가 한 다음 포드 정의를 만듭니다.
apiVersion: v1 kind: Secret metadata: name: app-secret data: DB_Host: bX1zcWw= DB_User: cm9vdA== DB_Password: cGFzd3Jk
Plain Text
복사
apiVersion: v1 kind: Pod metadata: name: simple-webapp-color spec: containers: - name: simple-webapp-color image: simple-webapp-color ports: - containerPort: 8080 envFrom: - secretRef: name: app-secret
Plain Text
복사
$ kubectl create -f pod-definition.yaml
Plain Text
복사

pods에 secret을 구성하는 다른 방법

Single ENV variable 로 삽입
Volume 에 파일처럼 전체 비밀을 삽입 할 수 있습니다.

Secrets in pods as volume

Secret의 각 속성은 Secret의 값을 내용으로하는 파일로 생성됩니다.

K8s Reference Docs