容器网络概念实现与Docker迁移指南
立即解锁
发布时间: 2025-08-14 00:33:26 阅读量: 9 订阅数: 14 


Podman for DevOps: 使用容器化技术革新
### 容器网络概念实现与 Docker 迁移技巧
#### 1. 容器网络概念实现
##### 1.1 附加主机网络
为了将容器服务暴露给外部世界,可以将整个主机网络附加到运行中的容器。不过,这种方法可能导致主机资源被未经授权使用,因此不建议使用,需谨慎操作。
使用以下命令可轻松实现将主机网络附加到运行中的容器,消除网络隔离:
```bash
# podman run --network=host -dt docker.io/library/httpd
2cb80369e53761601a41a4c004a485139de280c3738d1b7131c241f4001
f78a6
```
运行上述命令后,可通过以下命令检查运行中的容器是否绑定到主机系统的网络接口:
```bash
# netstat -nap|grep ::80
tcp6 0 0 :::80 :::*
LISTEN 37304/httpd
# curl localhost:80
<html><body><h1>It works!</h1></body></html>
```
##### 1.2 主机防火墙配置
无论是使用端口发布还是将主机网络附加到容器,将容器暴露到主机外部的过程还涉及主机的基础操作系统。在大多数情况下,需要允许传入连接流入主机的底层机器,这就需要与系统防火墙进行交互。
如果使用的是 Fedora 操作系统或其他使用 Firewalld 作为防火墙守护进程管理器的 Linux 发行版,可通过以下命令允许端口 80 的传入连接:
```bash
# firewall-cmd --add-port=80/tcp
success
# firewall-cmd --runtime-to-permanent
success
```
第一个命令编辑实时系统规则,第二个命令以永久方式存储运行时规则,使规则在系统重启或服务重启后仍然有效。
##### 1.3 无特权容器网络行为
对于以 root 身份运行的容器,Podman 依赖 CNI 插件或 Netavark 来改变主机网络命名空间中的网络配置。而对于无特权容器,Podman 使用 slirp4netns 项目,允许在无需 root 特权的情况下创建容器网络配置。
每个新的无特权容器都会在主机上执行一个新的 slirp4netns 进程,该进程会为容器创建一个网络命名空间,并创建一个 tap0 设备,其地址配置为 10.0.2.100/24(来自默认的 slirp4netns 10.0.2.0/24 子网),这会防止两个容器在同一网络上直接通信,因为会出现 IP 地址重叠。
以下示例展示了无特权 busybox 容器的网络行为:
```bash
$ podman run -i busybox sh -c 'ip addr show tap0'
2: tap0: <BROADCAST,UP,LOWER_UP> mtu 65520 qdisc fq_codel state
UNKNOWN group default qlen 1000
link/ether 2a:c7:86:66:e9:20 brd ff:ff:ff:ff:ff:ff
inet 10.0.2.100/24 brd 10.0.2.255 scope global tap0
valid_lft forever preferred_lft forever
inet6 fd00::28c7:86ff:fe66:e920/64 scope global dynamic
mngtmpaddr
valid_lft 86117sec preferred_lft 14117sec
inet6 fe80::28c7:86ff:fe66:e920/64 scope link
valid_lft forever preferred_lft forever
```
可以通过以下命令检查无特权网络命名空间并找到对应的 tap0 设备:
```bash
$ podman unshare --rootless-netns ip addr show tap0
2: tap0: <BROADCAST,UP,LOWER_UP> mtu 65520 qdisc fq_codel state
UNKNOWN group default qlen 1000
link/ether 1a:eb:82:6a:82:8d brd ff:ff:ff:ff:ff:ff
inet 10.0.2.100/24 brd 10.0.2.255 scope global tap0
valid_lft forever preferred_lft forever
inet6 fd00::18eb:82ff:fe6a:828d/64 scope global dynamic
mngtmpaddr
```
0
0
复制全文
相关推荐










