美文网首页Kubernets
kuberntes 密码管理及使用

kuberntes 密码管理及使用

作者: 条子在洗澡 | 来源:发表于2019-04-16 03:05 被阅读4次

    密码保存后,直接引用即可,避免密码泄露

    1.创建密码

    1.1.secret方式创建密码

    详细信息请见:https://kubernetes.io/docs/concepts/configuration/secret/

    #查看密码集
    kubectl get secrets
    
    #命令行创建密码为redhat
    kubectl create secret generic mysecret1 --from-literal=user=tom --from-literal=password1=redhat --from-literal=password2=redhat
    
    #解析:
    #关键词: kubectl create secret generic 
    #密码名称:mysecret1 
    #使用tom 用户: --from-literal=user=tom 
    #密码1内容redhat: --from-literal=password1=redhat
    #密码2内容redhat:--from-literal=password2=redhat
    
    #查看密码 mysecret1 
    #获取密码描述
    kubectl describe secrets mysecret1
    #查看加密后的密码
    [root@k8s-master1 ~]# kubectl get secrets mysecret1 -o yaml
    apiVersion: v1
    data:
      password1: cmVkaGF0
      password2: cmVkaGF0
      user: dG9t
    
    或者使用以下命令也可以获取
    kubectl edit secrets mysecret1
    
    
    #将加密的密码解密
    [root@k8s-master1 ~]# echo cmVkaGF0 | base64 -d
    redhat
    
    #删除密码mysecret1 
    kubectl delete secrets mysecret1 
    
    

    1.2.configmaps方式创建密码mysecret2

    #1.2.1直接创建mysecret2
    kubectl create configmap mysecret2 --from-literal=user=tom --fromliteral=password1=redhat --fromliteral=password2=redhat
    
    #1.2.2通过变量创建mysecret2
    vim env.txt
    user=tom
    password1=redhat
    password2=redhat
    #创建密码mysecret2
    kubectl create configmap mysecret2 --from-env-file=./env.txt
    
    #1.2.3通过文件
    #创建三个文件,文件名即为变量名,-n去除换行符
    echo -n tom > user
    echo -n redhat > password1
    echo -n redhat > password2
    #创建密码mysecret2
    kubectl create configmap mysecret2 --from-file=./user --from-file=./password1 --from-file=./password2
    
    

    1.3.以变量的方式创建密码

    #创建变量文件
    vim env.txt
    user=tom
    password1=redhat
    password2=redhat
    
    #创建密码mysecret3
    kubectl create secret generic mysecret3 --from-env-file=./env.txt
    
    

    1.4.以yaml的方式创建密码,

    #注意其中user,password1,password2均为明文密码base64后的内容
    [root@k8s-master1 ~]# echo tom |base64
    dG9t
    [root@k8s-master1 ~]# echo dG9t |base64 -d
    tom
    
    vim mysecret4.yaml
    
    apiVersion: v1
    kind: Secret
    metadata:
      name: mysecret4
    type: Opaque
    data:
      user: dG9t
      password1: cmVkaGF0
      password2: cmVkaGF0
    
    #创建密码mysecret4
    kubectl apply -f mysecret4.yaml
    
    

    2.密码使用

    2.1以卷的方式使用secret,

    #优点:可以支持动态更新,
    #缺点:需要修改镜像,让其服务主动加载密码文件
    
    vim nginx.yaml
    
    apiVersion: v1
    kind: Pod
    metadata:
      labels:
        run: nginx
      name: nginx
    spec:
      volumes:
      - name: xx
        secret:
          secretName: mysecret1
          items:
          - key: user
            path: xx/user
          - key: password1
            path: xx/password1
          - key: password2
            path: yy/password2
      containers:
      - image: nginx
        name: nginx
        volumeMounts:
        - name: xx
          mountPath: "/etc/xx"
          readOnly: true
    
    #创建pod,并查看pod目录/etc/xx/,发现在/etc/xx下会生成三个文件,user,password1,password2,其内容为解码后的明文密码,
    #其中items,需要哪个你就写哪个,不用全部写,存储path也可以修改为自己需要存储的地方
    [root@k8s-master1 k8s_yaml]#kubectl apply -f nginx.yaml
    [root@k8s-master1 k8s_yaml]# kubectl exec -it nginx bash
    root@nginx:/# ls /etc/xx/xx/
    password1 user
    root@nginx:/# ls /etc/xx/yy/
    password2
    root@nginx:/#cat /etc/xx/xx/user 
    tom
    
    

    2.2变量的方式使用secret

    #缺点:不支持动态更新
    vim mysql.yaml
    
    apiVersion: v1
    kind: Pod
    metadata:
      name: mysql
      labels:
        name: mysql
    spec:
      containers: 
      - image: hub.c.163.com/library/mysql:latest
        name: mysql
        ports: 
        - containerPort: 3306
          name: mysql
        env: 
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysecret1
              key: password1
    
    #env中指定MYSQL_ROOT_PASSWORD为mysecret1中的password1内容
    
    

    2.3configmaps的方式使用secret

    #缺点:明文存储密码
    vim nginx.yaml
    #以文件的方式引用
    apiVersion: v1
    kind: Pod
    metadata:
      labels:
        run: nginx
      name: nginx
    spec:
      volumes:
      - name: xx
        configMap:
          name: mysecret1
      containers:
      - image: nginx
        name: nginx
        volumeMounts:
        - name: xx
          mountPath: "/etc/xx"
          readOnly: true
    
    #以变量的方式引用
    apiVersion: v1
    kind: Pod
    metadata:
      name: mysql
      labels:
        name: mysql
    spec:
      containers:
      - image: hub.c.163.com/library/mysql:latest
        name: mysql
        ports:
        - containerPort: 3306
          name: mysql
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            configMapKeyRef:
              name: mysecret1
              key: password1
    
    

    相关文章

      网友评论

        本文标题:kuberntes 密码管理及使用

        本文链接:https://www.haomeiwen.com/subject/kyrfiqtx.html