zoukankan      html  css  js  c++  java
  • kubernetes-密码管理

    secret

    官网地址: https://kubernetes.io/docs/concepts/configuration/secret/

    创建

    命令行创建

    [root@bjcy-200 secret]# kubectl create secret generic mysecret1 --from-literal=username=bob --from-literal=password=123456
    secret/mysecret1 created
    [root@bjcy-200 secret]# kubectl get secret
    NAME                  TYPE                                  DATA   AGE
    default-token-24blg   kubernetes.io/service-account-token   3      5d1h
    mysecret1             Opaque                                2      8s

    从文件中创建

    [root@bjcy-200 secret]# echo -n "devops" > password
    [root@bjcy-200 secret]# kubectl create secret generic mysecret2 --from-file=./password  
    secret/mysecret2 created
    [root@bjcy-200 secret]# kubectl get secrets 
    NAME                  TYPE                                  DATA   AGE
    default-token-24blg   kubernetes.io/service-account-token   3      5d1h
    mysecret1             Opaque                                2      6m5s
    mysecret2             Opaque                                1      8s

    从文件读取变量创建

    [root@bjcy-200 secret]# cat env.txt 
    password=devops
    [root@bjcy-200 secret]# kubectl create secret generic mysecret3 --from-env-file=./env.txt 
    secret/mysecret3 created
    [root@bjcy-200 secret]# kubectl get secrets 
    NAME                  TYPE                                  DATA   AGE
    default-token-24blg   kubernetes.io/service-account-token   3      5d1h
    mysecret1             Opaque                                2      7m55s
    mysecret2             Opaque                                1      118s
    mysecret3             Opaque                                1      5s

    yaml文件创建

        yaml方式创建需要使用 base64 进行编码.

    [root@bjcy-200 secret]# echo -n "devops" | base64   # 编码 devops
    ZGV2b3Bz
    [root@bjcy-200 secret]# cat secret1.yaml 
    apiVersion: v1
    kind: Secret
    metadata:
      name: mysecret4
    type: Opaque
    data:
      password: ZGV2b3Bz
    [root@bjcy-200 secret]# kubectl apply -f secret1.yaml 
    secret/mysecret4 created
    [root@bjcy-200 secret]# kubectl get secrets 
    NAME                  TYPE                                  DATA   AGE
    default-token-24blg   kubernetes.io/service-account-token   3      5d1h
    mysecret1             Opaque                                2      11m
    mysecret2             Opaque                                1      5m24s
    mysecret3             Opaque                                1      3m31s
    mysecret4             Opaque                                1      8s

    查看

    [root@bjcy-200 secret]# kubectl describe secrets mysecret1 
    Name:         mysecret1
    Namespace:    default
    Labels:       <none>
    Annotations:  <none>
    
    Type:  Opaque
    
    Data
    ====
    username:  3 bytes
    password:  6 bytes
    [root@bjcy-200 secret]# kubectl get secrets mysecret1 -o yaml
    apiVersion: v1
    data:
      password: MTIzNDU2
      username: Ym9i
    kind: Secret
    metadata:
      creationTimestamp: "2020-09-03T16:30:33Z"
      managedFields:
      - apiVersion: v1
        fieldsType: FieldsV1
        fieldsV1:
          f:data:
            .: {}
            f:password: {}
            f:username: {}
          f:type: {}
        manager: kubectl
        operation: Update
        time: "2020-09-03T16:30:33Z"
      name: mysecret1
      namespace: default
      resourceVersion: "18499"
      selfLink: /api/v1/namespaces/default/secrets/mysecret1
      uid: 95540124-c44f-426b-9ec2-844cbf8dfa72
    type: Opaque
    
    # base64 解码
    [root@bjcy-200 secret]# echo -n "Ym9i" | base64 --decode
    bob[root@bjcy-200 secret]# 

    使用

    变量方式

    root@env-pod:/# env
    KUBERNETES_SERVICE_PORT_HTTPS=443
    KUBERNETES_SERVICE_PORT=443
    HOSTNAME=env-pod
    PWD=/
    PKG_RELEASE=1~buster
    HOME=/root
    KUBERNETES_PORT_443_TCP=tcp://192.168.0.1:443
    SECRET_USERNAME=bob
    NJS_VERSION=0.4.2
    TERM=xterm
    SHLVL=1
    KUBERNETES_PORT_443_TCP_PROTO=tcp
    KUBERNETES_PORT_443_TCP_ADDR=192.168.0.1
    KUBERNETES_SERVICE_HOST=192.168.0.1
    KUBERNETES_PORT=tcp://192.168.0.1:443
    KUBERNETES_PORT_443_TCP_PORT=443
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    NGINX_VERSION=1.19.1
    SECRET_PASSWORD=123456
    _=/usr/bin/env
    root@env-pod:/# echo $SECRET_PASSWORD
    123456
    root@env-pod:/# echo $SECRET_USERNAME
    bob
    root@env-pod:/# exit
    exit
    [root@bjcy-200 secret]# cat env-pod1.yaml
    apiVersion: v1
    kind: Pod
    metadata:
      creationTimestamp: null
      labels:
        run: env-pod
      name: env-pod
    spec:
      containers:
      - image: harbor.tcc.com/public/nginx
        name: env-pod
        env:
          - name: SECRET_USERNAME
            valueFrom:
              secretKeyRef:
                name: mysecret1
                key: username
          - name: SECRET_PASSWORD
            valueFrom:
              secretKeyRef:
                name: mysecret1
                key: password
        resources: {}
      dnsPolicy: ClusterFirst
      restartPolicy: Always
    status: {}
    
    [root@bjcy-200 secret]# kubectl apply -f env-pod1.yaml 
    pod/env-pod created
    [root@bjcy-200 secret]# kubectl get pods
    NAME        READY   STATUS    RESTARTS   AGE
    busyboxxx   1/1     Running   2          5d1h
    env-pod     1/1     Running   0          5s
    [root@bjcy-200 secret]# kubectl exec -it env-pod bash
    kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl kubectl exec [POD] -- [COMMAND] instead.
    root@env-pod:/# 

    挂载卷方式

    [root@bjcy-200 secret]# cat vloume-pod.yaml
    apiVersion: v1
    kind: Pod
    metadata:
      creationTimestamp: null
      labels:
        run: vloume-pod
      name: vloume-pod
    spec:
      volumes:
      - name: vloume
        secret:
          secretName: mysecret1
          items:
          - key: username
            path: my-group/my-username
          - key: password
            path: my-group/my-password
            mode: 0777
      containers:
      - image: harbor.tcc.com/public/nginx
        name: vloume-pod
        volumeMounts:
        - name: vloume
          mountPath: "/vloume"
        resources: {}
      dnsPolicy: ClusterFirst
      restartPolicy: Always
    status: {}
    
    [root@bjcy-200 secret]# kubectl apply -f vloume-pod.yaml 
    pod/vloume-pod created
    
    [root@bjcy-200 secret]# kubectl exec -it vloume-pod sh
    kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl kubectl exec [POD] -- [COMMAND] instead.
    # ls /vloume/my-group/
    my-password  my-username
    # ls -l /vloume/my-group/
    total 8
    -rwxrwxrwx 1 root root 6 Sep  3 16:54 my-password
    -rw-r--r-- 1 root root 3 Sep  3 16:54 my-username
    # exit  
    [root@bjcy-200 secret]# cat vloume-pod.yaml
    apiVersion: v1
    kind: Pod
    metadata:
      creationTimestamp: null
      labels:
        run: vloume-pod
      name: vloume-pod
    spec:
      volumes:
      - name: vloume
        secret:
          secretName: mysecret1
      containers:
      - image: harbor.tcc.com/public/nginx
        name: vloume-pod
        volumeMounts:
        - name: vloume
          mountPath: "/vloume"
        resources: {}
      dnsPolicy: ClusterFirst
      restartPolicy: Always
    status: {}

    mysql示例

    [root@bjcy-200 secret]# cat mysql.yaml 
    apiVersion: v1
    kind: Pod
    metadata:
      creationTimestamp: null
      labels:
        run: mysql
      name: mysql
    spec:
      containers:
      - image: harbor.tcc.com/public/mysql
        name: mysql
        env:
          - name: MYSQL_ROOT_PASSWORD
            valueFrom:
              secretKeyRef:
                name: mysecret1
                key: password
        resources: {}
      dnsPolicy: ClusterFirst
      restartPolicy: Always
    status: {}
    
    [root@bjcy-200 secret]# kubectl get pods -o wide
    NAME        READY   STATUS    RESTARTS   AGE     IP               NODE               NOMINATED NODE   READINESS GATES
    busyboxxx   1/1     Running   2          5d2h    10.244.235.199   bjcy-182.host.io   <none>           <none>
    env-pod     1/1     Running   0          13m     10.244.235.201   bjcy-182.host.io   <none>           <none>
    mysql       1/1     Running   0          4m35s   10.244.235.202   bjcy-182.host.io   <none>           <none>
    [root@bjcy-200 secret]# mysql -h 10.244.235.202 -uroot -p123456
    Welcome to the MariaDB monitor.  Commands end with ; or g.
    Your MySQL connection id is 3
    Server version: 5.7.18 MySQL Community Server (GPL)
    
    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    
    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
    
    MySQL [(none)]> exit
    Bye

    configmap

       官网地址: https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/

       configmap 配置 和secret类似

    创建

    [root@bjcy-200 secret]# kubectl create configmap cm1 --from-literal=password=devops
    configmap/cm1 created
    [root@bjcy-200 secret]# cat cm-envpod.yaml 
    apiVersion: v1
    kind: Pod
    metadata:
      creationTimestamp: null
      labels:
        run: cm-pod
      name: cm-pod
    spec:
      containers:
      - image: harbor.tcc.com/public/nginx
        name: cm-pod
        env:
          - name: SECRET_USERNAME
            valueFrom:
              configMapKeyRef:
                name: mysecret1
                key: username
        resources: {}
      dnsPolicy: ClusterFirst
      restartPolicy: Always
    status: {}
    [root@bjcy-200 secret]# cat cm.yaml 
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: cm2
      namespace: default
    data:
      password: data1

    查看

    [root@bjcy-200 secret]# kubectl describe configmaps cm2
    Name:         cm2
    Namespace:    default
    Labels:       <none>
    Annotations:  
    Data
    ====
    password:
    ----
    data1
    Events:  <none>
    [root@bjcy-200 secret]# kubectl get configmaps cm2 -o yaml
    apiVersion: v1
    data:
      password: data1
    kind: ConfigMap
    metadata:
      annotations:
        kubectl.kubernetes.io/last-applied-configuration: |
          {"apiVersion":"v1","data":{"password":"data1"},"kind":"ConfigMap","metadata":{"annotations":{},"name":"cm2","namespace":"default"}}
      creationTimestamp: "2020-09-03T17:29:25Z"
      managedFields:
      - apiVersion: v1
        fieldsType: FieldsV1
        fieldsV1:
          f:data:
            .: {}
            f:password: {}
          f:metadata:
            f:annotations:
              .: {}
              f:kubectl.kubernetes.io/last-applied-configuration: {}
        manager: kubectl
        operation: Update
        time: "2020-09-03T17:29:25Z"
      name: cm2
      namespace: default
      resourceVersion: "29597"
      selfLink: /api/v1/namespaces/default/configmaps/cm2
      uid: 0097fb1d-25ac-4add-a702-8bdc939e9556

    使用

    [root@bjcy-200 secret]# cat cm-envpod.yaml 
    apiVersion: v1
    kind: Pod
    metadata:
      creationTimestamp: null
      labels:
        run: cm-pod
      name: cm-pod
    spec:
      containers:
      - image: harbor.tcc.com/public/nginx
        name: cm-pod
        env:
          - name: SECRET_USERNAME
            valueFrom:
              configMapKeyRef:
                name: mysecret1
                key: username
        resources: {}
      dnsPolicy: ClusterFirst
      restartPolicy: Always
    status: {}
    [root@bjcy-200 secret]# cat cm.yaml 
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: cm2
      namespace: default
    data:
      password: data1
    

      

  • 相关阅读:
    一个前端的博客
    win10安装redis
    RabbitMQ的基本使用
    SpringMVC 中 @ControllerAdvice 注解的三种使用场景
    在Spring cloud中使用Spring Cloud Alibaba Nacos Discovery报错
    MSBUILD : error MSB3428: 未能加载 Visual C++ 组件“VCBuild.exe”。
    asp.net自定义错误信息处理
    MVC返回值详解
    C#集合
    C#linq查询方法使用简介
  • 原文地址:https://www.cnblogs.com/yanshicheng/p/13611469.html
Copyright © 2011-2022 走看看