일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- ebpf
- Windows10
- Pod
- service
- aws cli
- golang
- aws
- kubectl
- nginx-media-server
- Python
- configmap
- VSCode
- wireshark
- Java
- namespace
- ffmpeg
- 행정구역분류
- HLS
- docker
- android studio
- Shell script
- Kubernetes
- Android
- macos
- dart
- spring cloud config
- Flutter
- deployment
- Sysinternals
- RTMP
- Today
- Total
woonizzooni
Kubernetes - Secret 이용한 환경 설정 본문
ConfigMap과 사용 방법/방식 자체는 거의 동일하다고 봐도 무방함.
"Kubernetes - ConfigMap 이용한 환경설정"
o 설정값 확인을 위해 환경 구성
- base64, jwt 명령어 실행 가능한 상태로.. (현재 MacOS 터미널 기준으로 설명)
$ which base64
/usr/bin/bas64
$ brew tap mike-engel/jwt-cli
$ brew install jwt-cli
o Secrets 목록 조회 / 설정값 확인 예시
> 목록 조회
$ kubectl get secrets
NAME TYPE DATA AGE
...
newrelic-token-z69sn kubernetes.io/service-account-token 3 20d
> 내용 확인
$ kubectl describe secrets newrelic-token-z69sn
Name: newrelic-token-z69sn
Namespace: default
Labels: <none>
Annotations: kubernetes.io/service-account.name: newrelic
kubernetes.io/service-account.uid: 51b55566-44a9-4d38-9534-4dbdae350d65
Type: kubernetes.io/service-account-token
Data
====
ca.crt: 1025 bytes
namespace: 7 bytes
token: eyJhbGciOiJSUz****...
> 디코딩 (실제 값 조회)
$ kubectl get secrets newrelic-token-z69sn -o jsonpath='{.data.token}' | base64 --decode | jwt decode -
Token header
------------
{
"alg": "RS256",
"kid": "***"
}
Token claims
------------
{
"iss": "kubernetes/serviceaccount",
"kubernetes.io/serviceaccount/namespace": "default",
"kubernetes.io/serviceaccount/secret.name": "newrelic-token-z69sn",
"kubernetes.io/serviceaccount/service-account.name": "newrelic",
"kubernetes.io/serviceaccount/service-account.uid": "**-44a9-4d38-9534-4d**",
"sub": "system:serviceaccount:default:newrelic"
}
o 내 컨테이너에 Secert 적용하기
1. 대상 정하고 base64로 인코딩 하기
- 예시를 ~/.aws/credentials 파일을 대상으로 선정
$ cat ~/.aws/credentials
[default]
aws_access_key_id = ABCDEFG
aws_secret_access_key = aAbBcCdDeEfFgG
$ cat ~/.aws/credentials | base64 <-- jwt 인코딩은 하지 않고 base64만 하겠음.
KkKkKkKkKkKk.... <-- 이 값을 대상임
- 하다보니.... 애매(?)한 현상이 생기던데..
macos에서 base64로 인코딩하면 인코딩된 문자열 마지막에 ‘\n’이 포함되어 있음.
macos의 경우,
$ echo “my_password” | base64
Kkkkkk\n <— \n이 포함되어 있음.
linux에서는,
$ echo -n “my_password” | base64 -w 0
Kkkkkk <— \n이 포함되어 있지 않음
이런 경우를 고려한다면 값으로 접근할 때
golang의 경우 아래와 같은 처리를 하면 안전할 듯…. (대충 아래와 같이?)
import b64 "encoding/base64"
...
data := "YmFzZTY0IGVuY29kZWQgc3RyaW5n"
sDec := b64.StdEncoding.DecodeString(data)
sDec = strings.TrimRight(sDec, "\r\n"
2. Secrets 구성
apiVersion: v1 kind: Secret metadata: name: secret-config namespace: my-ns type: Opaque data: credentials: "KkKkKkKkKk..." |
3. Workload(Pod, Deployment, ..)에서 Secret 접근/사용하기
(ex1) 파일로 접근 apiVersion: apps/v1 kind: Deployment metadata: labels: app: my-app name: my-app namespace: my-ns spec: replicas: 1 selector: matchLabels: app: my-app ... template: labels: app: my-app spec: ... containers: - image: {{myContainerImage:latest}} name: my-app ... env: - name: REDIS_ADDR .... volumeMounts: - name: mysecret mountPath: /root <-- 홈 위치 ... volumes: - name: mysecret secret: secretName: secret-config items: - key: credentials path: .aws/credentials ... ... |
(ex2) 환경 변수로 접근 apiVersion: apps/v1 kind: Deployment metadata: labels: app: my-app name: my-app namespace: my-ns spec: replicas: 1 selector: matchLabels: app: my-app ... template: labels: app: my-app spec: ... containers: - image: {{myContainerImage:latest}} name: my-app ... env: - name: myCredentials <-- getenv() ... valueFrom: secretKeyRef: name: secret-config key: credentials ... |
kubectl exec 쉘 진입 혹은 명령어 입력으로
/root/.aws/credntials 파일이 링크 걸려있거나(마운트 위치),
env명령으로 환경 변수에 적용 내용을 확인해보면 되겠다.
> 파일
> 환경 변수
[참고]
kubernetes.io/ko/docs/concepts/configuration/secret/
'Kubernetes' 카테고리의 다른 글
kubernetes - kube-prompt (0) | 2020.11.05 |
---|---|
kubernetes - redis 실행하기 (개발 환경용) (0) | 2020.11.05 |
Kubernetes - ConfigMap 이용한 환경 설정 (redis.conf, nginx.conf, os environment variables 등) (0) | 2020.11.05 |
Kubernetes 다중 클러스터 접근 (Configure Access to Multiple Clusters) (0) | 2020.03.30 |
로컬에 Kubernetes 실행 환경 만들기 (0) | 2020.03.29 |