linux/docker网络梳理

namespace:

docker0:网桥

自己创建namespace:

同一个命名空间里的网络可以互相访问

查看网络命名空间:

[root@localhost ~]# ip netns list

添加两个网络命名空间:

[root@localhost ~]# ip netns add b1

[root@localhost ~]# ip netns add b2

查看ip addr:

[root@localhost ~]# ip netns exec b2 ip a

可以看到回环网卡里面是down

接下来我们让他起来

[root@localhost ~]# ip netns exec b1 ip link set dev lo up

然后我们看看发现是unkonwn

我们要在两个容器之间创建veth去链接容器,打通网络

[root@localhost ~]# ip link add veth-b1 type veth peer name veth-b2

然后查看一下

[root@localhost ~]# ip link

可以找到两个新创建的veth设备

接下来我们要把veth设备加入到命名空间里

[root@localhost ~]# ip link set veth-b1 netns b1

然后iplink一下发现少了veth-b1,说明成功,

同理放入b2

[root@localhost ~]# ip link set veth-b2 netns b2

然后iplink发现成功

接下来需要设置ip了

查看一下

[root@localhost ~]# ip netns exec b1 ip a

发现状态是down,但是网卡设置好了,然后添加ip

[root@localhost ~]# ip netns exec b1 ip addr add 192.168.10.1/24 dev veth-b1

[root@localhost ~]# ip netns exec b2 ip addr add 192.168.10.2/24 dev veth-b2

然后查看一下

[root@localhost ~]# ip netns exec b1 ip a

发现ip设置好了

接下来需要启动网卡,dev是device

[root@localhost ~]# ip netns exec b1 ip link set dev veth-b1 up

[root@localhost ~]# ip netns exec b2 ip link set dev veth-b2 up

接下来我们ping一下两个命名空间

[root@localhost ~]# ip netns exec b2 ping 192.168.10.1

[root@localhost ~]# ip netns exec b1 ping 192.168.10.2

发现ping成功

总结一下,一台机器里创建两个命名空间,命名空间之间无法通信,需要用网卡通信,

实际上就是和多台物理机需要网线通信是一样的。

以上总结,为docker网络打基础

接下来看docker网络吧

 

 

[root@localhost ~]# brctl show

或者

[root@localhost ~]# docker network ls

然后创建demo-bridge,再查看

[root@localhost ~]# docker network create -d bridge demo-bridge

然后查看

 

两种查看方式

 

[root@localhost ~]# docker run -itd --name demo1 --network demo-bridge busybox

[root@localhost ~]# docker run -itd --name demo2 --network demo-bridge busybox

然后查看docker下网络,应该有已经创建好的容器

[root@localhost ~]# docker network inspect 29c22bb94f08

 

然后我们ping一下两个容器

[root@localhost ~]# docker exec -it demo1 bash

然后ping一下172.18.0.3发下能成功,同理反过来可以ping通

我们可以再起一个容器,不设置bridge,用默认的bridge看是否可以ping通(当然不可能,因为不通网络设备)

创建第三个容器,默认bridge

[root@localhost ~]# docker run -itd --name demo3 busybox

自己测试下ping不同的

然后我们需要把默认bridge里的demo3换到demo-bridge里

[root@localhost ~]# docker network connect demo-bridge demo3

然后查看demo-bridge

 

没有疑问,现在可以在一个bridge里当然可以ping通了,这里面有很多需要思考的点,现在先不抛出来,或许想到了之后就可以理解k8s的一些原理了吧,先搞明白docker里的通信原理为后面做铺垫。

 

还记得我们之前的命令创建veth是peer,也就是相同的出现可以理解为成对出现。如果需要深究建议学一下iptables

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值