侧边栏壁纸
博主昵称
yuc

  • 累计撰写 291 篇文章
  • 累计收到 0 条评论

docker网络

yuc
yuc
2024-04-26 / 最后修改: 2024-11-29 03:39 / 0 评论 / 2 阅读 / 正在检测是否收录...
docker集群网络理解

根据容器运行中显示的网卡,使用 docker network ls 查看了对应的docker网络:

10.255/16    ingress                      overlay   swarn
172.21/16    mynets                      overlay   swarn
172.18/16    docker_gwbridge       bridge     local

其中1、3是默认的,2是手动创建的,当然类型也是有所不同,1、2是overlay,3是bridge

这里来讲解下他们的异同、用处:

  1. 首先是1、2 它们的类型都是一样的,就只有默认、自定义的区别,那究竟有什么分别呢?
  • 默认的 ingress 承担了堆外暴露和负载均衡功能,我们 publish 后即可通过宿主机 ip 端口访问此服务并且负载均衡,而自定义 overlay 是不提供堆外暴露的,及时 publish 也无法通过宿主机 ip 端口访问,需要再增加一个 nginx + ingress 来提供堆外服务
  • 自定义的 overlay 主要是承担服务之间的通信,当然 ingress 网络类型一样,也是有此功能的,但不侧重,再就是 自定义的可以提供更加细粒度的控制,比如不同服务之间分配不同的 overlay 来隔离
  1. docker_gwbridge 主要提供了在不同宿主机上容器与容器、同一宿主机上容器与宿主机、容器与外部的访问,也就是除了同一宿主机下容器互访之外的其他网络需求,同一宿主机容器之间可以通过 overlay 直接互访
网络走向

请求是如何通过任意节点最终到达目的服务器的呢? 包括 docker 自带的负载均衡如何转发?大概是如下流程:

  1. 请求先到宿主机nat表,DNAT请求到本地172.18.0.2网络
  2. 通过本地路由到地址为172.18.0.1的网络docker_gwbridge,每个宿主机本地都有一个172.18.0.1地址
  3. docker_gwbridge网关找到172.18.0.2为ingress-sbox
  4. ingress-sbox接受请求后在mangle表的PREROUTING链打标记
  5. mangle表的INPUT链根据标记转发到服务(service)的虚拟ip地址(实际上所有服务的虚拟ip地址都在ingress-sbox上配置)
  6. 请求准备发送到此虚拟ip,当到达nat表POSTROUTING链的时候被拦截,执行源地址转换,规则是所有目的地址是集群网段都转发到本机的ipvs虚拟地址
  7. ingress-sbox的ipvs根据mangle的标记,再把请求发送到集群内指定服务容器的ip

参考文档

https://blog.csdn.net/weixin_36171533/article/details/81842036
https://www.jianshu.com/p/c83a9173459f
https://www.cnblogs.com/www1707/p/10872748.html

libnetwork 是 docker 容器网络库,最核心的内容是其定义的 Container Network Model (CNM),这个模型对容器网络进行了抽象,由以下三类组件组成:

Sandbox:Sandbox 是容器的网络栈,包含容器的 interface、路由表和 DNS 设置。 Linux Network Namespace 是 Sandbox 的标准实现。Sandbox 可以包含来自不同 Network 的 Endpoint
Endpoint:Endpoint 的作用是将 Sandbox 接入 Network。Endpoint 的典型实现是 veth pair,后面我们会举例。一个 Endpoint 只能属于一个网络,也只能属于一个 Sandbox
Network:Network 包含一组 Endpoint,同一 Network 的 Endpoint 可以直接通信。Network 的实现可以是 Linux Bridge、VLAN 等
0

评论

博主关闭了当前页面的评论