K8s:Secret
Secret
作用:
1、数据存储到etcd
2、大小不能超过1M()
3、在同一个namespace
使用场景:
1、使用文件的形式挂载到容器中、给容器提供证书(把证书创建成Secret、挂到容器中使用)。
2、使用Secret给容器提供环境变量。
3、kubelet为pod拉取镜像时候做认证。(与镜像仓库的认证)
使用流程
1、管理员先创建一个Secret(包括创建configmap)————然后把请求发给apiserver
2、apiserver把Secret(包括创建configmap)请求存到etcd(不是存在apiserver、apiserver是负载多节点、多个apiserver数据没办法同步)
3、创建pod:需要申请消费configmap或者Secret、pod需要使用apiserver去etcd下载Secret文件
4、下载好之后、就放在node节点本地、放好之后就通过容器的utfs、挂载给容器使用。
最后总结:Secret先存放在etcd、最后node节点也会下载一份给容器使用。
Secret类型
多种类型:
Opaque 用户定义的任意数据
kubernetes.io/service-account-token ServiceAccount 令牌
kubernetes.io/dockercfg ~/.dockercfg 文件的序列化形式
kubernetes.io/dockerconfigjson ~/.docker/config.json 文件的序列化形式
kubernetes.io/basic-auth 用于基本身份认证的凭据
kubernetes.io/ssh-auth 用于 SSH 身份认证的凭据
kubernetes.io/tls 用于 TLS 环境,保存crt证书和key证书
bootstrap.kubernetes.io/token 启动引导令牌数据
加密和解密
base64
echo "12345678" | base64
echo "MTIzNDU2NzgK" | base64 -d
查看
kubectl get secret secret名字 -n myserver -o yaml
存放宿主机
/var/lib/kubelet/
find 直接查找
文件是由kubelet调用apiserver生成的
nginx的secret小实验
1、configmap提供配置
2、secret提供证书
1、创建证书
kubectl create secret tls myserver-tls-key --cert=./server.crt --key=./server.key -n myserver
2、查看
kubectl get secret myserver-tls-key -n myserver
kubectl get secret myserver-tls-key -n myserver -o json
编写yaml文件
1、ConfigMap
2、Deployment(pod)
3、Service
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-config
namespace: myserver
data:
default: |
server {
listen 80;
server_name www.mysite.com;
listen 443 ssl;
ssl_certificate /etc/nginx/conf.d/certs/tls.crt;
ssl_certificate_key /etc/nginx/conf.d/certs/tls.key;
location / {
root /usr/share/nginx/html;
index index.html;
if ($scheme = http ){ #未加条件判断,会导致死循环
rewrite / https://www.mysite.com permanent;
}
if (!-e $request_filename) {
rewrite ^/(.*) /index.html last;
}
}
}
---
#apiVersion: extensions/v1beta1
apiVersion: apps/v1
kind: Deployment
metadata:
name: myserver-myapp-frontend-deployment
namespace: myserver
spec:
replicas: 1
selector:
matchLabels:
app: myserver-myapp-frontend
template:
metadata:
labels:
app: myserver-myapp-frontend
spec:
containers:
- name: myserver-myapp-frontend
image: nginx:1.20.2-alpine
ports:
- containerPort: 80
volumeMounts:
- name: nginx-config
mountPath: /etc/nginx/conf.d/myserver
- name: myserver-tls-key
mountPath: /etc/nginx/conf.d/certs
volumes:
- name: nginx-config
configMap:
name: nginx-config
items:
- key: default
path: mysite.conf
- name: myserver-tls-key
secret:
secretName: myserver-tls-key
---
apiVersion: v1
kind: Service
metadata:
name: myserver-myapp-frontend
namespace: myserver
spec:
type: NodePort
ports:
- name: http
port: 80
targetPort: 80
nodePort: 30018
protocol: TCP
- name: htts
port: 443
targetPort: 443
nodePort: 30019
protocol: TCP
selector:
app: myserver-myapp-frontend
生产环境
1、镜像自己打
2、做好优化
3、server_name 都用configmap挂载映射
4、证书使用浏览器信任(一般都是公司购买)
通过Secret给k8s提供认证信息
docker镜像仓库
/root/.docker/config.json ###生成认证文件
1、基于这个认证文件创建一个Secret(如果多个namespace需要认证、都要创建一下)
2、通过命令行直接创建
1.1、先创建Secret
1、先登录一下仓库地址(为了获取json文件)(/root/.docker/config.json)
2、使用这个文件去创建Secret
docker login --username=rooroot@aliyun.com registry.cn-qingdao.aliyuncs.com
kubectl create secret generic aliyun-registry-image-pull-key \ --from-file=.dockerconfigjson=/root/.docker/config.json \ --type=kubernetes.io/dockerconfigjson \ -n myserver
1.2、编写yaml文件
测试:验证pod启动时候、拉取镜像策略是不是使用了Secret
#apiVersion: extensions/v1beta1
apiVersion: apps/v1
kind: Deployment
metadata:
name: myserver-myapp-frontend-deployment
namespace: myserver
spec:
replicas: 1
selector:
matchLabels:
app: myserver-myapp-frontend
template:
metadata:
labels:
app: myserver-myapp-frontend
spec:
containers:
- name: myserver-myapp-frontend
image: registry.cn-qingdao.aliyuncs.com/zhangshijie/nginx:1.16.1-alpine-perl
ports:
- containerPort: 80
imagePullSecrets:
- name: aliyun-registry-image-pull-key
---
apiVersion: v1
kind: Service
metadata:
name: myserver-myapp-frontend
namespace: myserver
spec:
ports:
- name: http
port: 80
targetPort: 80
nodePort: 30018
protocol: TCP
type: NodePort
selector:
app: myserver-myapp-frontend
注意:如果不添加imagePullSecrets: 直接去拉取镜像会失败、添加imagePullSecrets:后、再次去apply -f yaml的配置文件时候、上一个pod会临时running、因为镜像拉取成功时候、上一个pod会有短暂running、然后立即被删除。

浙公网安备 33010602011771号