企业级容器技术 k8s secret

secret用来保存敏感信息,比如密码或者令牌。
使用文件进行创建

[kubeadm@server1 secret]$ echo -n "admin" > username.txt ##创建用户信息
[kubeadm@server1 secret]$ echo -n "aekhg777" > password.txt  ##创建用户密码文件
[kubeadm@server1 secret]$ kubectl create secret generic db-user-pass --from-file=./username.txt --from-file=./password.txt  
##创建secret  性质是generic(通用)  名字随便创建  后面接用户名密码文件
secret/db-user-pass created
[kubeadm@server1 secret]$ kubectl get secrets 
NAME                  TYPE                                  DATA   AGE
db-user-pass          Opaque                                2      6s
default-token-6qxhd   kubernetes.io/service-account-token   3      8d
[kubeadm@server1 secret]$ kubectl describe secrets db-user-pass 
Name:         db-user-pass  
Namespace:    default
Labels:       <none>
Annotations:  <none>

Type:  Opaque

Data
====
password.txt:  8 bytes
username.txt:  5 bytes

再或者直接使用命令进行创建,区别是其中的参数从--from-file变为--from-literal=username/passwd=用户名/密码

kubectl create secret generic db-user-pass  --from-literal=username=admin --from-literal=password=aekhg777

这两种方式得到的结果是相同的,并且直接可以看到密码

[kubeadm@server1 secret]$ kubectl get secrets db-user-pass -o yaml
apiVersion: v1
data:
  password.txt: YWVraGc3Nzc=
  username.txt: YWRtaW4=
kind: Secret
metadata:
  creationTimestamp: "2020-02-24T13:06:05Z"
  name: db-user-pass
  namespace: default
  resourceVersion: "611210"
  selfLink: /api/v1/namespaces/default/secrets/db-user-pass
  uid: d0743c70-6697-4b16-b149-b338ea4954c7
type: Opaque

其中用户名和密码都在上面进行了显示,但是我们会发现和我们原来的设定并不相同,因为这个使用了加密,想要直接看到密码需要进行解码。

[kubeadm@server1 secret]$ echo YWVraGc3Nzc= | base64 -d  ##使用64位解码得到原始数据
aekhg777

但是如果密码中存在特殊字符那需要使用\(反斜杠)进行转译。

正向来完之后我们反向进行,如何使用yaml文件创建secret。
首先我们将用户名和密码使用base64进行加密。之后将加密过的用户名和密码写入文件中。

[kubeadm@server1 secret]$ echo admin | base64 
YWRtaW4K
[kubeadm@server1 secret]$ echo aekhg777 | base64 
YWVraGc3NzcK
[kubeadm@server1 secret]$ vim mysecret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  password: YWVraGc3NzcK
  username: YWRtaW4K

再使用命令将secret创建出来。

使用secret
使用secret需要进行挂接,

apiVersion: v1
kind: Pod
metadata:
  name: mysecret
spec:
  containers:
  - name: nginx
    image: nginx
    volumeMounts:
    - name: secrets
      mountPath: "/secret"
      readOnly: true
  volumes:
  - name: secrets
    secret:
      secretName: mysecret

首先创建一个pod,在pod中查看挂接的文件。

[kubeadm@server1 secret]$ kubectl exec mysecret ls /secret
password
username

内部文件就是你的用户名和密码,文件中的内容是前面的secret文件的内容。
同时我们可以指定挂载卷的目录,
前面的yaml文件内容不变最后卷的地方添加指定目录

 volumes:
  - name: secrets
    secret:
      secretName: mysecret
      items:
      - key: username
        path: my-group/my-username

最底下的path创建的地点不是直接在当前目录,而是在/secret(查看前面的yaml文件)目录下继续进行创建。

[kubeadm@server1 secret]$ kubectl exec mysecret2 cat /secret/my-group/my-username
admin

给secret设置环境变量

直接再创建一个pod

 env:
      - name: SECRET_USERNAME
        valueFrom:
          secretKeyRef:
            name: mysecret
            key: username
      - name: SECRET_PASSWORD
        valueFrom:
          secretKeyRef:
            name: mysecret
            key: password
[kubeadm@server1 secret]$ kubectl exec mysecret2 env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=mysecret2
SECRET_USERNAME=admin
##在这里直接就可以看到了
SECRET_PASSWORD=aekhg777

拉取私有仓库的镜像

kubectl create secret docker-registry myregistrykey --docker-server=passyt.com --docker-username=admin --docker-password=aekhg777 --docker-email=passyt@passyt.com 
##创建一个secret 名字叫myregistrykey

docker-registry是仓库的认证设置。
secret创建完成后编写一个yaml文件,创建一个pod

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: game2048
    image: passyt.com/test/game2048
  imagePullSecrets:                   ##这个东西是给认证信息的必须要添加
    - name: myregistrykey             ##认证信息的名字是myregistrykey

使用私有仓库中的镜像创建pod,首先的操作就是要给仓库进行登陆,登陆完成之后才可以拉取镜像,那么我们的顺序就是首先创建一个secret来储存用户的用户名和密码,之后在创建pod的时候调取这个secret中的内容,成功认证拉取镜像。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值