• Docker swarm 管理 secrets


    Docker swarm 管理 secrets


    1. 初始化 swarm

    默认情况下,Docker作为一个隔离的单节点工作。所有容器仅部署在引擎上。群模式将它变成了一个多主机集群感知引擎。为了使用秘密功能,Docker必须处于“群模式”。这是通过

    $ docker swarm init
    Swarm initialized: current node (o6ngy0xskvvhxaaiyfye21znh) is now a manager.
    
    To add a worker to this swarm, run the following command:
    
        docker swarm join --token SWMTKN-1-4oa8jjlavmoihusp73vgu71mhjek6ut1qkapzqnhtxdq5xzv0t-04anuyasgyv0p4xiqn4ga16fe 172.17.0.9:2377
    
    To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2. 创建 secrets

    下面的命令将首先创建一个随机的64个字符的令牌,该令牌将存储在一个文件中以供测试之用。令牌文件用于创建名为deep_thought_answer_secure的秘密文件

    $ < /dev/urandom tr -dc A-Za-z0-9 | head -c64 > tokenfile
    $ docker secret create deep_thought_answer_secure tokenfile
    5yk3llezwli4atuua81dw6hg5
    
    • 1
    • 2
    • 3

    例如,还可以使用stdin创建秘密

    $ echo "the_answer_is_42" | docker secret create lesssecure -
    sxzk4itvh9dwvcenfz037uwab
    
    • 1
    • 2

    注意,这种方法将在用户bash历史文件中保留the_answer_is_42的值。
    所有的秘密名称都可以使用

    $ docker secret ls
    ID                          NAME                         DRIVER              CREATED              UPDATED
    5yk3llezwli4atuua81dw6hg5   deep_thought_answer_secure                       About a minute ago   About a minute ago
    sxzk4itvh9dwvcenfz037uwab   lesssecure                                       53 seconds ago       53 seconds ago
    
    • 1
    • 2
    • 3
    • 4

    这将不会暴露底层的secrets的values,这个秘密可以在通过Swarm部署服务时使用。例如,deploy让Redis服务可以访问这个秘密。

    $ docker service create --name="redis" --secret="deep_thought_answer_secure" redis
    llfxs9rk9e88n7jh99q971uwb
    overall progress: 1 out of 1 tasks 
    1/1: running   [==================================================>] 
    verify: Service converged 
    
    • 1
    • 2
    • 3
    • 4
    • 5

    secret作为一个文件出现在secrets目录中。

    $ docker exec $(docker ps --filter name=redis -q) ls -l /run/secrets
    ls: cannot access '/run/secrets': Operation not permitted
    
    • 1
    • 2

    这可以作为一个普通文件从磁盘读取。

    $ docker exec $(docker ps --filter name=redis -q) cat /run/secrets/deep_thought_answer_secure
    SbrptUbQhcF7oWdfhmlSn70XCDvCNH2REuYSRv55tgUPEjPjKvB1zeLDTZTTcAxf$ 
    
    • 1
    • 2

    3. 用Compose创建Docker stack

    使用Docker Compose Stacks也可以使用secrets功能。在下面的例子中,观众服务可以访问我们的Swarm Secret _deep_thoughtanswer。它被安装并被称为deep_thoughtanswer

    version: '3.1'
    services:
        viewer:
            image: 'alpine'
            command: 'cat /run/secrets/deep_thought_answer_secure'
            secrets:
                - deep_thought_answer_secure
    
    secrets:
        deep_thought_answer_secure:
            external: true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    4. 部署访问 secrets

    Docker Compose Stack的部署使用Docker CLI。作为部署的一部分,堆栈将配置为对秘密的访问。使用以下命令部署任务:

    docker stack deploy -c docker-compose.yml secrets1
    docker logs $(docker ps -aqn1 -f status=exited)
    
    • 1
    • 2

    如果命令错误与“docker日志”需要精确的1个参数。这意味着容器还没有启动并返回秘密。

    5. File Based Secret

    另一种创建秘密的方法是通过文件。既然如此,我们有个秘密。需要从容器中访问的CRT文件。

    echo "my-super-secure-cert" > secret.crt
    
    • 1

    更新docker-compose Stack以使用基于机密的文件

    version: '3.1'
    services:
        test:
            image: 'alpine'
            command: 'cat /run/secrets/secretcert'
            secrets:
                - secretcert
    
    secrets:
        secretcert:
            file: ./secret.crt
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    6. 使用Compose部署和访问secrets

    和前面一样,部署Docker Compose stack

    docker stack deploy -c docker-compose.yml secrets2
    
    • 1

    下面的命令将获取为新创建的服务退出的最后一个容器的日志文件

    docker logs $(docker ps -aqn1 -f name=secrets2 -f status=exited)
    
    • 1

    参考:

  • 相关阅读:
    Jenkins 忘记登录密码解决办法
    微头条项目实战:通过postman测试登录验证请求
    JOSEF 同步检查继电器 JT-1 额定电压100V 柜内固定安装,板前接线
    如何使用Tensorflow的VGG16预置模型
    SpringCloud 之初识 GateWay
    css flex:1;详解,配合demo效果解答
    TypeScript vs JavaScript
    uniapp 登录功能实现
    Flink 窗口
    vulnhub靶场之DEATHNOTE: 1
  • 原文地址:https://blog.csdn.net/xixihahalelehehe/article/details/125599232