Secret 是用来保存密码、token、密钥等敏感数据的 k8s 资源
这类数据虽然也可以存放在 Pod 或者镜像中,但是放在 Secret 中是为了更方便的控制如何使用数据,并减少暴露的风险
Secret 有四种类型:
https://kubernetes.io/docs/concepts/configuration/secret/
##创建准备文件
echo -n "zhangsan" > username.txt
echo -n "123" > password.txt
##通过文件
##创建secret
kubectl create secret generic secret-demo1 --from-file=username.txt --from-file=password.txt
##查看创建的 secret
kubectl get secrets
##查看信息
kubectl describe secrets secret-demo1
kubectl get secrets secret-demo1 -o yaml
##信息通过 base64转码
echo -n "zhangsan" | base64
##通过 键值对创建
##创建secret
kubectl create secret generic secret-demo2 --from-literal=username=lisi
##先将值进行 base64转码
echo -n zhangsan | base64
echo -n 123 | base64
##利用命令生成yaml文件
kubectl get secrets secret-demo1 -o yaml > secrets-demo.yaml
apiVersion: v1
kind: Secret
metadata:
name: secret-demo3
namespace: default
type: Opaque
data:
username: emhhbmdzYW4=
passwd: MTIz
##利用yaml创建secrets
kubectl apply -f secrets-demo.yaml
##查看创建状态
kubectl describe secrets secret-demo3
apiVersion: v1
kind: Pod
metadata:
name: poddemo1
spec:
containers:
- image: nginx:1.14
name: poddemo1
volumeMounts:
- name: secrets
mountPath: "/usr/share/nginx/html"
readOnly: true
volumes:
- name: secrets
secret:
secretName: secret-demo1
##进入pod查看
kubectl exec -it poddemo1 bash
ls /usr/share/nginx/html
apiVersion: v1
kind: Pod
metadata:
name: poddemo2
spec:
containers:
- image: nginx:1.14
name: poddemo2
env:
- name: TEST_USER
valueFrom:
secretKeyRef:
name: secret-demo1
key: username
- name: TEST_PASSWD
valueFrom:
secretKeyRef:
name: secret-demo1
key: password
envFrom:
- secretRef:
name: secret-demo2
##进入pod查看
kubectl exec -it poddemo2 bash
cd /etc/kubernetes/
cd pki/
cp ca* /opt/
cd /opt/
kubectl create secret tls tls-secret --cert=./ca.crt --key=./ca.key
##准备 docker harbor的服务器
##首先,先修改 daemon.json 配置文件
vim /etc/docker/daemon.json
{
"insecure-registries": ["http://192.168.242.71:80"],
##注意在末尾添加 ,
"registry-mirrors": ["镜像加速URL"]
}
##重启Docker服务
systemctl restart docker
##上传 Docker harbor 安装文件并安装
##安装 Docker-compose 服务
cd /opt/
tar xf harbor-offline-installer-v1.10.18.tgz
chmod +x docker-compose
mv /opt/docker-compose /usr/local/bin/docker-compose
docker-compose --version
##修改 harbor 配置文件
cd /opt/harbor
vim harbor.yml
---第5行---
hostname: 192.168.242.71
---第13行---
注释掉https的配置项
---第27行
harbor_admin_password: Harbor12345
##记住harbor的密码
##先做前其准备或者之间安装 harbor
cd /opt/harbor
./prepare
./install.sh ##自动安装
###查看所有的镜像是否安装成功
docker-compose ps
###在网页中登陆到 harbor
http://192.168.242.67
用户:admin
密码:Harbor12345
##就可以看见页面
##推送镜像到 仓库中
docker tag nginx:1.14 192.168.242.71/test/nginx:1.14
docker login -u admin -p Harbor12345 http://192.168.242.71
docker push 192.168.242.71/test/nginx:1.14
##所有的node节点修改docker配置文件
##首先,先修改 daemon.json 配置文件
vim /etc/docker/daemon.json
{
"insecure-registries": ["http://192.168.242.71:80"],
##注意在末尾添加 ,
"registry-mirrors": ["镜像加速URL"]
}
##重启Docker服务
systemctl restart docker
##创建dockerconfigjson的secret
kubectl create secret docker-registry docker-auth --docker-username=admin --docker-server=http://192.168.242.71:80 --docker-password=Harbor12345 [email protected]
##创建 pod
vim docker-secret-demo.yaml
apiVersion: v1
kind: Pod
metadata:
name: docker-dem02
spec:
nodeSelector:
name: b
imagePullSecrets:
- name: docker-auth
containers:
- image: 192.168.242.71:80/test/nginx:1.14
name: docker-dem02
ports:
- containerPort: 85
volumeMounts:
- name: secrets
mountPath: "/usr/share/nginx/html"
readOnly: true
volumes:
- name: secrets
secret:
secretName: secret-demo1
##创建准备文件
mkdir /opt/cm
cd /opt/cm
echo -n 'zhangsan' > username
echo -n '123' > password
##利用文件创建
##创建cm
kubectl create cm cm-demo1 --from-file=/opt/cm/username
##查看创建的cm
kubectl get cm
##查看cm 的详细信息
kubectl describe cm cm-demo1
##以yaml格式查看cm配置
kubectl get cm cm-demo1 -o yaml
##利用键值对创建 cm
kubectl create cm cm-demo2 --from-literal=name=lisi
cd /opt/cm
echo '123456' > index.html
##创建cm
kubectl create cm cm-demo3 --from-file=index.html
##创建用于挂载的pod
kubectl run pod_demo1 --image=nginx:1.14 --port=80 -o yaml --dry-run=client > pod-demo1.yaml
apiVersion: v1
kind: Pod
metadata:
labels:
run: pod-demo1
name: pod-demo1
spec:
volumes:
- name: html
configMap:
name: cm-demo3
containers:
- image: nginx:1.14
name: pod-demo1
ports:
- containerPort: 80
volumeMounts:
- name: html
mountPath: /usr/share/nginx/html
##访问pod查看
kubectl get pods -o wide
curl 10.244.3.86
##热更新
kubectl edit cm cm-demo3
##修改里面的内容
##进入到pod容器中,导出文件
kubectl exec -it pod-demo1 bash
cd /etc/nginx/
##导出pod容器的文件
kubectl cp default/pod-demo1:/etc/nginx/nginx.conf ./nginx.conf
##创建cm文件
kubectl create cm cm-demo4 --from-file=nginx.conf
apiVersion: v1
kind: Pod
metadata:
labels:
run: pod-demo2
name: pod-demo2
spec:
volumes:
- name: html
configMap:
name: cm-demo4
containers:
- image: nginx:1.14
name: pod-demo2
ports:
- containerPort: 80
volumeMounts:
- name: html
mountPath: /etc/nginx/nginx.conf
subPath: nginx.conf ##挂载的是文件时,要添加的东西
kubectl create deployment myapp --image=nginx:1.14 --port=80 --replicas=3 --dry-run=client -o yaml > deploy-demo.yaml
##创建 cm
kubectl create cm cm-demo5 --from-file=username --from-literal=password=123
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy-test
spec:
replicas: 3
selector:
matchLabels:
app: deploy-test
template:
metadata:
labels:
app: deploy-test
spec:
containers:
- image: nginx:1.14
name: nginx
ports:
- containerPort: 80
env:
- name: username
valueFrom:
configMapKeyRef:
name: cm-demo5
key: username
- name: password
valueFrom:
configMapKeyRef:
name: cm-demo4
key: password
- image: busybox
name: busybox
command: ["/bin/sh", "-c", "sleep 36000"]
envFrom:
- configMapRef:
name: cm-demo3
##进入到容器中,查看env
kubectl exec -it deploy-test-74ff77bd97-88bhv -c nginx sh
env
#修改副本数量
kubectl patch deployments.apps deploy-test --patch '{"spec": {"replicas": 1}}'
##修改镜像
kubectl patch deployments.apps deploy-test --patch '{"spec": {"template": {"spec": {"containers": [{"name": "nginx", "image": "nginx:1.15"}]}}}}'
kubectl create cm <资源名称> --from-file=文件|目录 --from-literal=<键名>=<键值>
kubectl get cm <资源名称> -o yaml 或 kubectl describe cm <资源名称>
使用 cm资源
挂载的方式:
容器环境变量引用的方式:(不支持热更新)
Secret 资源 用于保存密码文件、tls证书/私钥文件、token令牌字符串、镜像私有仓库认证信息 等需要加密的敏感的信息
Secret资源的 4 种类型:
创建 Secret资源
kubectl create secret generic|tls|docker-registry <资源名称> 选项
generic <资源名称> --from-file=文件|目录 --from-literal=<键名>=<键值>
tls <资源名称> --cert=证书文件路径 --key=私钥文件路径
docker-registry <资源名称> --docker-server=私有仓库URL地址 --docker-username=用户名 --docker-password=密码 --docker-email=邮箱
使用 Secret资源
挂载的方式:
容器环境变量引用的方式:
陈述式管理资源的方式 修改或添加 资源对象的配置
kubectl patch deployment myapp-demo1 --patch '{"第一层字段": {"第二层字段": {...}}}'
kubectl patch deployment myapp-demo1 --patch '{"spec": {"template": {"spec": {"containers": [{"name": "myapp", "image": "soscscs/myapp:v2"}]}}}}'