https://kubernetes.io/docs/concepts/configuration/secret/ 민감한 정보를 보관해두고 Pod에 주입시켜서 사용 할수 있게 해준다.
--from-file
# Create files needed for rest of example.
$ echo -n "admin" > ./username.txt
$ echo -n "1f2d1e2e67df" > ./password.txt
$ kubectl create secret generic db-user-pass --from-file=./username.txt --from-file=./password.txt
secret "db-user-pass" created
--from-literal
kubectl create secret generic prod-db-secret --from-literal=username=produser --from-literal=password=Y4nys7f11
secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
username: YWRtaW4=
password: MWYyZDFlMmU2N2Rm
kubectl create -f ./secret.yaml
조회
kubectl get secrets
spec.volumes[].secret.secretName
에 추가하 Secret이름을 추가함spec.containers[].volumeMounts[]
spec.containers[].volumeMounts[].readOnly = true
spec.containers[].volumeMounts[].mountPath
data
맵의 키는 mountPath
의 파일이름이 됨{
"apiVersion": "v1",
"kind": "Pod",
"metadata": {
"name": "mypod",
"namespace": "myns"
},
"spec": {
"containers": [{
"name": "mypod",
"image": "redis",
"volumeMounts": [{
"name": "foo",
"mountPath": "/etc/foo",
"readOnly": true
}]
}],
"volumes": [{
"name": "foo",
"secret": {
"secretName": "mysecret"
}
}]
}
}
spec.volumes[].secret.items
{
"apiVersion": "v1",
"kind": "Pod",
"metadata": {
"name": "mypod",
"namespace": "myns"
},
"spec": {
"containers": [{
"name": "mypod",
"image": "redis",
"volumeMounts": [{
"name": "foo",
"mountPath": "/etc/foo",
"readOnly": true
}]
}],
"volumes": [{
"name": "foo",
"secret": {
"secretName": "mysecret",
"items": [{
"key": "username",
"path": "my-group/my-username"
}]
}
}]
}
}
0644
{
"apiVersion": "v1",
"kind": "Pod",
"metadata": {
"name": "mypod",
"namespace": "myns"
},
"spec": {
"containers": [{
"name": "mypod",
"image": "redis",
"volumeMounts": [{
"name": "foo",
"mountPath": "/etc/foo"
}]
}],
"volumes": [{
"name": "foo",
"secret": {
"secretName": "mysecret",
"defaultMode": 256
}
}]
}
}
$ ls /etc/foo/
username
password
$ cat /etc/foo/username
admin
$ cat /etc/foo/password
1f2d1e2e67df
업데이트 시간 : kubelet sync period + ttl(secret cache in kublet)
env[x].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
- name: SECRET_PASSWORD
valueFrom:
secretKeyRef:
name: mysecret
key: password
restartPolicy: Never
base64 디코딩이 된 상태로 환경변수로 세팅됨
$ echo $SECRET_USERNAME
admin
$ echo $SECRET_PASSWORD
1f2d1e2e67df
Private 레지스트리를 관리하면 아래를 참고한다. https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod
https://kubernetes.io/docs/tasks/run-application/podpreset/
--manifest-url
--config
다음과 같은 cli 옵션을 제공하지 않은envFrom
에서 secretKeyRef
으로 접근 할 경우도 존재해야만 Pod가 시작됨InvalidVariableNames
)의 경우는 무시하고 Pod가 시작됨tmpfs
에 저장되고 Pod 삭제시 함께 삭제됨volumeMounts
가 노출됨