• docker知识10---docker secret


    一、docker secret

      声明式配置中,若直接定义用户名及密码等环境变量时,会造成安全隐患;因此,引入secret,对保密数据(用户名及密码、ssh key、TLS认证信息、其他需保密数据)进行加密。

    在docker swarm架构中,manager节点(单数>3)内置raft分布式存储(可实现manager各节点数据同步),manager与worker之间通信是经过SSL/TLS加密的,而private key是通过加密后存储在manager的raft存储中。
      secret管理:
        1)存在swarm manager节点raft database里;
        2)secret可以assign给一个service,这个service内部就能看到这个secret;
        3)在container内部secret看起来像文件,但实际是在内存中;

    Usage:  docker secret COMMAND  #Manage Docker secrets
    Commands:
      create      #Create a secret from a file or STDIN as content
      inspect     #Display detailed information on one or more secrets
      ls          #List secrets
      rm          #Remove one or more secrets
    

      

    二、案例

    案例1:创建、管理、删除secret
    cat <<eof> password.txt admin123 eof docker secret create my-pass password.txt #根据文件创建secret,并存储在raft存储中; rm -f password.txt #删除密码文件或迁移至安全位置; docker secret ls #查看swarm集群的secret; docker secret inspect my-pass #查看secret详细信息; echo '123456' | docker secret create my-pass1 - #命令行直接创建secret; docker secret ls docker secret rm my-pass1 && docker secret ls #删除secret;

      

    案例2:secret导入到service内部
    docker service create --name client --secret my-pass busybox /bin/sh -c "while true;do sleep 3600;done"  #将secret暴露给client服务;
    docker service ps client #查看服务调度信息,发现client服务被调度到manager02;
    ##在manager02执行
    docker exec -it eec305e9810a sh 
    cd /run/secrets/
    cat my-pass         #查看服务中secret的密码为明文,于是在执行命令时,可调用该文件中的密码;
    

      

    案例3:service利用secret
    docker service create --name mysql -e MYSQL_ROOT_PASSWORD=root mysql                  #明文密码创建mysql服务不安全;
    cat <<eof> password.txt
    admin
    eof
    docker secret create db-pass password.txt 
    rm -f password.txt 
    docker service create --name mysql --secret db-pass -e MYSQL_ROOT_PASSWORD=/run/secrets/my-pass mysql #使用secret赋予环境变量,以确保数据安全;
    docker service ls
    docker service ps mysql #查看服务调度信息,发现client服务被调度到manager03;
    ##在manager03执行
    docker exec -it e53e4df1df7b ll /run/secrets/   #确认密码文件已传入服务内部;
    docker exec -it e53e4df1df7b sh
    mysql -uroot -padmin123           #进入容器内部,测试是否可用密码登录数据库;
    
    案例4:service利用secret(不建议在配置文件中创建secret)
    echo '123456' | docker secret create my-pw -
    cat <<eof> docker-compose-wordpress.yml
    version: '3.6'
    
    services:
    
      web:
        image: wordpress
        ports:
          - 8080:80
        secrets:
          - my-pw
        environment:
          WORDPRESS_DB_HOST: mysql
          WORDPRESS_DB_PASSWORD_FILE: /run/secrets/my-pw
        networks:
          - my-network
        depends_on:
          - mysql
        deploy:
          mode: replicated
          replicas: 3
          restart_policy:
            condition: on-failure
            delay: 5s
            max_attempts: 3
          update_config:
            parallelism: 1
            delay: 10s
    
      mysql:
        image: mysql
        secrets:
          - my-pw
        environment:
          MYSQL_ROOT_PASSWORD_FILE: /run/secrets/my-pw
          MYSQL_DATABASE: wordpress
        volumes:
          - mysql-data:/var/lib/mysql
        networks:
          - my-network
        deploy:
          mode: global
          placement:
            constraints:
              - node.role == manager
    
    volumes:
      mysql-data:
    
    networks:
      my-network:
        driver: overlay
    
    # secrets:   可在配置预先声明拆改那就secrets;
    #   my-pw:
    #    file: ./password 
    eof
    docker stack deploy wordpress -c=docker-compose-wordpress.yml
    

      

      

    三、故障排查

    问题1:使用secret启动service,但用secret密码不能登录该服务?

    [root@manager01 ~]# docker exec -it 1c65f523b23f sh
    # cd /run/secrets
    # cat db-pass
    admin
    #
    # mysql -uroot -padmin
    mysql: [Warning] Using a password on the command line interface can be insecure.
    ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

    原因分析:不明。

    解决方法:暂无。

    问题2:使用secret启动service失败?

    [root@manager01 ~]# docker stack deploy wordpress -c=docker-compose-wordpress.yml
    secrets Additional property secrets is not allowed

    原因分析:.docker-compose.yml文件的版本号<“3.1”.

    解决方法:修改ocker-compose.yml文件的版本号>“3.1”即可实现服务发布。

    问题3:先行手动创建了secret,但是发布服务时,提示secret未定义;使用secret启动service失败?

    [root@manager01 ~]# docker stack deploy wordpress -c=docker-compose-wordpress.yml
    Creating network wordpress_my-network
    service mysql: undefined secret "my-pw"

    原因分析:不明;

    解决方法:暂无。

  • 相关阅读:
    vue 组件开发 props 验证
    vue中$emit与$on
    vue中的 ref 和 $refs
    Animate.css动画特效
    Css Tada动画效果(Css Tada Animation Effect)--- shake抖动效果
    给某个dom对象添加动画fadeIn、fadeInDown、flipInY、jackInTheBox
    uniapp导航栏自定义按钮及点击事件
    uniapp的微信小程序,获取授权,获取中文街道地理位置
    在mac上如何用safari调试ios手机的移动端页面
    条件编译
  • 原文地址:https://www.cnblogs.com/chalon/p/15127955.html
Copyright © 2020-2023  润新知