Docker Swarm 创建加密覆盖网络

文章目录

  • Docker Swarm 创建加密覆盖网络
    • 1. 初始化 swarm
    • 2. 创建未加密的覆盖网络
    • 3. 监控网络
    • 4. 创建加密覆盖网络

1. 初始化 swarm

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

$ docker swarm init
Swarm initialized: current node (rcy8eo8ipksi2urvndo8i38te) is now a manager.To add a worker to this swarm, run the following command:docker swarm join --token SWMTKN-1-5e7sg3ldmijd0sjz20h3382up1d0hbo7nibk465i325yup9jgf-8zhcijlpb1ufbhnzu4drcy7g3 172.17.0.71:2377To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

在第二台主机上执行下面的命令,将它作为一个worker添加到集群中。

$ token=$(ssh -o StrictHostKeyChecking=no 172.17.0.71 "docker swarm join-token -q worker") && docker swarm join 172.17.0.71:2377 --token $token
Warning: Permanently added '172.17.0.71' (ECDSA) to the list of known hosts.
token=$(ssh -o StrictHostKeyChecking=no 172.17.0.71 "docker swarm join-token -q worker") && docker swarm join 172.17.0.71:2377 --token $token

2. 创建未加密的覆盖网络

下面的命令将创建一个未加密的覆盖网络,其中部署了两个服务

运行该命令。这将用于演示嗅探未加密网络上的流量。

docker network create -d overlay app1-network
docker service create --name redis --network app1-network redis:alpine
docker service create \--network app1-network -p 80:3000 \--replicas 1 --name app1-web \katacoda/redis-node-docker-example

3. 监控网络

部署好服务后,可以使用TCPDump查看不同主机之间的流量。这将在Docker主机上安装TCPDump,并开始收集通过覆盖网络发送的流量

请等待业务部署完成
第一台机器

docker service ls

一旦部署完成,就可以通过向web应用发送HTTP请求来产生流量。这反过来又会给Redis创建网络请求

curl host01

第二台机器执行

