secret的使用方式和configmap很像,secret使用加密的方式更加安全,configmap更适合传递配置文件。
◆Opaque:通用型Secret,默认类型;
◆ kubernetes.io/service-account-token:作用于ServiceAccount,包含一个令牌,用于标识API服务账户;
◆ kubernetes.io/dockerconfigjson:下载私有仓库镜像使用的Secret,
和宿主机的/root/.docker/config.json一致,宿主机登录后即可产生该文件;
◆ kubernetes.io/basic-auth:用于使用基本认证(账号密码)的Secret,可以使用Opaque取代;
◆ kubernetes.io/ssh-auth:用于存储ssh密钥的Secret;
◆ kubernetes.io/tls:用于存储HTTPS域名证书文件的Secret,可以被Ingress使用;
◆ bootstrap.kubernetes.io/token:一种简单的 bearer token,
用于创建新集群或将新节点添加到现有集群,在集群安装时可用于自动颁发集群的证书。
用文件创建secret,两个文件一个创建用户名一个创建密码。
echo -n "admin" > user.txt #创建文件user写入值admin
echo -n "Huawei@123" > password.txt #创建文件password.txt写入值Huawei@123
kubelet create secret generic secret-name --from-file=user.txt --from-file=password.txt
# generic secret的类型
kubelet describe secret secret-name #查看secret
Name: db-user-pass
Namespace: default
Labels: <none>
Annotations: <none>
Type: Opaque
Data
====
password.txt: 10 bytes
user.txt: 5 bytes
用文件创建secret,一个文件中同时创建用户名密码
cat 1.txt
user=admin
password=123qer
kubectl create secret generic secret-pass2 --from-env-file=1.txt
echo -n "admin" | base64 #生成用户名和密码的base64的加密,应为secret是使用base64加密的。
echo -n “Huawai@123” | base64
cat secret.yaml # 使用加密过的数值创建
apiVersion: v1
kind: Secret
metadata:
name: mysecret
data:
user: YWRtaW4=
password: SHVhd2VpQDEyMw==
kubectl describe secret mysecret #查看详细信息
Name: mysecret
Namespace: default
Labels: <none>
Annotations:
Type: Opaque
Data
====
password: 10 bytes
user: 5 bytes
使用mount挂载到pod中,这样会生成以键命名的文件,内容是value的值。
#使用volume挂载
apiVersion: v1
kind: Pod
metadata:
name: secretpod
spec:
containers:
- name: secretpod-test
image: busybox
args: ["/bin/sh","-c","sleep 3000"]
volumeMounts:
- name: mysecrettest
mountPath: "/etc/config"
readOnly: true
volumes:
- name: mysecrettest
secret:
secretName: mysecret
使用env生成环境变量
#使用env应用secret
apiVersion: v1
kind: Pod
metadata:
name: envsecretpod
spec:
containers:
- name: envsecretpodd
image: busybox
args: ["/bin/sh","-c","sleep 3000"]
env:
- name: PASSWORD
valueFrom:
secretKeyRef:
name: mysecret
key: password
- name: USER
valueFrom:
secretKeyRef:
name: mysecret
key: user
#使用envFrom引用secret
apiVersion: v1
kind: Pod
metadata:
name: secretenvfrom
spec:
containers:
- name: secretenvfrom
image: nginx
envFrom:
- secretRef:
name: my-secret
用secret来存储私有镜像仓库的用户名密码及地址
创建方法:
kubectl create secret docker-registry myregistrykey \
#secret的类型
--docker-server=DOCKER_REGISTRY_SERVER \ #仓库地址
--docker-username=DOCKER_USER \ #用户名
--docker-password=DOCKER_PASSWORD \ #密码
--docker-email=DOCKER_EMAIL #email
如何使用,在pod内增加字段如下:
spec:
imagePullSecrets:
- name: myregistry
containers:
用secret来存储域名证书
创建secret
kubectl -n default create secret tls nginx-test-tls --key=tls.key --cert=tls.crt
在pod内使用
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: nginx-https-test
namespace: default
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: https-test.com
http:
paths:
- backend:
serviceName: nginx-svc
servicePort: 80
tls: #增加tls字段
- secretName: nginx-test-tls