在之前的ingress的tomcat https中已经使用过secret,secret适用于密钥文件,密码等。secret也有很多类型
- generic:通用的,保存密码
- tls:保存私钥和证书
- docker-registry:docker的认证信息:当up一个容器的时候,首选会检查本地是否有这个镜象,如果没有就会到registry拉取。如果是私有的仓库,则需要输入账号信息登录,而后拉取。这些过程通过kubelet实现的。在spec资源标准清单里面,链接私有仓库链接的用户认证存放:imagePullSecrets。大体像是下面这样的
创建一个generic的secret
[root@linuxea configMap]# kubectl create secret generic redis-passwd --from-literal=password=kjksada@#2lsmx
secret/redis-passwd created
[root@linuxea configMap]# kubectl get secret
NAME TYPE DATA AGE
default-token-k25gj kubernetes.io/service-account-token 3 12d
redis-passwd Opaque 1 4s
tomcat-ingress-secret kubernetes.io/tls 2 11d
当使用kubectl describe secret redis-passwd
查看时,只会显示字节数,并不会显示信息
[root@linuxea configMap]# kubectl describe secret redis-passwd
Name: redis-passwd
Namespace: default
Labels: <none>
Annotations: <none>
Type: Opaque
Data
====
password: 14 bytes
当然,可以换种方式查看 kubectl get secret redis-passwd -o yaml
得到的密码是由bese64加密的密码:a2prc2FkYUAjMmxzbXg=
[root@linuxea configMap]# kubectl get secret redis-passwd -o yaml
apiVersion: v1
data:
password: a2prc2FkYUAjMmxzbXg=
kind: Secret
metadata:
creationTimestamp: 2018-09-28T13:34:53Z
name: redis-passwd
namespace: default
resourceVersion: "1742431"
selfLink: /api/v1/namespaces/default/secrets/redis-passwd
uid: 485aae93-c323-11e8-a8ab-88882fbd1028
type: Opaque
可以尝试解码echo a2prc2FkYUAjMmxzbXg=|base64 -d
就可以进行解码。
[root@linuxea configMap]# echo a2prc2FkYUAjMmxzbXg=|base64 -d
kjksada@#2lsmx
我们可以以同样的方式挂载。并且这个密码会存在在容器内是名明文的,并不是加密的在pod中定义
env:
- name: REDIS_PASSWORD # 传递到容器内的环境变量key
valueFrom:
secretKeyRef: # 独特的secretKeyRef
name: redis-passwd # secret 名称
key: password # 创建key的kye名称,并非key:value
资源清单如下(主要查看变量的传递)
[root@linuxea configMap]# cat pod-configmap-redis.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-redis-test
namespace: default
spec:
containers:
- name: linuxea-pod1-com
image: "marksugar/nginx_createrepo"
ports:
- name: http
containerPort: 80
env:
- name: REDIS_PASSWORD
valueFrom:
secretKeyRef:
name: redis-passwd
key: password
apply起来
[root@linuxea configMap]# kubectl apply -f pod-configmap-redis.yaml
pod/pod-redis-test created
[root@linuxea configMap]# kubectl get pods
NAME READY STATUS RESTARTS AGE
linuxea-pvc-pod 1/1 Running 0 5d
pod-meftp 1/1 Running 0 7h
pod-meftp-cmfile 1/1 Running 0 3h
pod-redis-test 1/1 Running 0 6s
过滤下传入的REDIS_PASSWORD
[root@linuxea configMap]# kubectl exec -it pod-redis-test printenv |grep REDIS
REDIS_PASSWORD=kjksada@#2lsmx