$ ssh  -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no root@host01
Warning: Permanently added 'host01,172.17.0.71' (ECDSA) to the list of known hosts.
yes | pacman -Sy tcpdump openssl
tcpdump -s 1500 -A -i ens3 port 4789
$ yes | pacman -Sy tcpdump openssl
The program 'pacman' is currently not installed. You can install it by typing:
apt install pacman
$ tcpdump -s 1500 -A -i ens3 port 4789
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens3, link-type EN10MB (Ethernet), capture size 1500 bytes
06:31:12.096732 IP 172.17.0.71.35083 > host02.4789: VXLAN, flags [I] (0x08), vni 4096
IP 10.0.0.2.39040 > 10.0.0.5.http: Flags [S], seq 1229698674, win 43690, options [mss 65495,sackOK,TS val 64177 ecr 0,nop,wscale 7], length 0
E..n....@.^F...G...J.....Z...........B
....B
.....E..<h1@.@...
...
......PIK.r...................
............
06:31:12.097375 IP host02.38034 > 172.17.0.71.4789: VXLAN, flags [I] (0x08), vni 4096
IP 10.0.0.5.http > 10.0.0.2.39040: Flags [S.], seq 354703990, ack 1229698675, win 27960, options [mss 1410,sackOK,TS val 62946 ecr 64177,nop,wscale 7], length 0
E..n....@.q....J...G.....Z...........B
....B
.....E..<..@.@.&.
...
....P...$ZvIK.s..m8.$.........
............
06:31:12.098458 IP 172.17.0.71.35083 > host02.4789: VXLAN, flags [I] (0x08), vni 4096
IP 10.0.0.2.39040 > 10.0.0.5.http: Flags [.], ack 1, win 342, options [nop,nop,TS val 64178 ecr 62946], length 0
E..f....@.^M...G...J.....R...........B
....B
.....E..4h2@.@...
...
......PIK.s.$Zw...Vh......
........
06:31:12.098656 IP 172.17.0.71.35083 > host02.4789: VXLAN, flags [I] (0x08), vni 4096
IP 10.0.0.2.39040 > 10.0.0.5.http: Flags [P.], seq 1:71, ack 1, win 342, options [nop,nop,TS val 64178 ecr 62946], length 70: HTTP: GET / HTTP/1.1
E.......@.^....G...J.................B
....B
.....E..zh3@.@..D
...
......PIK.s.$Zw...VD7.....
........GET / HTTP/1.1
Host: host01
User-Agent: curl/7.47.0
Accept: */*06:31:12.098912 IP host02.38034 > 172.17.0.71.4789: VXLAN, flags [I] (0x08), vni 4096
IP 10.0.0.5.http > 10.0.0.2.39040: Flags [.], ack 71, win 219, options [nop,nop,TS val 62947 ecr 64178], length 0
E..f....@.q....J...G.....R...........B
....B
.....E..4Jb@.@..[
...
....P...$ZwIK......h......
........

当查看TCPDump流时,可以识别底层的Redis API调用来设置和获取数据。例如

RESP "hgetall" "ip"RESP "::ffff:10.255.0.3" "8"

如果这是敏感信息,那么如果攻击者能够拦截网络流量,就可能会带来潜在的安全风险。
使用此命令删除服务和网络。下一步,我们将使用一个安全网络重新部署它们。

docker service rm redis app1-web && docker network rm app1-network

4. 创建加密覆盖网络

附加--opt encrypted选项使数据包在通过覆盖网络发送之前被加密,加密选项是在创建网络时定义的。

docker network create -d overlay --opt encrypted app1-network

加密对应用程序是透明的,允许它们以标准方式使用网络

使用下面的命令部署Redis服务和Web UI

docker service create --name redis --network app1-network redis:alpine
docker service create \--network app1-network -p 80:3000 \--replicas 1 --name app1-web \katacoda/redis-node-docker-example

现在,当流量生成时,你将无法拦截和监控进出Redis的流量,因为它现在是加密的。

$ curl host01
This page was generated after talking to redis.Application Build: 1Total requests: 1IP count: ::ffff:10.0.0.2: 1
$ curl host01
This page was generated after talking to redis.Application Build: 1Total requests: 2

然而,您仍然会看到返回给客户端的HTTP web响应。这是因为应用程序不使用HTTPS在客户端和服务器之间进行通信。添加HTTPS将为应用程序创建一个完整的端到端加密解决方案。

参考:

  • Use overlay networks
  • Docker Networking Security Basics
  • Docker swarm: overlay network encryption and MTLS

Docker Swarm 创建加密覆盖网络相关推荐

  1. Docker Swarm 创建服务

    Docker Swarm 创建服务 环境: 系统:Centos 7.4 x64 应用版本:Docker 18.09.0 管理节点:192.168.1.79 工作节点:192.168.1.78 工作节点 ...

  2. Docker Swarm(创建Swarm集群)

    Docker Swarm Docker Swarm 优点 任何规模都有高性能表现 灵活的容器调度 服务的持续可用性 和 Docker API 及整合支持的兼容性 Docker Swarm 为 Dock ...

  3. Docker Swarm(创建swarm集群,节点的升级降级,滚动更新,Portainer)

    Docker swarm 1.创建 Swarm 集群 2.部署swam监控 3.节点的降级升级 4.删除节点 5. 私有仓库的结合 6.滚动更新 滚动更新镜像版本 删除服务 7. 编写compose文 ...

  4. docker swarm 创建服务并挂载数据卷

    # src 宿主机路径 # dst 容器里的路径 docker service create --name test_nginx -p 8000 --mount type=bind,src=/etc/ ...

  5. docker swarm实践爆心肝总结全在这里,火速收藏!!!

    Docker Swarm 快速入门 "这是一个非常棒的docker swarm学习历程.我把一个国外的docker精简实践教学进行了简略的翻译,比起国内博客学习的总结性文章,它更注重让小白在 ...

  6. [docker]十、docker swarm是什么?以及创建docker swarm

    目录 1.什么是Docker Swarm 2.Docker Swarm 基本结构图 3.swarm的几个关键概念 4.Dcoker Swarm 集群部署 4.1.准备工作 4.2.创建Swarm并添加 ...

  7. Docker overlay 覆盖网络实现

    官方教程 https://docs.docker.com/network/network-tutorial-overlay/ 覆盖网络(overlay network) overlay的用处.over ...

  8. 三剑客之Docker Swarm

    目录 一.什么是Docker Swarm 二.Docker Swarm 基本结构图 三.Swarm的几个关键概念 四.Swarm的工作模式 五.Swarm的调度策略 六.Swarm Cluster模式 ...

  9. Docker Swarm简单教程

    文章目录 一.什么是Docker Swarm 1.1.Docker Swarm 基本结构图 1.2.Swarm的几个关键概念 1.2.1.Swarm 1.2.2.Node 1.2.3.Service ...

最新文章

  1. 调试coffee script 的一个技巧
  2. Java中的static关键字解析 转载
  3. C# 中DataTable转成模型List
  4. 深度学习核心技术精讲100篇(三十六)-EdgeRec:边缘计算在淘宝推荐系统中的大规模应用
  5. A. Powered Addition【贪心】
  6. 8086汇编寄存器及指令汇总
  7. IIS OCIEnvCreate failed with return code -1
  8. AngularJS+Satellizer+Node.js+MongoDB-Instagram-01
  9. 天之痕java 郡王府_轩辕剑3外传天之痕图文攻略【含支线任务】
  10. 阿里云服务器使用https访问项目
  11. android连接程序,从Android应用程序连接到本地后端
  12. 木讷的程序员需要知道的事情 (五)
  13. 第三章 坐标系与投影转换之基准面和坐标系的分类基本知识
  14. 24. 两两交换链表中的节点
  15. salesforce 和 salesforce platform 的License的区别
  16. GameObject.Find()能否查找隐藏属性的游戏对象?
  17. Android之低功耗蓝牙的基本使用
  18. 计算机教育格言,苏霍姆林斯基教育名言大全
  19. mysql java 解决幻读_MySQL 是如何解决幻读的
  20. 有限元仿真分析误差来源之边界条件设置-动载荷

热门文章

  1. 设计模式随笔系列:鸭子-策略模式(Strategy)[原]
  2. Linux入门系列视频教程(共45集)
  3. 100多个经典常用的网站模板大全实例演示和下载
  4. 周志华、贾扬清入选!2022中国高被引学者榜单揭晓,计算机界214人上榜
  5. 卡诺图与逻辑代数化简法
  6. 【CSP-J/S】复赛注意事项
  7. 借力《旅行青蛙》,阿里手游便可叫板腾讯、网易?
  8. ES 如何实现向量搜索【以图搜图/语义搜索】
  9. 黑客挂马紧盯娃娃 儿童节育儿教育网站被挂马
  10. vue-cli树形结构/组织结构