imagePullSecrets).로 시작하면 — 볼륨 마운트 시 숨김 파일(dotfile)로 노출.secret-file → /etc/secret-volume/.secret-file로 생성ls -l에는 안 보이고 ls -la로만 보임| 대안 | 용도 |
|---|---|
| ServiceAccount + token | 같은 클러스터 내 다른 앱에 클라이언트 인증할 때 |
| 외부 secret 관리 서비스 | HTTPS로 Secret을 제공하는 third-party 도구 (Vault 등) |
| Custom signer + CertificateSigningRequest | X.509 인증서 발급용 커스텀 signer 구현 |
| Device plugin | TPM 같은 노드-로컬 암호화 하드웨어를 특정 Pod에 노출 |
type 필드로 종류를 지정 — 프로그래밍 방식의 처리와 유효성 검증을 쉽게 하기 위한 용도type에 빈 문자열이 아닌 아무 문자열이나 넣으면 됨. 관례상 도메인/이름 형식 권장 (예: cloud-hosting.example.net/cloud-api-credentials)| Built-in Type | 용도 | 필수 key |
|---|---|---|
Opaque |
임의의 사용자 정의 데이터 (기본값) | 없음 |
kubernetes.io/service-account-token |
ServiceAccount 토큰 | — (컨트롤러가 채움) |
kubernetes.io/dockercfg |
~/.dockercfg 직렬화 |
.dockercfg |
kubernetes.io/dockerconfigjson |
~/.docker/config.json 직렬화 |
.dockerconfigjson |
kubernetes.io/basic-auth |
Basic 인증 자격 증명 | username 또는 password 중 하나 이상 |
kubernetes.io/ssh-auth |
SSH 인증 자격 증명 | ssh-privatekey |
kubernetes.io/tls |
TLS 인증서 + 키 | tls.crt, tls.key |
bootstrap.kubernetes.io/token |
노드 부트스트랩 토큰 | token-id, token-secret |
type 미지정 시 기본값 — kubectl create secret generic으로 생성TokenRequest API로 단기·자동 갱신 토큰을 쓰는 것이 권장
kubectl create token 명령으로 직접 발급kubernetes.io/service-account.name annotation에 기존 ServiceAccount 이름을 지정해야 함. Secret 생성 후 컨트롤러가 token key와 service-account.uid annotation을 자동으로 채워 줌dockercfg (레거시 포맷) 또는 dockerconfigjson (신규 포맷) 중 택1kubectl create secret docker-registry로 간편 생성 가능kubectl create secret docker-registry my-secret \
--docker-username=user \
--docker-password=pass \
--docker-server=my-registry.example:5000
data의 auth 값은 단순 base64 → 읽을 수 있으면 레지스트리 토큰이 노출됨. 동적 자격 증명이 필요하면 credential provider 권장username / password 두 key 중 하나 이상 필수 — 값은 base64 인코딩 (또는 stringData로 평문 제공)Opaque로도 동일하게 쓸 수 있지만, 타입을 명시하면 용도와 key 규칙이 명확해짐ssh-privatekey key 필수 — SSH private key를 값으로 저장known_hosts 파일 등을 ConfigMap으로 함께 관리해야 MITM 방어 가능tls.crt (인증서) + tls.key (개인 키) 두 key 필수kubectl create secret tls로 간편 생성 가능kube-system namespace에 bootstrap-token-<token-id> 이름으로 생성data key| key | 설명 | 필수 |
|---|---|---|
token-id |
6자리 랜덤 ID | O |
token-secret |
16자리 랜덤 토큰 | O |
description |
토큰 설명 | X |
expiration |
RFC3339 UTC 만료 시각 | X |
usage-bootstrap-<usage> |
토큰의 추가 용도 boolean 플래그 | X |
auth-extra-groups |
system:bootstrappers 외 추가 인증 그룹 (쉼표 구분) |
X |
kubectl / 설정 파일(YAML) / Kustomizedata 필드 값은 base64 인코딩 필수. 평문으로 넣고 싶으면 stringData 필드 사용stringData는 내부적으로 data에 병합됨 — 같은 key가 둘 다에 있으면 stringData가 우선- _ . 만 허용 (ConfigMap과 동일)kubectl edit / 설정 파일 재적용 / Kustomize로 수정 가능optional: true를 지정하면 — Secret이 없어도 무시하고 진행spec.volumes[].secret.secretName + volumeMounts[]configMapAndSecretChangeDetectionStrategy)subPath로 마운트한 컨테이너는 자동 갱신 안 됨env[].valueFrom.secretKeyRef로 개별 key 매핑spec.imagePullSecrets에 같은 namespace의 Secret 참조 목록을 지정imagePullSecrets를 등록해두면, 해당 SA로 생성되는 모든 Pod에 자동 적용immutable: true로 설정하면 data 수정 불가, 되돌리기도 불가tmpfs에 저장 — 디스크(비휘발성 스토리지)에 기록되지 않음env나 volumeMounts를 명시적으로 설정해야 함list 또는 watch 권한이 있으면 — Pod이 명시적으로 참조하지 않는 Secret까지 포함해 해당 namespace의 모든 Secret을 읽을 수 있음cluster-admin 같은 광범위한 역할은 관리 목적 외에는 피해야 함privileged: true로 실행되는 컨테이너는 해당 노드의 모든 Secret에 접근 가능 — 주의