Docker容器的网络模型

k8s实践(4)--k8s集群网络详解和flannel 一、Docker网络模式 在讨论Kubernetes网络之前,让我们先来看一下Docker网络。Docker采用插件化的网络模式,默认提供bridge、host、none、overlay、maclan和Network plugins这几种网络模式,运行容器时可以通过–network参数设置具体使用那一种模式。 bridge:这是Docker默认的网络驱动,此模式会为每一... 阅读详情

一、Docker默认自动创建的网络

当安装完Docker时,Docker默认自动创建了三个网络:bridege, none和host:

[root@k8s-node1 ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
2a0cc0d0e1ee        bridge              bridge              local
7e135216136d        host                host                local
72f0eaf254a8        none                null                local

docker run命令–net有5个可选参数(kubernetes主要使用了bridge和container两种模式):

二、Docker容器的网桥模式

默认情况下就是bridge模式

[root@k8s-master ~]# docker inspect python-3.5.2 |jq '.[] | .HostConfig.NetworkMode'
"default"

[root@k8s-master ~]# docker network inspect bridge |jq '.[] | .Containers'
{
    "d2679307a4298d49653b9981f3a5a315d5b505827f49262b54efad39a40bfe19": {
        "Name": "python-3.5.2",
        "EndpointID": "99b0ae766b3b7e0e12557bb0f1433223cf7a62f0cc807fdccf4bc36976ad5b26",
        "MacAddress": "02:42:0a:14:3b:03",
        "IPv4Address": "10.20.59.3/24",
        "IPv6Address": ""
    }
}

[root@k8s-master ~]# ifconfig docker0
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.20.59.1  netmask 255.255.255.0  broadcast 0.0.0.0
        inet6 fe80::42:f8ff:fe1a:34dd  prefixlen 64  scopeid 0x20<link>
        ether 02:42:f8:1a:34:dd  txqueuelen 0  (Ethernet)
        RX packets 1433  bytes 103881 (101.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1742  bytes 2924861 (2.7 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

bridge模式就是:新建一个veth设备对(veth的技术特性保证了无论哪个veth设备接收到数据报文,都会立即将报文传到另一端的veth设备),一端连在docker0网桥上,一端连在docker容器里的网络命名空间中:

[root@k8s-master ~]# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 52:54:00:5c:2a:8d brd ff:ff:ff:ff:ff:ff
3: flannel0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1472 qdisc pfifo_fast state UNKNOWN mode DEFAULT qlen 500
    link/none
4: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT
    link/ether 02:42:f8:1a:34:dd brd ff:ff:ff:ff:ff:ff
8: veth6719931@if7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP mode DEFAULT
    link/ether c6:b5:c1:b2:81:65 brd ff:ff:ff:ff:ff:ff link-netnsid 1

[root@k8s-master ~]# brctl show docker0
bridge name     bridge id               STP enabled     interfaces
docker0         8000.0242f81a34dd       no              veth6719931

[root@k8s-master ~]# ip netns list-id
nsid 0
nsid 1

可以看到宿主机上多出1个veth设备:veth6719931,它属于docker0网桥,它的设备序列号为8;它的另一端在id为1的网络命名空间中,且对方的设备序列号为7。

现在只有一个使用bridge模式的容器python-3.5.2,在容器python-3.5.2中查看veth设备:

[root@k8s-master ~]# docker exec -it python-3.5.2 ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
7: eth0@if8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default
    link/ether 02:42:0a:14:3b:03 brd ff:ff:ff:ff:ff:ff

[root@k8s-master ~]# docker exec -it python-3.5.2 ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
7: eth0@if8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:0a:14:3b:03 brd ff:ff:ff:ff:ff:ff
    inet 10.20.59.3/24 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:aff:fe14:3b03/64 scope link
       valid_lft forever preferred_lft forever

docker将容器中的veth设备重命名为eth0,看起来像一个网卡,实际上只是一个veth设备!容器python-3.5.2中,果然有一个设备序列号为7的veth设备,分配的ip为10.20.59.3/24(Linux网桥与工作在二层的物理网桥最大的不同就是Linux网桥可以分配ip);对端是序列号为8的veth设备。

查看一下宿主机的路由表:

[root@k8s-master ~]# ip route list
default via 192.168.128.1 dev eth0
10.20.0.0/16 dev flannel0  proto kernel  scope link  src 10.20.100.0
10.20.59.0/24 dev docker0  proto kernel  scope link  src 10.20.59.1
169.254.0.0/16 dev eth0  scope link  metric 1002
192.168.128.0/20 dev eth0  proto kernel  scope link  src 192.168.138.224

[root@k8s-master ~]# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.128.1   0.0.0.0         UG        0 0          0 eth0
10.20.0.0       0.0.0.0         255.255.0.0     U         0 0          0 flannel0
10.20.59.0      0.0.0.0         255.255.255.0   U         0 0          0 docker0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0
192.168.128.0   0.0.0.0         255.255.240.0   U         0 0          0 eth0

[root@k8s-master ~]# docker exec -it python-3.5.2 ip route list
default via 10.20.59.1 dev eth0
10.20.59.0/24 dev eth0  proto kernel  scope link  src 10.20.59.3

可以看到,目的地址在10.20.59.0/24的数据包会直接转发到docker0网桥上,如果是10.20.59.3/24,就会转发给容器中的veth设备eth0,就可以实现外界到容器的通信了。

同样的,在容器内的路由表里,发给外界的数据包,直接通过eth0(src为10.20.59.3)转发给自己的默认网关docker0(10.20.59.1)。

查看宿主机的iptables规则

NAT(地址转换,主要进行来源与目的地址IP的转换,与Linux本机无关,主要是与Linux主机后面的局域网有关)表:

-A POSTROUTING -s 10.20.59.0/24 ! -o docker0 -j MASQUERADE

这条规则会将源地址为10.20.59.0/24的包(也就是从Docker容器产生的包),并且不是发送给docker0网桥的,则进行动态地址修改(MASQUERADE),将数据包的源地址从容器的IP地址转换成主机网卡的IP地址。

宿主机有一块网卡为eth0,IP地址为192.168.138.224/20,网关为192.168.128.1/20。从主机上一个IP为10.20.59.3/24的容器中ping百度(180.76.3.151),IP包首先从容器发往自己的默认网关docker0(10.20.59.1),包到达docker0后,也就到达了宿主机上。然后会查询主机的路由表,发现包应该从宿主机的eth0发往主机的网关192.168.128.1/20。接着包会转发给eth0,并从eth0发出去(主机的ip_forward转发应该已经打开)。这时候,上面的Iptable规则就会起作用,对包做SNAT转换,将源地址换为eth0的地址(192.168.138.224/20)。这样,在外界看来,这个包就是从192.168.138.224/20上发出来的,Docker容器对外是不可见的。

FILTER(过滤器,主要和进入本机的数据包有关)表有这样的规则:

-A FORWARD -i docker0 ! -o docker0 -j ACCEPT

-A FORWARD -i docker0 -o docker0 -j ACCEPT

-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

1、docker0网桥发出的数据包,如果FORWARD到非docker0网桥的本机IP地址设备,是允许的;

2、docker0发出的数据包还可以直接转给docker0本身,即,允许连接在docker0网桥上的docker容器相互访问;

3、在宿主机上发往docker0网桥的数据包,如果该数据包所处的连接已经建立,则无条件接受,并由Linux内核将其转至原来的连接上,回到docker容器内部。

如果docker容器使用了端口映射:

[root@k8s-master ~]# docker run -dit --restart always --name mysql-5.7.16 -e MYSQL_ROOT_PASSWORD=R0otMe -p 13306:3306 mysql:5.7.16
4d9110e05ed1b8755cf1ecc3f3cca0380b6aed2c43f95656b42ecdc7e7db2a2f

新建一个容器mysql-5.7.16,将宿主机的端口13306映射到容器中的3306端口。

iptables中的NAT表多了两条子链是给端口转发用的:

-A POSTROUTING -s 10.20.59.2/32 -d 10.20.59.2/32 -p tcp -m tcp --dport 3306 -j MASQUERADE

-A DOCKER ! -i docker0 -p tcp -m tcp --dport 13306 -j DNAT --to-destination 10.20.59.2:3306

第一条:源地址为10.20.59.2/32,目的地址为10.20.59.2/32,协议为TCP,端口为3306的数据包,进行动态地址修改(MASQUERADE);

第二条:将不是从docker0网桥发出的,协议为TCP,目标端口为13306的数据包转发到10.20.59.2:3306,使用的是DNAT(DNAT修改的是Destination的地址)。

FILTER表多了一条规则:

-A DOCKER -d 10.20.59.2/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 3306 -j ACCEPT

目的地址为10.20.59.2/32,不是从docker0网桥发出的,或者发给docker0网桥的,目的端口为3306的TCP数据包也是接受的。

二、Docker容器的container模式

Docker Container的other container网络模式是Docker中一种较为特别的网络的模式。之所以称为“other container模式”,是因为这个模式下的Docker Container,会使用其他容器的网络环境。之所以称为“特别”,是因为这个模式下容器的网络隔离性会处于bridge桥接模式与host模式之间。Docker Container共享其他容器的网络环境,则至少这两个容器之间不存在网络隔离,而这两个容器又与宿主机以及除此之外其他的容器存在网络隔离。

创建两个容器,第一个使用bridge模式,第二个使用container模式:

[root@k8s-master ~]# docker run -dit --name netinfra-container --net bridge --restart always -p 23306:3306 debian:jessie
33372053c4c2d70eee5f02784c0d73537e8374cf4fc15c73523d9d8901fd7204

[root@k8s-master ~]# docker run -dit --name mysql-share-ns --net container:netinfra-container --restart always -e MYSQL_ROOT_PASSWORD=R0otMe mysql:5.7.16
9d54fc2883a32e266cb298297964312407014b9ee58e8c2a8b5504aa1af37b1b

[root@k8s-master ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                     NAMES
9d54fc2883a3        mysql:5.7.16        "docker-entrypoint.sh"   4 seconds ago       Up 3 seconds                                  mysql-share-ns
33372053c4c2        debian:jessie       "/bin/bash"              19 seconds ago      Up 18 seconds       0.0.0.0:23306->3306/tcp   netinfra-container
4d9110e05ed1        mysql:5.7.16        "docker-entrypoint.sh"   About an hour ago   Up About an hour    0.0.0.0:13306->3306/tcp   mysql-5.7.16
d2679307a429        python:3.5.2        "python3"                5 hours ago         Up 5 hours                                    python-3.5.2

查看使用网桥模式的docker容器:

[root@k8s-master ~]# docker network inspect bridge |jq '.[] | .Containers'
{
    "33372053c4c2d70eee5f02784c0d73537e8374cf4fc15c73523d9d8901fd7204": {
        "Name": "netinfra-container",
        "EndpointID": "32ece9b94a6fd6f2fde19839292581551aed26560c81e10d08c664ba20f252cf",
        "MacAddress": "02:42:0a:14:3b:04",
        "IPv4Address": "10.20.59.4/24",
        "IPv6Address": ""
    },
    "4d9110e05ed1b8755cf1ecc3f3cca0380b6aed2c43f95656b42ecdc7e7db2a2f": {
        "Name": "mysql-5.7.16",
        "EndpointID": "244eb7413d06bafbed06f8611640667bef321e9a4cafed171defd69e9cdd71e0",
        "MacAddress": "02:42:0a:14:3b:02",
        "IPv4Address": "10.20.59.2/24",
        "IPv6Address": ""
    },
    "d2679307a4298d49653b9981f3a5a315d5b505827f49262b54efad39a40bfe19": {
        "Name": "python-3.5.2",
        "EndpointID": "99b0ae766b3b7e0e12557bb0f1433223cf7a62f0cc807fdccf4bc36976ad5b26",
        "MacAddress": "02:42:0a:14:3b:03",
        "IPv4Address": "10.20.59.3/24",
        "IPv6Address": ""
    }
}

容器netinfra-container的ip为10.20.59.2/24,使用的是bridge模式,查看容器netinfra-container和mysql-share-ns的网络模式:

[root@k8s-master ~]# docker inspect netinfra-container mysql-share-ns |jq '.[] | {ContainerID: .Id, ContainerName: .Name, NetworkMode: .HostConfig.NetworkMode}'
{
    "ContainerID": "33372053c4c2d70eee5f02784c0d73537e8374cf4fc15c73523d9d8901fd7204",
    "ContainerName": "/netinfra-container",
    "NetworkMode": "bridge"
}
{
    "ContainerID": "9d54fc2883a32e266cb298297964312407014b9ee58e8c2a8b5504aa1af37b1b",
    "ContainerName": "/mysql-share-ns",
    "NetworkMode": "container:netinfra-container"
}

注意输出,容器netinfra-container使用的是bridge网络模式,容器mysql-share-ns使用的是container:netinfra-container网络模式。

[root@k8s-master ~]# docker inspect netinfra-container mysql-share-ns |jq '.[] | {ContainerName: .Name, NetworkMode: .HostConfig.NetworkMode, NetworkSettings: .NetworkSettings}'

{
    "ContainerName": "/netinfra-container",
    "NetworkMode": "bridge",
    "NetworkSettings": {
        "Bridge": "",
        "SandboxID": "2623339d087303632e15bad76b862ce96cc98199c54b8d8722161caf28c506c3",
        "HairpinMode": false,
        "LinkLocalIPv6Address": "",
        "LinkLocalIPv6PrefixLen": 0,
        "Ports": {
            "3306/tcp": [
                {
                    "HostIp": "0.0.0.0",
                    "HostPort": "23306"
                }
            ]
        },
        "SandboxKey": "/var/run/docker/netns/2623339d0873",
        "SecondaryIPAddresses": null,
        "SecondaryIPv6Addresses": null,
        "EndpointID": "32ece9b94a6fd6f2fde19839292581551aed26560c81e10d08c664ba20f252cf",
        "Gateway": "10.20.59.1",
        "GlobalIPv6Address": "",
        "GlobalIPv6PrefixLen": 0,
        "IPAddress": "10.20.59.4",
        "IPPrefixLen": 24,
        "IPv6Gateway": "",
        "MacAddress": "02:42:0a:14:3b:04",
        "Networks": {
            "bridge": {
                "IPAMConfig": null,
                "Links": null,
                "Aliases": null,
                "NetworkID": "d052a2494c7e0aa6b4dd69bc9da5258011aca5331fb1462fd734732aa7bb91ba",
                "EndpointID": "32ece9b94a6fd6f2fde19839292581551aed26560c81e10d08c664ba20f252cf",
                "Gateway": "10.20.59.1",
                "IPAddress": "10.20.59.4",
                "IPPrefixLen": 24,
                "IPv6Gateway": "",
                "GlobalIPv6Address": "",
                "GlobalIPv6PrefixLen": 0,
                "MacAddress": "02:42:0a:14:3b:04"
            }
        }
    }
}
{
    "ContainerName": "/mysql-share-ns",
    "NetworkMode": "container:netinfra-container",
    "NetworkSettings": {
        "Bridge": "",
        "SandboxID": "",
        "HairpinMode": false,
        "LinkLocalIPv6Address": "",
        "LinkLocalIPv6PrefixLen": 0,
        "Ports": null,
        "SandboxKey": "",
        "SecondaryIPAddresses": null,
        "SecondaryIPv6Addresses": null,
        "EndpointID": "",
        "Gateway": "",
        "GlobalIPv6Address": "",
        "GlobalIPv6PrefixLen": 0,
        "IPAddress": "",
        "IPPrefixLen": 0,
        "IPv6Gateway": "",
        "MacAddress": "",
        "Networks": null
    }
}

分别在两个容器中查看网络状态:

[root@k8s-master ~]# docker exec -it netinfra-container ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
25: eth0@if26: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:0a:14:3b:04 brd ff:ff:ff:ff:ff:ff
    inet 10.20.59.4/24 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:aff:fe14:3b04/64 scope link
       valid_lft forever preferred_lft forever

[root@k8s-master ~]# docker exec -it mysql-share-ns ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
25: eth0@if26: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:0a:14:3b:04 brd ff:ff:ff:ff:ff:ff
    inet 10.20.59.4/24 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:aff:fe14:3b04/64 scope link
       valid_lft forever preferred_lft forever

可以看到两个容器的网络栈是完全一样的。

在mysql-share-ns容器中访问mysql:

[root@k8s-master ~]# docker exec -it mysql-share-ns mysql -uroot -pR0otMe
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.16 MySQL Community Server (GPL)
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>

在另一个mysql容器中访问mysql-share-ns的mysql服务,有两种方式:

[root@k8s-master ~]# docker exec -it mysql-5.7.16 mysql -h 10.20.59.4 -P 3306 -uroot -pR0otMe
......
mysql>

[root@k8s-master ~]# docker exec -it mysql-5.7.16 mysql -h 192.168.138.224 -P 23306 -uroot -pR0otMe
......
mysql>

如果在宿主机上,或者宿主机上的其它容器中访问mysql-share-ns容器中的mysql服务,直接使用容器组(netinfra-container和mysql-share-ns)的IP(10.20.59.4)就行了(k8s service的ClusterIP模式就是这样实现的);

在其它的容器中或者能访问宿主机(192.168.138.224)的机器上访问mysql-share-ns容器中的mysql服务,直接使用宿主机的IP+宿主机上暴露的端口就行了(k8s service的NodePort模式就是这样实现的)。

calico网络原理分析 最近在公司搭建k8s生产环境的时候,采用了calico作为网络插件。于是写篇博客记录一下。 一、Calico基本介绍 Calico是一个纯三层的协议,为OpenStack虚机和Docker容器提供多主机间通信。Calico不使用重叠网络比如flannel和libnetwork重叠网络驱动,它是一个纯三层的方法,使用虚拟路由代替虚拟交换,每一台虚拟路由通过BGP协议传播可达信息(路由)到剩余数据中心... 阅读详情

相关推荐

DOCKER容器 bridge网络模型下 实现组播通信的方法与全流程分析(多图)

Docker容器bridge网络模型下 实现组播通信 思路:需要 DOCKER 主机担任组播路由器,担任 igmp 查询器和组播路由表维护以及组播数据跨广播域转发的工作.具体可以借助pimd工具实现. 参考 https://mp.youkuaiyun.com/postedit/89639197 各流程与案例分析与示意图 docker主机内部容器虚拟网络拓扑示意图 容器上报igmp报文的流程示意图...

sskywatcher的博客 3940

kubernetes之网络

一、概要 kubernetes的网络设计主要针对以下几种情况实现的: ● 同一pod下容器与容器的通信(容器之间); ● 同一节点下不同的pod之间的容器间通信(Pod之间); ● 不同节点下容器之间的通信; ● 集群外部与内部组件的通信; ● pod与service之间的通信; ● Internet与Service之间的网络; k8s对集群的网络有以下要求: ● 所有的Pods之间可以在不使用NAT网络地址转换的情况下相互通信; ● 所有的Nodes之间可以在不使用NAT网络地址转换的情况下相互通信; ●

企业实战系列集 ●●● https://ximenjianxue.blog.youkuaiyun.com 2199

第7章:Docker容器网络模型深度剖析

创建自定义网络通过本章的学习,读者可以深入理解Docker的网络模型,掌握各种网络模式的配置和使用方法,并能够进行网络故障排查。这些知识对于构建可靠的容器化应用至关重要。

上海交通大学电院毕业,现互联网大厂开发工程师 135

K8s网络模型

Docker网络模型 容器 容器不是模拟一个完整的操作系统,而是对进程进行隔离,对容器里的进程来说它接触到的各种资源都是独享的,比虚拟机启动快、占用资源少。 Docker Docker是对Linux底层容器技术的封装,提供容器使用接口,docker将应用程序和该程序的依赖打包在同一个文件,即Docker image,运行Docker image就会生成一个Docker容器,程序在容器里运行就像在物理机或者虚拟机一样。 容器与虚拟机对比 虚拟机要模拟整台机器的操作系统,包括硬件资源;容器和主机共享操作系统,容

bobi的博客 3971

【云原生进阶之容器】第一章Docker核心技术1.10节——Docker网络模型设计

Docker实现的容器技术中,针对网络这一块他抽象出一个模型来,就叫CNM(Container Networking Model),相当于只实现了一个框架,具体的实现可以使用原生Docker的,也可以自己实现然后接入本框架。其中libnetwork是Docker团队将Docker的网络功能从Docker的核心代码中分离出来形成的一个单独的库,libnetwork通过插件的形式接入CNM为Docker提供网络功能。

junbaozi的专栏 1457

BRAM在图像处理缓存中的实现:完整示例解析

深入讲解如何利用BRAM高效实现图像处理中的数据缓存,结合实际案例解析BRAM的应用优势与设计细节,提升系统性能。

weixin_29443363的博客 333

calico的两种网络模式BGP和IP-IP性能分析

目前使用较多的网络插件有 flannel,calico,canel等,但是如果对比以上几种网络插件的性能,还是calico最受欢迎 一、calico概述二、性能评测指标三、物理机性能评测四、物理机到pod之间的性能测评五、pod到pod之间的性能测评六、calico使用ipip网络模式七、calico使用bgp网络模式 一、calico概述 1.calico介绍 Calico是一个纯三层的网络插件,calico的bgp模式类似于flannel的host-gw calico方便集成OpenStac.

查理王的博客 1万+

大数据国赛第2套任务C-子任务一特征工程

根据**Hudi**的dwd_ds_hudi库中相关表或MySQL中shtd_store中相关表(order_detail、sku_info),计算出与用户id为6708的用户所购买相同商品种类最多的前10位用户(只考虑他俩购买过多少种相同的商品,不考虑相同的商品买了多少次),将10位用户id进行输出,若与多个用户购买的商品种类相同,则输出结果按照用户id升序排序,输出格式如下,将结果截图粘贴至客户端桌面【Release任务C提交结果.docx】中对应的任务序号下;

weixin_44117248的博客 901

Docker网络模型深度解析|Docker|网络模型|容器化

在容器化技术蓬勃发展的背景下,Docker已经成为了现代应用部署的核心工具之一。Docker不仅提供了轻量级的容器化解决方案,还为复杂的网络环境提供了多种网络模式,以满足不同场景下的网络需求。理解和掌握Docker的网络模型,对于开发者和运维人员在实际项目中灵活运用Docker至关重要。本文将深入解析Docker的网络模型,包括其基本概念、不同网络模式的特点与应用场景、以及如何在实际项目中高效配置和使用Docker网络。

1651

2023-11-20 MySQL ARM64 银河麒麟

背景 MySQL是常用数据库,Windows安装比较容易,笔者也有记录。现在国产化系统银河麒麟中安装,不同的是软件安装包不容易下载。一是安装的方式,再一个是MySQL本身的版本,网上很多文档说明其实都是对的,但是为什么那么多都不一样呢?就是MySQL本身的版本差异比较大,这些差异笔者也不是很清楚,但是不要用8和5.7的差异非常大,8即使安装的很顺利,在使用过程也会很多坑,导致我宁愿卸载8,也要重新...

jxmh1991@163.com 808

SAP交货单过账避坑指南:序列号处理、Buffer清理与BAPI提交回滚的那些事儿

本文深入解析SAP交货单过账中的序列号处理、Buffer清理与BAPI提交回滚等关键问题,提供WS_DELIVERY_UPDATE和BAPI_OUTB_DELIVERY_CONFIRM_DEC的实战优化方案。通过详细的技术分析和最佳实践,帮助开发者避免常见陷阱,提升交货单处理的稳定性和效率。

weixin_31155097的博客 431

docker容器常用几种网络模型

本文是一篇科普文章,讲下当前docker容器网络的几种模型。 Host IP为186.100.8.117, 容器网络为172.17.0.0/16 一、 bridge方式(默认) 创建容器:(由于是默认设置,这里没指定网络--net="bridge"。另外可以看到容器内创建了eth0) [root@localhost ~]# docker run -i -t mysql:latest /bin/ba...

weixin_30783913的博客 206

CubeMX配置ADC+DMA避坑实战:如何避免采样过快导致的系统崩溃

本文针对STM32开发中常见的ADC采样过快导致程序卡死问题,提供了基于CubeMX的实战避坑指南。通过分析ADC与DMA协作机制,详解时钟配置、采样时间、DMA缓冲区长度及中断设置等关键步骤,帮助开发者从源头规避系统崩溃风险,实现稳定可靠的数据采集。

weixin_28273593的博客 324

docker 容器默认的网络模型

1 docker 容器默认的网络模型 2 docker 知识图 详情介绍:http://cizixs.com/2016/06/01/docker-default-network

李浩的博客 1012

光储微电网混合储能系统的控制策略

随着社会生产力的不断提高,对不可再生资源的大量消耗,人们已经意识到发展可再生能源的重要性,因此微电网技术作为再生能源利用的有效形式被快速发展。蓄电池容量无限大是传统光储微电网混合储能系统控制策略一种理想形式,但实际上蓄电池的容量是有限度的,传统控制策略在蓄电池剩余电量达到阖值时将无法正常使用,由此提出了光储微电网混合储能系统的新型控制策略,又结合实际情况,对开关进行了改进,利用开关与二极管并联,使其拥有四种工作状态,当储能元件剩余电量达到阈值时,可自动恢复电量降低成本,提高并输出电池电能质量。

nhkg888的博客 1732

31.XAPP1052乱序分析及处理

目录 1.XAPP1052乱序分析 2.XAPP1052乱序处理 2.1乱序处理方法选择 2.2 XAPP1052乱序处理代码详解 3.XAPP1052乱序处理后的波形分析 3.1发送引擎 3.2接收引擎 4.XAPP1052乱序处理后的带宽测试 5.下期内容 1.XAPP1052乱序分析 首先先给大家讲解下什么是PCIe的乱序。在PCIe系统中,乱序就是主机发送的TLP序列ID为1、2、3、4到从机,从机接收到的可能不是1、2、3、4。主机和从机如果都不解决乱序的问题,就会导致从机接

一个早起的程序员 1706

Docker网络模型:理解容器网络通信和连接

随着容器化技术的广泛应用,容器网络成为了构建稳定、高效应用环境的关键因素。本文将深入探讨Docker网络模型,介绍不同类型的容器网络以及它们的应用场景。从基本概念到实际案例,我们将帮助读者理解容器网络的重要性,以及如何配置和管理容器间的通信与连接。为了克服link连接的限制,现在更推荐使用用户定义的网络。这种方式可以实现容器之间的双向通信,并且不受容器名变化的影响。这样,这两个容器就可以通过容器名互相访问,而且在同一个用户定义的网络中,不受名字变化的影响。

猫头虎技术团队:授渔优于赠鱼,兴趣引领智慧,探索之乐尤显珍贵。商务合作+:Libin9iOak ,万粉变现+:优快云WF,猫头虎承诺每年免费为100名C站创作者做账号流量诊断服务!全网搜:猫头虎技术团队,点击文章底部名片或直接私信我一切皆可谈,快找虎哥! 1万+

TC397 EB MCAL开发从0开始系列 之 [13.1] Dma配置实战 -实现M2M数据传输(读存储写存储)

TC3XX TC397 MCAL DMA 从0搭建测试用例-实现M2M 存储到存储数据传输

yy九歌的博客 1913

Docker 容器网络模型

libnetwork 中容器网络模型 (Container Networking Model, CNM)十分简洁和抽象,可以让其上层使用网络功能的容器最大程度地忽略底层具体实现。 容器网络模型包括三种基本元素: 1. 沙盒(Sandbox):代表一个容器(准确地说,是其网络命名空间); 2. 接入点(Endpoint):代表网络上可以挂载容器的接口,会分配IP地址; 3. 网络(Network):可以连通多个接入点的一个子网。 可见,对于使用 CNM 的容器管理系统来说,具体底下网络如何实

smile_tianya的博客 1055

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Docker网络模型:理解容器间通信

Docker网络模型主要基于四种网络驱动:bridge、host、overlay和macvlan。每种网络驱动都有其独特的特点和适用场景。以下是bridge和host两种网络驱动的简要介绍。bridge网络:默认的网络驱动,用于创建一个虚拟网络桥接,使得容器之间可以相互通信。host网络:容器共享宿主机的网络命名空间,容器和宿主机使用相同的网络接口。本文从多个方面详细阐述了Docker网络模型,包括网络驱动、容器间通信原理、网络隔离与共享、网络驱动解析以及Docker网络模型的优势和应用场景。

2501_92487436的博客 375

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Docker网络模型深度解析:Libnetwork如何实现容器网络隔离

Docker网络隔离是容器技术中至关重要的功能,它通过libnetwork项目为容器提供了强大的网络隔离能力。libnetwork作为Docker的网络核心组件,实现了容器网络模型(CNM),让不同容器能够安全地通信同时保持网络层面的隔离。 ## 🤔 为什么需要容器网络隔离? 在传统的物理机或虚拟机环境中,每个系统都有独立的网络栈和IP地址。但在容器化环境中,多个容器可能共享同一个主机内核,

gitblog_00491的博客 746

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Docker 网络模型:多角度分析容器网络的原理与应用

Docker 网络模型是 Docker 技术的重要组成部分,它提供了容器之间网络通信和连接的机制。为了更好地理解和应用 Docker 技术,我们需要深入了解 Docker 网络模型的原理和应用。本文将重点阐述和分析 Docker 网络模型,帮助读者更好地理解和应用容器的网络功能。通过本文,我们重点阐述和分析了 Docker 网络模型,包括容器之间的网络通信和连接方式。我们从各个角度、领域、层面和技术等多个角度分析了 Docker 网络模型的原理和应用。希望本文能够帮助读者更好地理解和应用容器的网络功能。

猫头虎技术团队:授渔优于赠鱼,兴趣引领智慧,探索之乐尤显珍贵。商务合作+:Libin9iOak ,万粉变现+:优快云WF,猫头虎承诺每年免费为100名C站创作者做账号流量诊断服务!全网搜:猫头虎技术团队,点击文章底部名片或直接私信我一切皆可谈,快找虎哥! 532

docker容器的四种网络模型

Docker 在启动时会创建一个虚拟网桥 docker0,默认地址为 172.17.0.1/16, 容器启动后都会被桥接到 docker0 上,并自动分配到一个 IP 地址。 ip addr ###可以看见 容器的四种网络模式: bridge 桥接模式、host 模式、container 模式和 none 模式 启动容器时可以使用 --net 参数指定,默认是桥接模式。 以下是 d...

xbw_linux123的博客 5318

Docker基础篇(10)- 容器网络 - 网络模型

Docker容器网络通过网络名称空间隔离,之后会将名称空间 封闭容器 不创建任何网络设备,只有lo作为容器内部通信使用,无法与容器之外进行通信 桥接容器 默认的网络模型为桥接 桥接的时候,创建一对虚拟网络设备,一半放在容器上,一半放在doker0桥上。 通过这对虚拟网络设备进行网络通信 联盟式容器 现有一个容器A,拥有自己的网络名称空间 另一个容器B可以共享容器的网络名称空间 容器A和容器B使用lo本地内部通信 首先创建容器b1 [root@localhost ~]# docker r

IX的博客 1322

Docker学习5---容器网络模型及原理

Docker之5 容器网络模型及原理 1、Docker网络模型1:Bridge(桥接)模式(默认) Bridge桥接模式的实现方式: (1)docker实例利用 veth pair技术,再宿主机上创建两个虚拟网路接口设备:veth0和veth1。而veth pai'r技术的特性可以保证无论哪一个veth接收到网络报文,都会将报文传输给另一方。 (2) ...

lufei0920的博客 594

【重识云原生】第六章容器6.1.12节——Docker网络模型设计

Docker实现的容器技术中,针对网络这一块他抽象出一个模型来,就叫CNM(Container Networking Model),相当于只实现了一个框架,具体的实现可以使用原生Docker的,也可以自己实现然后接入本框架。其中libnetwork是Docker团队将Docker的网络功能从Docker的核心代码中分离出来形成的一个单独的库,libnetwork通过插件的形式接入CNM为Docker提供网络功能。

junbaozi的专栏 1178
上一篇: NVIDIA GPU驱动安装
下一篇: Openstack Cinder源码分析-删除Volume(一)
Aaron.com
博客等级 码龄17年 25粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值