一、secret配置管理
配置管理:
加密配置:保存密码,token,其他敏感信息的k8s资源
应用配置:我们需要定制化的给应用进行配置,我们需要把定制好的配置文件同步到pod当中容器
1.1、加密配置:
secret:
[root@master01 ~]# kubectl get secrets ##查看加密配置
[root@master01 ~]# kubectl get secrets -n kube-system ##查看加密配置
1.2、secret三种类型:
1、service-account-token:k8s集群自建,用来访问APIserver的secret,pod的默认使用这secret和APIserver进行通信。
自动挂载到pod的目录/run/secrets/kubernets.io/serviceaccount目录。
2、Opaque:用户自定义的密码,密钥等等,默认类型就是opaque。generic(语法)
3、kubernets.io/dockerconfigison:配置docker私有仓库的认证信息。
4、TLS:用来存储TLS或者SSL证书和私钥。
1、创建文件-----基于文件创建secret,目的进行加密
[root@master01 ~]# cd /opt/
[root@master01 opt]# mkdir secret
[root@master01 opt]# cd secret/
[root@master01 secret]# echo "xy102" > username.txt
[root@master01 secret]# echo "123456" > passwd.txt
[root@master01 secret]# echo "123456" > password.txt
##创建加密文件secret1,基于Opaque类型创建,文件来自于本目录路径
[root@master01 secret]# kubectl create secret generic secret1 --from-file=username.txt --from-file=password.txt
##查看secret配置文件
[root@master01 secret]# kubectl get secrets
secret1 Opaque 2 11s
##查看secret1的详细信息,类型
[root@master01 secret]# kubectl describe secrets secret1
Name: secret1
Namespace: default
Labels: <none>
Annotations: <none>
Type: Opaque
Data
====
password.txt: 7 bytes
username.txt: 6 bytes
2、对指定内容进行加密-----#yaml文件实现----生成secret2加密文件
##对指定内容进行加密
[root@master01 configmap]# echo -n xy102 | base64
eHkxMDI=
[root@master01 configmap]# echo -n 123456 | base64
MTIzNDU2
[root@master01 secret]# vim secret1.yaml
apiVersion: v1
kind: Secret
metadata:
name: secret2
type: Opaque
#声明类型
data: ##指定文件来自于加密过的文件
username: eHkxMDI=
password: MTIzNDU2
[root@master01 secret]# kubectl apply -f secret1.yaml
secret/secret2 created
3、#如何把secret挂载到pod当中
[root@master01 secret]# vim secret1.yaml
apiVersion: v1
kind: Secret
metadata:
name: secret2
type: Opaque
#声明类型
data:
username: eHkxMDI=
password: MTIzNDU2
----------------------------------------------
##以上已经创建好secret2加密文件
[root@master01 secret]# kubectl apply -f secret1.yaml
secret/secret2 created
[root@master01 secret]# vim test1.yaml
#如何把secrert挂载到pod当中
apiVersion: v1
kind: Pod
metadata:
name: pod1
labels:
app: test
spec:
containers:
- name: nginx
image: nginx:1.22
volumeMounts:
- name: sec-test
mountPath: "/etc/secrets" ##容器里面的目录
readOnly: true ##只读模式,默认就是只读
volumes:
- name: sec-test ##名称自定义
secret: ##引用加密文件格式声明
secretName: secret2 ##通过secret加密文件名称,把secret2文件挂载到容器
##查看加密文件详情
[root@master01 secret]# kubectl get secrets
secret2 Opaque 2 13m
##拉取pod,进行加密文件从宿主机到pod容器的挂载
[root@master01 secret]# kubectl apply -f test1.yaml
pod/pod1 created
[root@master01 secret]# kubectl get pod
pod1 1/1 Running 0 14s
[root@master01 secret]# kubectl exec -it pod1 bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@pod1:/# cd /etc/
root@pod1:/etc# cd secrets/
root@pod1:/etc/secrets# ls
password username
4、环境变量
[root@master01 secret]# vim test1.yaml
#如何把secrert挂载到pod当中
#把secret作为环境变量传到pod当中
apiVersion: v1
kind: Pod
metadata:
name: pod1
labels:
app: test
spec:
containers:
- name: nginx
image: nginx:1.22
env:
#给pod容器定义环境变量
- name: USER
#环境变量的变量名
valueFrom:
#user变量的值从哪里来?
secretKeyRef:
##引用secret的某一个加密文件,采用key形式,进行捕捉,此处捕捉username
name: secret2
key: username
- name: PASSWORD
valueFrom:
secretKeyRef:
name: secret2
key: password
##引用secret的某一个加密文件,采用key形式,进行捕捉,此处捕捉password
[root@master01 secret]# kubectl apply -f test1.yaml --force
pod/pod1 configured
[root@master01 secret]# kubectl exec -it pod1 bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@pod1:/# echo $USER
xy102
root@pod1:/# echo $PASSWORD
123456
##-- 查看容器里面的文件
[root@master01 secret]# kubectl exec -it pod1 -- cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
5、免密登录harbor仓库流程
1、创建secret文件harbor1,声明仓库地址,用户admin,密码123456
[root@master01 opt]# kubectl create secret docker-registry harbor1 --docker-server=192.168.168.84 --docker-username=admin --docker-password=123456
secret/harbor1 created
[root@master01 secret]# vim test1.yaml
#如何把secrert挂载到pod当中
#把secret作为环境变量传到pod当中
apiVersion: v1
kind: Pod
metadata: