代码之家  ›  专栏  ›  技术社区  ›  learningtech

同一主机上的容器与扩展服务之间的通信是否加密

  •  0
  • learningtech  · 技术社区  · 3 年前

    我正在学习两种特定场景下docker容器之间的SSL和加密。在这两种情况下,Traefik容器都是外部世界和NodeJS API容器之间的反向代理。NodeJS API只是将一条记录写入mongo数据库容器。在这两种情况下,Traefik都将使用SSL加密自身和外部世界之间的任何通信。我认为Traefik和NodeJS API之间的通信将以明文形式发生,因为NodeJS API不会使用SSL证书。我认为NodeJS API和数据库之间的数据也将是纯文本的。

    这里有一个 docker-compose 我拥有的文件,我认为上面的陈述描述了这一点。

    version: '3'
    
    services:
      traefik:
        image: traefik:v2.5.4
        command:
          - "--providers.docker"
          - "--providers.docker.swarmMode=true"
          - "--providers.docker.exposedByDefault=false"
          - "--providers.file.directory=/etc/traefik/dynamic_conf"
          - "--providers.file.watch=true"
          - "--entrypoints.websecure.address=:3001"
        ports:
          - 80:80
          - 3001:3001
        volumes:
          - /var/run/docker.sock:/var/run/docker.sock:ro
          - ./templates/ssl/:/certs/:ro
          - ./traefik.config.yml:/etc/traefik/dynamic_conf/conf.yml:ro
        networks:
          - mynet
      api:
        image: johnlai2004/swarm:latest
        environment:
          - "DB=${STACK_NAME}_db"
        deploy:
          labels:
            - "traefik.enable=true"
            - "traefik.http.routers.${STACK_NAME}_api.entrypoints=websecure"
            - "traefik.http.routers.${STACK_NAME}_api.tls=true"
            - "traefik.http.routers.${STACK_NAME}_api.rule=Host(`${APP_HOST}`)"
            - "traefik.http.services.${STACK_NAME}_api.loadbalancer.server.port=3000"
        depends_on:
          - db
        networks:
          - mynet
    
      db:
        image: mongo:4.0.3
        networks:
          - mynet
    
    networks:
      mynet:
        external: true
    

    然后我用这些命令开始工作:

    docker swarm init;
    docker network create --driver overlay mynet;
    
    STACK_NAME=mystack1 APP_HOST=mystack1.example.com docker stack deploy -c docker-compose.yml mystack1;
    

    问题1:以上所有代码都在一台主机上运行。许多开发人员会担心Traefik和NodeJS API之间的未加密流量,以及NodeJS API和Mongo数据库之间的未加密流量吗?我假设这两种情况下的流量发生在虚拟docker网络中,除非攻击者已经可以访问主机,否则外部攻击者不容易访问该网络?这些假设合理吗?

    问题2:假设我在另一个城市创建了第二台主机。我负责 docker swarm join 这样第二台机器就变成了工作节点。然后我运行命令 docker service scale api=4 这又创建了四个api容器实例,其中一些将在第二台主机上运行。在这种情况下,攻击者能否轻松嗅探Traefik和API之间的通信量,以及API和数据库之间的通信量?攻击者会以明文形式看到流量吗?

    0 回复  |  直到 3 年前