k8s的secret基本概念及案例

secret相对于configMap,功能上是相似的
但是secret是以其他编码方式去记录配置信息的,但是也可以被解读,只不过有技术门槛,不是那么容易就被解读。
使用base64可以解码:echo ******** | base64 -d
********是kubectl describe secret secretName -o yaml中的值的编码

pod.spec.volumes.secret

secret有三种类型:(查看:kubectl create secret --help)
  docker-registry  一般保存docker-registry的认证信息
  generic  通用的,一般保存一些密码数据
  tls  一般保存私钥或证书

pod创建时若连接到私有仓库中需要认证,则要创建专用的secret (docker-registry)类型的
pod.spec.imagePullSecrets字段中需要指明secret的name

generic方式的secret,里面的键值虽说不是铭文,但是解码的技术手段要求不高。
对于密码类型的信息,最好用数据卷挂载方式来实现信息的注入,然后以文件形式挂载到挂载点,设置权限。

例:用数据卷方式,将mysql的密码注入到pod的容器中。
1.创建secret
kubectl create secret generic test --from-literal=MYSQL_ROOT_PASSWORD=smb@nds

2.创建pod

 1 vim myapp-demo.yaml
 2 apiVersion: apps/v1
 3 kind: Deployment
 4 metadata:
 5   name: myapp-demo
 6   namespace: default
 7 spec:
 8   replicas: 1
 9   selector:
10     matchLabels:
11       app: myapp
12   template:
13     metadata:
14       labels:
15         app: myapp
16     spec:
17       containers:
18       - name: myapp
19         image: ikubernetes/myapp:v1
20         imagePullPolicy: IfNotPresent
21         ports:
22         - name: http
23           containerPort: 80
24         volumeMounts:
25         - name: mysql
26           mountPath: /test/
27       volumes:
28       - name: mysql
29         secret:
30           secretName: test

3.启动pod,查看信息是否注入

1 kubectl apply -f myapp-demo.yaml
2 kubectl exec -it myapp-demo-75f8f9bf9f-8nbdv -- /bin/sh
3 / # cat test/MYSQL_ROOT_PASSWORD
4 smb@nds/ #

 


可以看到,信息注入后是明文的,可以设置查看访问权限解决。


   

posted @ 2019-05-16 19:28  zh_Revival  阅读(2024)  评论(0编辑  收藏  举报