1. Secrets의 용도:
Secret 은 ConfigMap 과 유사하다.
차이점은 Secret 은 민감한 정보를 다룰 때 (e.g 패스워드, SSH Key 등) 사용한다는 점이다.
Secret 은 Control Plane 에서 관리되어서 역할 기반 접근 제어(Role-Based Access Control, RBAC) 를 통해서 접근을 제어할 수 있다.
Secret 은 쿠버네티스 시스템 로그 (= 어플리케이션 컨테이너의 로그와는 다르다.) 에도 출력되지 않는다고 한다.
2. Secrets의 한계:
High Value 자산을 가진 키나 데이터라면 Kubernetes 의 Secret 으로 관리하지 말고 Google Cloud KMS 를 통해서 관리하는 것을 추천한다고 함.
- Google Cloud KMS 의 보안 수준이 더 높기 때문에 권장하는 것 같다.
- K8s 의 Secret 은 Base64 인코딩 정도로만해서 저장하는 반면에 Google Cloud KMS 는 키를 암호화해서 저장하니까.
3. Secrets의 유형:
Secret 의 다음과 같이 3가지 유형이 있다:
- Generic Type
- TLS Type
- Docker Registry Secret Type
Generic Type:
- 일반적인 목적으로 사용할 수 있는 Secret 이며 Key-Value 로 저장된다.
- ConfigMap 과 같이 File, Directory, Literal Value 를 통해서 생성할 수 있는 Secret 이다.
TLS Type:
- Public, Privte Encryption Key Pair 를 저장할 때 사용하는 Secret 이다.
- PEM format 으로 인코딩 된 Public Key certificate 와 Private Key certificate 를 명싱해야한다.
Docker Registry Secret Type:
- Private Docker Registry 에서 Image 를 가지고 올 때 인증 Credential 을 저장하려고 사용하는 Secret 이다.
- GKE 에서 Google Container Registry 를 통해서 Container Image 를 관리하고 있다면, GKE 에서 사용하는 동일한 인증 매커니즘을 사용할테니 이 Secret 은 필요하지 않을 수 있다.
4. Secrets의 생성 및 저장:
Generic Type 의 Secret 생성 방법:
- 생성 방법은 ConfigMap 과 유사하다.
- Secret 으로 등록할 값은 Base64 로 인코딩해서 넣어줘야한다.
- Secret 으로 만들어진 값은 GCP Console 이나
kubectl get
또는describe
명령을 내려도 출력되지 않는다.
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
username: YWRtaW4= # base64 인코딩된 값 "admin"
password: MWYyZDFlMmU2N2Rm # base64 인코딩된 값

5. Secrets의 사용:
Secret 또한 ConfigMap 과 같이 Contaienr 의 Environment 로 사용될 수 있다:
- Secret 을 등록할 때 Encoding 해서 넣었었다. 여기서 환경변수로 넣을 때는 자동으로 쿠버네티스가 Decoding 해서 넣어준다.
Secret 은 Volume 으로도 사용할 수 있다:
- Volume 으로 사용할 때 ConfigMap 과 같이 Kubelet 이 주기적으로 Secret 이 업데이트 되었는지 확인하고, 업데이트 되었다면 이를 Volume 에 반영하도록 한다.
Secret 을 Volume 으로 사용할 때 이를 일부만 가져올 수도 있다.
item
필드를 이용해서 전체 Secret 을 가지고 오지 않고 해당 키만 가지고온다.
'Kubernetes' 카테고리의 다른 글
Google Kubernetes Engine: Authentication and Authorization (0) | 2023.11.19 |
---|---|
Google Kubernetes Engine: kubectl (0) | 2023.11.18 |
Google Kubernetes Engine: ConfigMap (0) | 2023.11.17 |
Google Kubernetes Engine: StatefulSets (0) | 2023.11.17 |
Google Kubernetes Engine: Volumes (0) | 2023.11.17 |