UDP 模式中,Node 1 上 container-1(IP:100.96.1.2)发送到 Node 2 上 container-2(IP:100.96.2.3)的 IP 包经过 docker0、flannel0 100.96.1.2VXLAN VTEP 设备(命名为 flannel.1)IP:10.1.15.1Node 2:Flannel 分配子网:100.96.2.0/24docker0 网桥 IP:100.96.2.1容器 container 3.1 原始数据包生成与流向入口数据包产生: container-1(IP:100.96.1.2)向 container-2(IP:100.96.2.3)发起通信,生成原始 IP 包。 形成外部数据帧 最终,内核输出的外部数据帧包含两个层次的信息:Inner Ethernet Frame:内嵌原始数据包及其 Ethernet 头(目标为 container-2 的 IP 100.96.2.3 数据转发到容器: 内部数据帧中的原始 IP 包(目标 IP:100.96.2.3)由 Node 2 的内核根据路由策略转发至 docker0 网桥,最终进入 container-2 的 Network
image: nginx volumeMounts: - name: shared-data mountPath: /usr/share/nginx/html - name: container volumeMounts: - name: shared-data mountPath: /data command: ["/bin/sh", "-c", "echo 'Hello from container image: nginx volumeMounts: - name: shared-data mountPath: /usr/share/nginx/html - name: container volumeMounts: - name: shared-data mountPath: /data command: ["/bin/sh", "-c", "echo 'Hello from container
container-1到docker0当container-1访问container-2时,container-1的进程发起请求,container-1的源IP地址为172.18.57.2,目的地址为container 稍后会介绍)flannel.1处理流程介绍完VxLAN的基本原理和概念,我们来继续分析一下container-1访问container-2的整个流程。 前面我们介绍,container-1访问container-2的路由,经过docker0网桥,来到了VTEP设备 flannel.1,也就是VxLAN隧道的入口。 flannel会进一步拆包,对报文进行处理,这时就回到了单机容器网络通信的流程,最终达到container-2的network namespace。 重新简述一遍container-1访问container-2的流程:container-1发起访问container-2的请求,网络流量进入docker0网桥。(从内核态向用户态的转变)。
command: ["/bin/sh", "-c", "echo 'Hello from container-1' > /usr/share/nginx/html/index.html"] - name: container /data/index.html"] volumes: - name: shared-data emptyDir: {}在上面的示例中,我们在 container-1 中写入了数据,然后在 container
5a06-11ea-8ebf-ba810801ac07)"Feb 28 04:50:27 dockermaster kubelet: , failed to "StartContainer" for "container -2" with CrashLoopBackOff: "Back-off 5m0s restarting failed container=container-2 pod=test-pod_default
IP:100.96.1.1/24某容器 container-1 IP:100.96.1.2Node 2:分配子网:100.96.2.0/24docker0 网桥 IP:100.96.2.1/24某容器 container -2 IP:100.96.2.3当 container-1(IP:100.96.1.2)向 container-2(IP:100.96.2.3)发送数据包时,数据包的源 IP 为 100.96.1.2, 进入 flanneld 用户态处理:flannel0 将数据包传递给 flanneld 进程,flanneld 根据目标 IP 查询 Etcd 获取 container-2 所在宿主机的公网 IP(例如 最终数据传递:Node 2 内核根据其路由规则,将 IP 包转发到 docker0 网桥,最终传递至 container-2,实现跨主机通信。
从上图右半部分的开发者工具栏中,我们可以清晰的看到这种摆放形态所对应的HTML代码:名为container-1的
container-1">
I am Gopal
} }] }); var chart2 = Highcharts.chart('container container-1" style="position: absolute;width: 300px; height: 300px; float: left">
我们现在的任务,就是让 container-1 访问 container-2。 Node 2 的子网是 100.96.2.0/24,container-2 的 IP 地址是 100.96.2.3。 不难理解,这个 UDP 包的源地址,就是 flanneld 所在的 Node 1 的地址,而目的地址,则是 container-2 所在的宿主机 Node 2 的地址。 现在,我们的 container-1 的 IP 地址是 10.1.15.2,要访问的 container-2 的 IP 地址是 10.1.16.3。 最终,IP 包就进入到了 container-2 容器的 Network Namespace 里。** 以上,就是 Flannel VXLAN 模式的具体工作原理了。
com.forezp.SpringbootRedisApplication : Sending message… 2017-04-20 17:25:15.544 INFO 39148 — [ container
o.s.web.servlet.DispatcherServlet : Completed initialization in 13 ms 2021-06-24 15:06:18.540 INFO 28520 --- [ container
o.s.web.servlet.DispatcherServlet : Completed initialization in 13 ms 2021-06-24 15:06:18.540 INFO 28520 --- [ container
运行两个容器并将它们连接到桥接网络 docker run -d --name container-1 --network my-bridge-network nginx docker run -d --name container -2 --network my-bridge-network nginx 现在 container-1 和 container-2 可以通过它们的容器名称或 IP 地址相互访问。
do sleep 3600; done"] volumeMounts: - mountPath: /cache name: cache-volume - name: container
c.e.m.MessagingRedisApplication : Sending message... 2019-09-23 12:57:12.861 INFO 35396 --- [ container
; } } 3.3 测试结果 不启动项目,直接test,testRedisPub()方法测试结果: 2018-09-05 10:55:03.557 INFO 15196 --- [ container 2018-09-05 14:40:40.854 INFO 12656 --- [ container-2] com.just.springbootnosql.Receiver :
而 Node 2 的内核网络栈从二层数据帧里拿到 IP 包后,会“看到”这个 IP 包的目的 IP 地址是container-2 的 IP 地址。 这时候,根据 Node 2 上的路由表,该目的地址会匹配到第二条路由规则,从而进入 cni0 网桥,进而进入到 container-2 当中。
而 Node 2 的内核网络栈从二层数据帧里拿到 IP 包后,会“看到”这个 IP 包的目的 IP 地址是 10.244.0.20,即 container-2 的 IP 地址。 这时候,根据 Node 2 上的路由表,该目的地址会匹配到第二条路由规则(也就是 10.244.0.0 对应的路由规则),从而进入 cni0 网桥,进而进入到 container-2 当中。
ip":"10.13.28.13","linkDate":1567314280442,"port":7398}] 2019-09-01 13:05:25.545 INFO 8952 --- [ container