kubernetes資源對象--secret和Service Account

secret

概念

secret資源對象主要目的是保存和處理敏感信息/私密數據,比如密碼,OAuth tokens,ssh keys等信息。將這些信息放在secret對象中比直接放在pod或docker image中更安全,也更方便使用。

類型

Opaque任意字符串,默認類型

kubernetes.io/service-account-token:作用於Service Account

kubernetes.io/dockercfg:作用於Docker registry,用戶下載docker鏡像認證使用

Opaque

創建

文件方式

首先把需要加密的內容實現base64編碼

echo -n lykops | base64
bHlrb3Bz

echo -n 1qaz2wsx | base64
MXFhejJ3c3g=

然後寫入lykops-secret.yaml

apiVersion: v1 kind: Secret metadata:
 name: lykops-secret
 namespace: default
type: Opaque data:
 password: MXFhejJ3c3g=
 username: bHlrb3Bz

導入kubectl create -f lykops-secret.yaml

命令行方式

kubectl create secret generic lykops --secret --from-literal=username=lykops --from-literal=password=1qaz2wsx

pod引用

cat << EOF > lykops-secret.yaml apiVersion: v1 kind: Pod metadata:
 name: lykops-secret-pod labels:
 software: apache project: lykops app: lykops-secret-pod version: v1 spec:
 containers:
 -name: lykops-secret-pod image: web:apache command: ['sh' , '/etc/run.sh'] env:
 - name: SECRET_USERNAME valueFrom:
 secretKeyRef:
 name: lykops-secret key: username - name: SECRET_PASSWORD valueFrom:
 secretKeyRef:
 name: lykops-secret key: password EOF kubectl create -f lykops-secret-pod.yaml 

測試

進入pod kubectl exec -it lykops-secret-pod /bin/bash env | grep -i '^SECRET' SECRETUSERNAME=lykops SECRET_PASSWORD=1qaz2wsx

imagePullSecrets

當在需要安全驗證的環境中拉取鏡像時,需要通過用戶名和密碼。

apiVersion: v1 kind: Secret metadata:
 name: myregistrykey
 namespace: awesomeapps
data:
 .dockerconfigjson:UmVhbGx5IHJlYWxseSByZWVlZWVlZWVlZWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGx5eXl5eXl5eXl5eXl5eXl5eXl5eSBsbGxsbGxsbGxsbGxsbG9vb29vb29vb29vb29vb29vb29vb29vb29vb25ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubmdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2cgYXV0aCBrZXlzCg==
type: kubernetes.io/dockerconfigjson 

或者直接通過命令創建

kubectl create secret docker-registry myregistrykey --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL 

接下來拉取鏡像的時候,就可以使用了

apiVersion: v1 kind: Pod metadata:
 name: foo
 namespace: awesomeapps
spec:
 containers:
 -name: foo
 image: janedoe/awesomeapp:v1
 imagePullSecrets:
 -name: myregistrykey

其實本質上還是kubelet把這個認證放到了docker的目錄下面,如下: cat ~/.docker/config.json { "auths": { "10.39.0.118": { "auth": "Y2hlbm1vOmNtMTM4MTE2NjY3ODY=" }, "10.39.0.12:5000": { "auth": "dXNlcjAxOjEyMzQ1YQ==" }, "http://10.39.0.12:5000": { "auth": "dXNlcjAxOjEyMzQ1YQ==" } } }

Service Account

Service Account(以下簡稱SA)的使用場景:運行在pod裏的進程需要調用K8S API以及非K8S API的其它服務。SA並不是給K8S集羣的用戶使用的,而是給pod裏面的進程使用的,它爲pod提供必要的身份認證。

如果K8S開啓了SA(位於/etc/kubernetes/controller-manager的KUBEADMISSIONCONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"),那麼會在每個namespace下面都會創建一個默認的default的SA。

本文轉自開源中國-kubernetes資源對象--secret和Service Account 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章