docker 网络

前言

随着容器的普及,经常使用docker创建容器来跑应用,结合开源的kubernetes和istio等,对于无状态的服务有极好的支持能力,秒级调度,弹性伸缩等优势。实际上kube的容器仅仅是接口,实际的容器可以是docker,podman等,以docker为例。

默认网络

默认即bridge网络,虽然名为桥接,实际上是NAT,在Linux是原生运行docker的,在mac和win是虚拟机运行的,经常可以看到qemu的进程,以ubuntu为例,安装就不说了,按照官方文档安装:Install Docker Engine on Ubuntu | Docker Documentation

注意官方源有问题,使用其他源即可,比如清华源。,安装后执行ifconfig

 

docker0网桥,即NAT的实现,虚拟路由,创建了127.17的网关,意味着默认创建的容器IP都是172.17开头的IP,同理可以使用端口映射的方式对外提供服务,实际上在kube中会有kube proxy代理,提供更复杂的lvs等扁平网络。还有很多开源的网络方案,比如:Flannel,Calico 和 Cilium

docker必须root运行,笔者以ubuntu镜像为例

 运行ubuntu

docker run -itd --name ubuntu-demo ubuntu   #如果只有-d,容器很快就运行结束了。

docker exec -it ubuntu-demo bash

直接进入容器,进入容器就是root权限。但是ubuntu官方的镜像只有基础命令,只能换源安装net-tools命令

mv /etc/apt/sources.list /etc/apt/sources.list.bak

cat >> /etc/apt/sources.list << EOF
deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
EOF

换源后执行apt update ,不能使用https,因为镜像没有内置证书,需要手动下载证书,然而又没有wget等工具,😭。

apt install net-tools

打包备用

 

ifconfig后可以看到ip地址,在桥接下实际上是NAT网络,网关是172.17.255.255,实际上网关是可以设置的,即设置docker0虚拟网卡。 手动设置网络一样

 结果

 

host

设置host试试,实际上host和none模式仅在特殊时候使用

 可以看见宿主机的网卡信息,容器跟宿主机网络一模一样,公用宿主机网络

 

none

none模式就很特殊了,实际上就是localhost

 可以看到仅有127.0.0.1的lo网卡了,是lo不是l0,😅,当然也只能localhost访问了

container

container表示,已有容器是什么网络,启动的容器就是什么网络,这个特性在kube尤其重要

以最后示例为例,创建none同网络容器

创建host同网络容器

创建bridge同网络容器

  

桥接

实际上docker也可以不使用docker0网卡,可以创建虚拟网卡,桥接使用

 比如使用macvlan网络桥接

kube

kube实际上并不定义容器,通过接口调用容器接口,启动容器,kube默认创建pause容器(定义了网络),默认就是bridge网络,其他容器,比如初始化容器,伴生容器,应用容器都是container模式运行的。

总结

实际上kube就是容器的管理器,核心思想是调度,调度就需要网络、流量治理能力(kube目前薄弱环节),就出现了各种网络方案,istio等。容器的核心网络在kube是pause容器创建的,其他容器通过container沿用网络方案,即一个POD。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值