linuxea:kubernetes secret简单用法(25)

在之前的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
0 分享

您可以选择一种方式赞助本站

支付宝扫码赞助

支付宝扫码赞助

日期: 2018-10-29分类: kubernetes

标签: kubernetes

发表评论