?
secret | 保存密码,token,敏感的k8s资源 |
configmap(重点) | 1.2加入的新特征 这类数据可以存放在镜像当中,但是放在secret当中可以更方便的控制,减少暴露的风险,保存加密的信息 |
secret的类型
docker-registry | 存储docker仓库的认证信息,以及docker组件认证信息(私有) |
generic | 是secret的默认模式,Opaque base64加密编码的secret.用户自定义的密码,密钥等等 |
tls | TLS/SSL 用于存储证书和私钥,https |
还有一种系统自建的:kubernetes.io/service-account-token用来访问系统的apiserver.pod会默认使用这个kubernetes.io/service-account-token创建的secret和apiserver通信自动挂载到 pod的/run/secret/kubernets.io/serviceaccount.?? ? ? ? ? ?? |
[root@master01 k8s]# kubectl get secret
NAME TYPE DATA AGE
default-token-zf8fj kubernetes.io/service-account-token 3 18d
nfs-client-provisioner-token-b5z8s kubernetes.io/service-account-token 3 3d21h
#查看secret中的加密信息
pod引用secret:三种方式
1 | 挂载的方式,secret挂载到pod当中的一个或者多个容器上的卷里面 |
2 | 把secret作为容器的环境变量 |
3 | Docker-registry 可以作为集群拉取镜像时的使用,使用secret可以实现免密登录 |
secret创建方式
陈述式
[root@master01 opt]# kubectl create secret generic mysecret --from-file=/opt/username.txt --from-file=/opt/password.txt
secret/mysecret created
#指定文件提取信息,generic:默认类型,opaque加密类型 ,--from-file=/opt/username.txt 从指定文件获取需要加密的信息
[root@master01 k8s]# kubectl get secrets
NAME TYPE DATA AGE
default-token-zf8fj kubernetes.io/service-account-token 3 19d
mysecret Opaque 2 80m
mysecret1 Opaque 2 7m22s
nfs-client-provisioner-token-b5z8s kubernetes.io/service-account-token 3 4d1h
#查看有哪些secrets
[root@master01 k8s]# kubectl describe secrets mysecret
Name: mysecret
Namespace: default
Labels: <none>
Annotations: <none>
Type: Opaque
Data
====
password.txt: 4 bytes
username.txt: 3 bytes
#查看secret详细信息
[root@master01 k8s]# echo username.txt | base64
dXNlcm5hbWUudHh0Cg==
[root@master01 k8s]# echo password.txt | base64
cGFzc3dvcmQudHh0Cg==
#以64加密方式加密
声明式
[root@master01 opt]# echo passwd.txt | base64
cGFzc3dkLnR4dAo=
[root@master01 opt]# echo username.txt | base64
dXNlcm5hbWUudHh0Cg==
#将格式转换为64加密方式
[root@master01 k8s]# kubectl explain secret
KIND: Secret
VERSION: v1
#看一下secret的格式
apiVersion: v1
kind: Secret
metadata:
name: mysecret1
type:
Opaque
data:
username: dXNlcm5hbWUudHh0Cg==
password: cGFzc3dkLnR4dAo=
#先要创建secret
#挂载的方式实现
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: nginx
image: nginx:1.22
volumeMounts:
- name: secrets
mountPath: "/etc/secrets"
readOnly: false
volumes:
- name: secrets
secret:
secretName: mysecret1
[root@master01 k8s]# kubectl exec -it mypod bash
root@mypod:/etc/secrets# cd /etc/secrets/
root@mypod:/etc/secrets# ls
password username
root@mypod:/etc/secrets# cat password
passwd.txt
保存的内容是加密内容,容器内部可以解密直接引用
例2
[root@master01 k8s]# kubectl create secret generic mysecret2 --from-file=/etc/passwd --from-file=/etc/shadow
apiVersion: v1
kind: Secret
metadata:
name: mysecret1
type:
Opaque
data:
username: MTIzCg==
password: NDU2Cg==
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: nginx
image: nginx:1.22
volumeMounts:
- name: secrets
mountPath: "/etc/secrets"
readOnly: false
volumes:
- name: secrets
secret:
secretName: mysecret2
[root@master01 k8s]# kubectl exec -it mypod bash
root@mypod:/# cd /etc/secrets/
root@mypod:/etc/secrets# ls
passwd shadow
root@mypod:/etc/secrets# cat passwd
把secret作为容器的环境变量
[root@master01 k8s]# echo 123 | base64
MTIzCg==
[root@master01 k8s]# echo 456 | base64
NDU2Cg==
#创建secret
apiVersion: v1
kind: Secret
metadata:
name: mysecret1
type:
Opaque
data:
username: MTIzCg==
password: NDU2Cg==
创建pod