K8S对象-Secret及应用
目录
1. 概述
1.1 作用
- 用来保存敏感信息,例如密码、OAuth 令牌和 ssh key等等
而ConfigMap只能使用明文保存,因此不适合保存这些。
1.2 三种类型
看帮助文件可知:
- docker registry
作用:为用户提供docker仓库帐号密码 - generic
创建基于key value的secret。 - tls
从给定的(public/private)公钥/私钥对创建TLS secret 。
2. docker registry
k8s连接镜像仓库,如果是http或者https没有证书,则不能直接下载,需要使用如下方法:
2.1 http库的使用
- 创建secrete
# kubectl create secret docker-registry abc-habor-xf --namespace=xinfa --docker-server=10.252.97.209:80 --docker-username=admin --docker-password=Habor209 --docker-email=40010355@qq.com
- 使用secret
添加imagePullSecrets
一段。
spec:
containers:
- name: web-iot
image: 10.252.97.57/iot/web-k8sdev:1.2.0
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
protocol: TCP
name: web-port
imagePullSecrets:
- name: docker-registry
2.2 https仓库的使用
2.2.1 获取config.json的编码
-
登录https的镜像仓库,生成对应的config.json文件
-
查看如图:
添加/root/.docker/config.json
文件如下:
{
"auths": {
"10.252.97.57": {
"auth": "YWRtaW46MVcyM2x5YzQ1ag=="
}
},
"HttpHeaders": {
"User-Agent": "Docker-Client/18.06.1-ce (linux)"
}
- 将json文件生成base64编码
#cat /root/.docker/config.json|base64 -w 0
ewoJImF1dGhzIjogewoJCSIxMC4yNTIuOTcuNTciOiB7CgkJCSJhdXRoIjogIllXUnRhVzQ2TVZjeU0yeDVZelExYWc9PSIKCQl9Cgl9LAoJIkh0dHBIZWFkZXJzIjogewoJCSJVc2VyLUFnZW50IjogIkRvY2tlci1DbGllbnQvMTguMDYuMS1jZSAobGludXgpIgoJfQp9
2.2.2 创建secret
- yaml文件
创建yml文件如下:
apiVersion: v1
kind: Secret
metadata:
name: my-harbor
namespace: iot-01
type: kubernetes.io/dockerconfigjson
data:
.dockerconfigjson: ewoJImF1dGhzIjogewoJCSIxMC4yNTIuOTcuNTciOiB7CgkJCSJhdXRoIjogIllXUnRhVzQ2TVZjeU0yeDVZelExYWc9PSIKCQl9Cgl9LAoJIkh0dHBIZWFkZXJzIjogewoJCSJVc2VyLUFnZW50IjogIkRvY2tlci1DbGllbnQvMTguMDYuMS1jZSAobGludXgpIgoJfQp9
- 创建secrete
# kubeclt create -f secrete.yaml
2.2.3 使用
同 2.1
3. generic
- 语法
generic NAME [--type=string] [--from-file=[key=]source] [--from-literal=key1=value1] [--dry-run]
- 示例
- 本地文件创建
创建一个名为my-secret的secret,指定文件内容作为某key的值。
# kubectl create secret generic my-secret --from-file=ssh-privatekey=~/.ssh/id_rsa --from-file=ssh-publickey=~/.ssh/id_rsa.pub
- 指定键值对创建
用key1 = supersecret和key2 = topsecret创建一个名为my-secret的secret
kubectl create secret generic my-secret --from-literal=key1=supersecret --from-literal=key2=topsecret
- 指定evn文件创建
从env文件创建名为my-secret的secret
# kubectl create secret generic my-secret --from-env-file=path/to/bar.env
4. tls
- 语法
tls NAME --cert=path/to/cert/file --key=path/to/key/file [--dry-run]
- 示例
使用指定的key创建名为tls-secret的TLS secret
kubectl create secret tls tls-secret --cert=path/to/tls.cert --key=path/to/tls.key