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"

原因分析:不明;
解决方法:暂无。
 
                    
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号