文章目录
- secret介绍
- secret作用
- secret类型
- pod使用secret
- secret配置使用
- 默认secret
- 创建secret
- 第一种:从文件中创建
- 第二种:编写一个secret文件
- 使用secret
- 将Secret挂载到Volume
- 将Secret设置为环境变量
- 拉取harbor私有仓库镜像
secret介绍
secret作用
- Secret 对象类型用来保存敏感信息,例如密码、OAuth 令牌和 ssh key。
- 敏感信息放在 secret 中比放在 Pod 的定义或者容器镜像中来说更加安全和灵活
secret类型
- Service Account: Kubernetes 自动创建包含访问 API 凭据的 secret,并自动修改 pod 以使用此类型的 secret。
- Opaque: 使用base64编码存储信息,可以通过base64 --decode解码获得原始数据,因此安全性弱。
- kubernetes.io/dockerconfigjson: 用于存储docker registry的认证信息
pod使用secret
Pod 可以用两种方式使用 secret:
- 作为 volume 中的文件被挂载到 pod 中的一个或者多个容器里
- 当 kubelet 为 pod 拉取镜像时使用
secret配置使用
默认secret
- serviceaccout 创建时 Kubernetes 会默认创建对应的 secret。对应的 secret 会自动挂载到 Pod 的 /run/secrets/kubernetes.io/serviceaccount 目录中。
- 每个namespace下有一个名为default的默认的ServiceAccount对象
- ServiceAccount里有一个名为Tokens的可以作为Volume一样被Mount到Pod里的Secret,当Pod启动时这个Secret会被自动Mount到Pod的指定目录下,用来协助完成Pod中的进程访问API Server时的身份鉴权过程。
1.kubectl get pod
2.kubectl exec my-nginx-xxxxxxxx ls /var/run/secrets/kubernetes.io/serviceaccount
3.kubectl get sa
4.kubectl describe sa default
创建secret
第一种:从文件中创建
1.创建目录
mkdir secret
cd secret
2.从文件中创建Secret(如果密码具有特殊字符,则需要使用 \ 字符对其进行转义)
echo -n 'admin' > ./username.txt
echo -n 'lyueyue' > ./password.txt
kubectl create secret generic db-user-pass --from-file=./username.txt --from-file=./password.txt
3.查看
kubectl get secrets
第二种:编写一个secret文件
1.编写一个 secret 对象
echo -n 'admin' | base64
echo -n 'lyueyue' | base64
2.编写secret文件
vim mysecret.yaml
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
username: YWRtaW4=
password: bHl1ZXl1ZQ==
3.运行文件
kubectl apply -f mysecret.yaml
4.查看
kubectl get secrets
kubectl describe secrets mysecret
使用secret
将Secret挂载到Volume
1.编写文件
vim pod1.yaml
apiVersion: v1
kind: Pod
metadata:
name: mysecret
spec:
containers:
- name: demo
image: myapp:v1
volumeMounts:
- name: secrets
mountPath: "/secret"
readOnly: true
volumes:
- name: secrets
secret:
secretName: mysecret
items:
- key: username
path: my-group/my-username
2.运行文件
kubectl apply -f pod1.yaml
3.查看
kubectl get pod
kubectl exec mysecret -- ls /secret
kubectl exec mysecret -- ls /secret/my-group
kubectl exec mysecret -- cat /secret/my-group/my-username
将Secret设置为环境变量
1.编写文件
vim pod2.yaml
apiVersion: v1
kind: Pod
metadata:
name: secret-env
spec:
containers:
- name: nginx
image: myapp:v1
env:
- name: SECRET_USERNAME
valueFrom:
secretKeyRef:
name: mysecret
key: username
- name: SECRET_PASSWORD
valueFrom:
secretKeyRef:
name: mysecret
key: password
2.运行文件
kubectl apply -f pod2.yaml
3.查看变量
kubectl get pod
kubectl exec secret-env -- env
拉取harbor私有仓库镜像
1.在harbor上新建私有项目及用户
2.发现拉取私有仓库镜像被拒绝
3.设置docker-registry
kubectl create secret docker-registry myregistrykey --docker-server=www.lyueyue.org --docker-username=lyue --docker-password=Ly123455 --docker-email=lyue@163.com
4.查看secret
kubectl get secrets
kubectl describe secrets myregistrykey
kubectl get secrets myregistrykey -o yaml
5.编写文件
vim pod3.yaml
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: busyboxplus
image: www.lyueyue.org/lyueyue/busyboxplus:latest
imagePullSecrets:
- name: myregistrykey
6.运行文件
kubectl apply -f pod3.yaml
7.查看
kubectl describe pod mypod
新建一个私有仓库和用户
作为维护人员
在server2上拉取被拒
拉取成功!