您现在的位置是:首页 >学无止境 >K8S第一讲 Kubernetes之Secret详解网站首页学无止境
K8S第一讲 Kubernetes之Secret详解
简介K8S第一讲 Kubernetes之Secret详解
Secret详解
secret用来保存小片敏感数据的k8s资源,例如密码,token,或者秘钥。这类数据当然也可以存放在Pod或者镜像中,但是放在Secret中是为了更方便的控制如何使用数据,并减少暴露的风险。
- 用户可以创建自己的secret,系统也会有自己的secret。
- Pod需要先引用才能使用某个secret
secret仅提供有限安全
- 协作时防止机密数据泄露
- 为secret资源设置单独安全访问策略
Pod有2种方式来使用secret:
-
- 作为volume的一个域被一个或多个容器挂载
-
- 在拉取镜像的时候被kubelet引用。
创建一个secret.yaml文件,内容用base64编码:明文显示容易被别人发现,这里先转码。
echo -n 'admin' | base64
YWRtaW4=
echo -n '1f2d1e2e67df' | base64
MWYyZDFlMmU2N2Rm
vim secret.yml
---
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque #模糊
data:
username: YWRtaW4=
password: MWYyZDFlMmU2N2Rm
或者
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque #模糊
stringData:
username: admin
password: 1f2d1e2e67df
kubectl apply -f secret.yml 创建
kubectl get secrets
kubectl get secret mysecret -o yaml
pod使用
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: testredis
image: daocloud.io/library/redis
volumeMounts: #挂载一个卷
- name: foo #这个名字需要与定义的卷的名字一致
mountPath: "/etc/foo" #挂载到容器里哪个目录下,随便写
readOnly: true
volumes: #数据卷的定义
- name: foo #卷的名字这个名字自定义
secret: #卷是直接使用的secret。
secretName: mysecret #调用刚才定义的secret
映射secret key到指定的路径
volumes:
- name: foo
secret:
secretName: mysecret
items: #定义一个items
- key: username #将那个key重新定义到那个目录下
path: my-group/my-username #相对路径,相对于/etc/foo的路径
以环境变量的形式使用Secret
---
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: testredis
image: daocloud.io/library/redis
env: #定义环境变量
- name: SECRET_USERNAME #创建新的环境变量名称
valueFrom:
secretKeyRef: #调用的key是什么
name: mysecret #变量的值来自于mysecret
key: username #username里面的值
spec:
containers:
- name: testredis
image: daocloud.io/library/redis
envFrom: #定义环境变量
- secretRef: #调用的key是什么
name: mysecret #变量的值来自于mysecret
- configMapRef:
name: configmap1
Deployment配置
apiVersion: v1
kind: Deployment
metadata:
name: myDeployment
spec:
selector:
matchLabels:
app: redisDeploy
replicas: 1
template:
metadata:
labels:
app: redisDeploy
spec:
containers:
- name: redisDeploy
image: daocloud.io/library/redis
envFrom:
- configMapRef:
name: myconfigMap
- secretRef:
name: mysecret
apiVersion: v1
kind: Service
metadata:
name: myService
spec:
ports:
- name: http
port: 8080
targetPort: 8080
nodePort: 31080
selector:
app: redisDeploy
type: NodePort
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。