자습서: 중요한 구성 데이터를 Kubernetes 기밀로 저장하는 방법
Secrets
와 이를 어떻게 사용하여 보안 처리가 필요한 민감한 설정 데이터, 예를 들어 데이터베이스 인증서, API 키 등을 저장하는지 연구하고자 한다.이 예제는 여느 때와 마찬가지로 구동됩니다.
Secrets
(CLI, yaml 등) 및 YAML
!)사용 가능on GitHubHappy to get your feedback via or just drop a comment 🙏🏻
이 블로그는 두 가지 논리적 섹션으로 나뉩니다.
Secrets
Secrets
기술선행 조건:
본고의 예시를 보려면
minikube
클러스터와 kubectl
CLI 도구 하나만 있으면 클러스터를 방문할 수 있습니다.minikube
를 컴퓨터의 가상 시스템에 단일 노드 Kubernetes 클러스터로 설치합니다.Mac 컴퓨터에서 간단히 다음을 수행할 수 있습니다.curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64 \
&& chmod +x minikube
sudo mv minikube /usr/local/bin
kubectl
클러스터와 상호 작용하도록 설치minikube
.Mac 컴퓨터에서 다음을 수행할 수 있습니다.curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/darwin/amd64/kubectl
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
비밀을 만들다
창설
Secret
의 기술을 살펴보겠습니다.목록 파일 사용
사용
data
섹션정의된
Secret
부분에 저장된 설정 데이터를 키 값으로 만들 수 있습니다.apiVersion: v1
kind: Secret
metadata:
name: service-apikey
data:
apikey: Zm9vYmFy
data
민감한 정보를 나타내는 키 값 데이터가 포함되어 있으며, 그 중에서 Secret
키는 키이고, 값은 apikey
인코딩 문자열이다Kubernetes에서 만들려면
base64
:kubectl apply -f https://raw.githubusercontent.com/abhirockzz/kubernetes-in-a-nutshell/master/secrets/secret-data.yaml
To keep things simple, the YAML file is being referenced directly from the GitHub repo, but you can also download the file to your local machine and use it in the same way.
확인
Secret
이 생성되었습니다.kubectl get secret/service-apikey -o yaml
다음과 같은 (YAML) 응답을 받게 됩니다.apiVersion: v1
data:
apikey: Zm9vYmFy
kind: Secret
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"v1","data":{"apikey":"Zm9vYmFy"},"kind":"Secret","metadata":{"annotations":{},"name":"service-apikey","namespace":"default"}}
creationTimestamp: "2019-12-17T11:11:27Z"
name: service-apikey
namespace: default
resourceVersion: "113009"
selfLink: /api/v1/namespaces/default/secrets/service-apikey
uid: 671b547c-3316-4916-b6dc-be2b551b974e
type: Opaque
Fetching the
Secret
details usingkubectl get
does not disclose its contents
참고
Secret
는 YAML 목록에서 제공합니다.디코딩을 통해 일반 텍스트 양식을 확인할 수 있습니다.echo 'Zm9vYmFy' | base64 --decode
//foobar
사용apikey: Zm9vYmFy
섹션이전 예에서 사용된
stringData
속성은 인코딩 정보를 저장하는 데 사용됩니다.순수한 텍스트 데이터를 안전하게 저장하려면 data
절을 사용하십시오.다음은 예입니다.apiVersion: v1
kind: Secret
metadata:
name: plaintext-secret
stringData:
foo: bar
mac: cheese
base64
와 stringData
의 값은 순수한 텍스트 형식으로 전달됩니다.생성foo
및 확인:kubectl apply -f https://raw.githubusercontent.com/abhirockzz/kubernetes-in-a-nutshell/master/secrets/secret-plaintext.yaml
kubectl get secret/plaintext-secret -o yaml
YAML 응답 mac
섹션입니다.실제 데이터는 Secret
단 인코딩 형식으로 저장된다data:
foo: YmFy
데이터를 디코딩하면 원래 텍스트 입력 data
과 일치하는지 확인할 수 있습니다.echo 'YmFy' | base64 --decode
//bar
Note that
data
section does not accept plain text attribute. Trying to do so will result in error similar to this:illegal base64 data at input byte 8
파일 내용
전체 파일의 내용을 입력
base64
부분에 제공할 수도 있습니다!이 가능하다, ~할 수 있다,...apiVersion: v1
kind: Secret
metadata:
name: secret-in-a-file
stringData:
app-config.yaml: |-
hello: world
john: doe
이 생성bar
:kubectl apply -f https://raw.githubusercontent.com/abhirockzz/kubernetes-in-a-nutshell/master/secrets/secret-file.yaml
이 결과stringData
는 Secret
라는 키를 포함하고, 그 내용(값)은 제공된 데이터의 인코딩이 될 것이다 Secret
평소처럼 쿠베르니테스에서 이 점을 확인하고 내용을 디코딩하세요kubectl get secret/secret-in-a-file -o yaml
echo '<"data" content in yaml response> | base64 --decode
Note: when you use this technique, your application is responsible for parsing out the data which represents the
Secret
configuration. In this case, it happens to be newline-separated key-value pairs, but it could be anything else
응용 프로그램 구성을 사용합니다.아마르
base64
명령을 사용하여 기밀 객체를 작성할 수 있습니다.사용
kubectl
일반 텍스트 데이터를 사용하여 CLI를 사용하여 생성kubectl create secret
(Kubernetes의 --from-literal
인코딩 형식으로 저장)kubectl create secret generic redis-credentials --from-literal=user=poweruser --from-literal=password='f0ob@r'
사용Secret
kubectl create secret generic topsecret --from-file=api_keys.txt
이렇게 하면base64
, 이 예에서 디렉터리 하나만 가리키면 모든 파일이 생성됩니다
--from-file
kubectl create secret generic topsecrets --from-file=/home/credentials/
너는 결국기밀을 사용하다
기밀을 유용하게 사용하려면 응용 프로그램, 즉
topsecret
s에 사용할 수 있도록 확보해야 합니다. 이를 실현하는 방법을 탐색해 봅시다.환경 변수
api_keys.txt
데이터를 Secret
의 환경 변수로 사용할 수 있습니다 (예: Pod
.다음은 예입니다.apiVersion: v1
kind: Pod
metadata:
name: pod1
spec:
containers:
- name: nginx
image: nginx
env:
- name: API_KEY
valueFrom:
secretKeyRef:
name: service-apikey
key: apikey
우리는 Secret
Pod
의 키ConfigMap
를 사용하고 그 값이 apikey
의 환경 변수Secret
로 사용할 수 있는지 확인합니다.만들기
service-apikey
(이전 예시에 따라 만든 비밀이 있다고 가정) 및 확인kubectl apply -f https://raw.githubusercontent.com/abhirockzz/kubernetes-in-a-nutshell/master/secrets/pod-secret-env.yaml
kubectl get pods -w
대기 API_KEY
상태에서 Pod
상태로 전환합니다.그리고 환경 변수가 주입되었는지 확인Pod
kubectl exec pod1 -- env | grep API_KEY
다음 답변을 받으셔야 합니다 - Pod
Running
를 사용하면 참조Pod
의 단일 항목이 아니라 모든 항목을 API_KEY=foobar
의 환경 변수로 편리하게 사용할 수 있습니다.다음과 같이 사용할 수 있습니다.apiVersion: v1
kind: Pod
metadata:
name: pod2
spec:
containers:
- name: nginx
image: nginx
envFrom:
- secretRef:
name: plaintext-secret
우리가 사용하는 Secret
은 envFrom
Pod
을 가리킨다.이 만들기 plaintext-secret
kubectl apply -f https://raw.githubusercontent.com/abhirockzz/kubernetes-in-a-nutshell/master/secrets/pod-secret-envFrom.yaml
kubectl get pods -w
대기Secret
상태envFrom.secretRef
로 전환한 다음 환경 변수가 있는지 확인합니다.kubectl exec pod2 -- env | grep foo
//foo=bar
kubectl exec pod2 -- env | grep mac
//mac=cheese
이것은 Pod
과Pod
가 각각 환경 변수와 디코딩 값Running
과foo
Pod에 추가됨을 증명하였다두루마리
mac
을(를) the
에 설치할 수 있습니다.예를 들면apiVersion: v1
kind: Pod
metadata:
name: pod3
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- name: apikey-config-volume
mountPath: /secret
readOnly: true
volumes:
- name: apikey-config-volume
secret:
secretName: service-apikey
bar
권지cheese
Secrets
.이것을 만들려면Volume
:kubectl apply -f https://raw.githubusercontent.com/abhirockzz/kubernetes-in-a-nutshell/master/secrets/pod-secret-volume.yaml
kubectl get pods -w
대기 Pod
상태에서 apikey-config-volume
상태로 전환합니다.다음 명령을 수행합니다.kubectl exec pod3 -- cat /secret/apikey
//foobar
이것은 비밀 키 service-apikey
가 파일 (이름 Secret
로 Pod
디렉터리에 불러온 것을 확인합니다.파일의 내용은 비밀 값에 불과하다. 즉, 이 예에서 Pod
사용Running
응용 프로그램 Pod에서 개인 Docker 등록표에서 Docker 이미지를 검증하고 추출하는 데 사용할 수 있는 방법apikey
이 있습니다.실제로는 세 가지 유형이 있다
service-apikey
apikey
- 지금까지 예시된 바와 같이 키 값을 저장하는 데 사용됩니다 /secret
- 상점 공공.개인 키 대 정보 asfoobar
imagePullSecrets
- Docker 레지스트리의 자격 증명을 확인합니다.Secrets
Secrets
유형은 Kubernetesgeneric
(Pod에서) Docker 레지스트리 자격 증명tls
참조예를 들면 항상 도움이 된다.
apiVersion: v1
kind: Pod
metadata:
name: pod4
spec:
containers:
- name: privateapp
image: abhirockzz/test-private-repo:latest
command: ["/bin/sh"]
args: ["-c", "while true; do date; sleep 5;done"]
imagePullSecrets:
- name: docker-repo-secret
Secrets
라고 하는 docker-registry
를 참조하십시오.만들래요.But, before that please ensure that you have a private Docker registry - I used
DockerHub
, but you can choose any other
먼저
docker-registry
명령을 사용하여 Docker 자격 증명이 포함된 Secret
을 만듭니다.kubectl create secret docker-registry docker-repo-secret --docker-server=DOCKER_REG_SERVER --docker-username=DOCKER_REG_USERNAME --docker-password=DOCKER_REG_PASSWORD --docker-email=DOCKER_REG_EMAIL
Docker Hub의 경우(예:kubectl create secret docker-registry docker-repo-secret --docker-server=https://index.docker.io/v1/ --docker-username=foobarbaz --docker-password=t0ps3cr3t [email protected]
kubectl get secret/docker-repo-secret -o yaml
https://index.docker.io/v1/
is the Docker Hub registry server
테스트를 위해
imagePullSecrets
이미지와 Secret
이미지를 사용합니다.docker pull busybox
docker tag busybox [DOCKER_REG]/[DOCKER_PRIVATE_REPO]:[IMAGE_TAG]
e.g.
docker tag busybox abhirockzz/test-private-repo:latest
... 및 imagePullSecrets.name
itdocker push [DOCKER_REG]/[DOCKER_PRIVATE_REPO]:[IMAGE_TAG]
e.g.
docker push abhirockzz/test-private-repo:latest
개인 환매 준비가 완료되면 Secret
을 만들 수 있습니다. docker-repo-secret
을 통해 제공된 등록표 증빙서류를 사용하여 개인 환매에서 이미지를 추출할 수 있습니다.kubectl apply -f https://raw.githubusercontent.com/abhirockzz/kubernetes-in-a-nutshell/master/secrets/pod-secret-docker.yaml
kubectl get pods -w
대기 Secret
상태docker-repo-secret
로 이동합니다.If you see an
ErrImagePull
error, it indicates that there might be problem authenticating to the Docker registry. To get details use:kubectl describe pod/pod4
크레인 정상 확인:
kubectl create secret docker-registry
busybox
이미지 자체가 실제로 아무것도 하지 않았기 때문에 우리는 tag
(예를 들어 push
규범에서 제공한 것) 을 실행한다.따라서 로그를 보셔야 합니다 (5초마다 인쇄)Tue Dec 17 14:17:34 UTC 2019
Tue Dec 17 14:17:39 UTC 2019
Tue Dec 17 14:17:44 UTC 2019
Tue Dec 17 14:18:49 UTC 2019
다 좋아요!이것은 Pod이 Docker 자격 증명을 사용하여 개인 Docker 재구매에서 이미지를 추출할 수 있음을 의미합니다. Docker 자격 증명은 Pod
을 사용하여 주입되고 Secret
자체는 Pod
를 참조합니다.반갑습니다.
다음은
Running
사용 시 기억해야 할 사항 목록입니다.kubectl logs -f pod4
를 사용하려는 모든 busybox
이전에 만들어야 합니다.while true; do date; sleep 5;done
은Pod
에 적용됩니다. 즉, Pod
만 동일imagePullSecrets
에서만 사용할 수 있습니다.Secret
(사용Secrets
Secret
가 시작되지 않습니다.Pod
크기 제한입니다.Kubernete와 용기를 배우는 데 관심이 있으시면 Azure 시작하세요!좋은 출발점은 문서의 create a free account 를 사용하여 서비스를 익히는 것이다.나는 또한 보기를 강력히 건의한다quickstarts, tutorials and code samples.고급 사용자는 50 days Kubernetes Learning Path 또는 Kubernetes best practices 중 일부 프레젠테이션, 최고급 기능 및 기술 회의를 참조하기를 원할 수 있습니다.
나는 정말 네가 좋아하고 이 문장에서 뭔가를 배웠으면 좋겠다🙌 만약 당신이 한다면 좋아하고 따라가세요!
Reference
이 문제에 관하여(자습서: 중요한 구성 데이터를 Kubernetes 기밀로 저장하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/itnext/tutorial-how-to-use-kubernetes-secrets-for-storing-sensitive-config-data-3dl5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)