# K8s 시크릿 ## 특징 - 시크릿은 [[패스워드]], [[토큰]], [[키]]처럼 보안이 필요한 테이터를 저장하는 데 사용한다. 보안 데이터의 노출 리스크를 줄이기 위해 사용된다. 사이즈는 1MB 미만이어야 한다. - 서비스 어카운트를 만들면 서비스 어카운트의 토큰을 담은 시크릿이 네임스페이스에 자동으로 생성된다. 해당 토큰은 [[RBAC]] 기반의 접근 제어에 사용된다. - 사용자가 시크릿을 등록하면 파드의 환경 변수나 마운트된 볼륨의 파일을 통해 접근할 수 있다. - 시크릿은 네임스페이스에 속하며 다른 네임스페이스에서는 읽을 수 없다. - 시크릿 자체는 암호화와는 직접적인 관계가 없으며 벤더가 제공하는 추가적인 암호화 기능을 사용할 수도 있다 - 파드가 시크릿을 사용하도록 설정했으면 기동하기 전에 시크릿이 존재해야 한다. ## 시크릿 이용 ### Base64 인코드 $ echo -n 'my_id' | base64 bXlfaWQ= $ echo -n 'my_password' | base64 bXlfcGFzc3dvcmQ= ### secret yml apiVersion: v1 kind: Secret metadata: name: db-credentials type: Opaque data: username: bXlfaWQ= password: bXlfcGFzc3dvcmQ= ### command $ kubectl apply -f db_credentals.yml ### get secret $ kubectl get secret NAME TYPE DATA AGE db-credentials Opaque 2 17s default-token-mwh6r kubernetes.io/service-account-token 3 4d5h tls-certificate kubernetes.io/tls 2 46h ### my yml apiVersion: v1 kind: Pod metadata: name: web-apl spec: containers: - name: nginx image: nginx env: - name: DB_USERNAME ## 환경 변수 valueFrom: secretKeyRef: name: db-credentials ## 시크릿명 key: username ## 시크릿 키 - name: DB_PASSWORD ## 환경 변수 valueFrom: secretKeyRef: name: db-credentials key: password ### command $ kubectl apply -f reg_secret_env.yml pod/web-apl created $ kubectl get po NAME READY STATUS RESTARTS AGE bustbox 0/1 Error 0 3h58m web-apl 1/1 Running 0 11s web-php-7b7566bd54-nvm7n 1/1 Running 0 4h6m $ kubectl exec -it web-apl -- bash -c 'echo $DB_USERNAME, $DB_PASSWORD' my_id, my_password ### 컨테이너에서 시크릿을 볼륨으로 마운트하는 매니페스트 apiVersion: v1 kind: Pod metadata: name: web spec: containers: - name: nginx image: nginx ports: - protocol: TCP containerPort: 443 volumeMounts: ## 마운트 정의 - name: cert-vol ## 시크릿의 볼륨 이름 mountPath: /etc/cert ## 컨테이너상의 마운트 경로 volumes: ## 볼륨 정의 - name: cert-vol ## 시크릿의 볼륨 이름 secret: secretName: www-cert ## 시크릿의 이름