Podman容器网络互联与端口暴露全解析(上)
立即解锁
发布时间: 2025-08-26 00:06:50 阅读量: 2 订阅数: 7 


Podman for DevOps: 从理论到实践的容器化指南
### Podman容器网络互联与端口暴露全解析(上)
#### 1. 容器网络基础操作
在容器网络管理中,有时需要移除特定网络或清理未使用的网络。移除特定网络可使用`podman network rm`命令;若要移除所有未使用的网络,`podman network prune`是更好的选择,操作步骤如下:
```bash
# podman network prune
WARNING! This will remove all networks not used by at least one
container.
Are you sure you want to continue? [y/N] y
```
#### 2. 同一网络内容器互联
同一网络内的多个容器可在同一子网内相互通信,无需外部路由。以下是创建两个`busybox`容器并测试通信的步骤:
1. 创建容器:
```bash
# podman run -d --name endpoint1 \
--cap-add=net_admin,net_raw busybox /bin/sleep 10000
# podman run -d --name endpoint2 \
--cap-add=net_admin,net_raw busybox /bin/sleep 10000
```
2. 获取容器IP地址(可能会变化),可使用`podman inspect`或`nsenter`命令。
3. 测试通信:
```bash
# podman exec -it endpoint1 traceroute 10.88.0.14
traceroute to 10.88.0.14 (10.88.0.14), 30 hops max, 46 byte
packets
1 10.88.0.14 (10.88.0.14) 0.013 ms 0.004 ms 0.002 ms
```
#### 3. 不同网络间容器互联
创建新网络并连接容器,可实现不同网络间容器的通信,步骤如下:
1. 创建新网络`net1`:
```bash
# podman network create --driver bridge --gateway "10.90.0.1"
--subnet "10.90.0.0/16" net1
```
2. 创建连接到`net1`的容器`endpoint3`:
```bash
# podman run -d --name endpoint3 --network=net1 --cap-add=net_
admin,net_raw busybox /bin/sleep 10000
```
3. 测试`endpoint1`到`endpoint3`的网络路径:
```bash
# podman exec -it endpoint1 traceroute 10.90.0.2
traceroute to 10.90.0.2 (10.90.0.2), 30 hops max, 46 byte
packets
1 host.containers.internal (10.88.0.1) 0.003 ms 0.001 ms
0.006 ms
2 10.90.0.2 (10.90.0.2) 0.001 ms 0.002 ms 0.002 ms
```
#### 4. 容器DNS解析
DNS解析是一个简单的概念,即查询服务以获取与给定主机名关联的IP地址。在容器场景中,如一个名为`webapp`的容器中的Web应用需要读写另一个名为`db`的容器中的数据库,DNS解析可让`webapp`在联系`db`之前查询其IP地址。
Podman的默认网络不提供DNS解析,而新创建的用户网络默认启用DNS解析。不同网络后端的DNS解析实现不同:
- **CNI网络后端**:`dnsname`插件自动配置`dnsmasq`服务,在容器连接到网络时启动以提供DNS解析。
- **Netavark网络后端**:DNS解析由`aarvark-dns`提供。
以下是测试DNS解析的步骤:
1. 创建PostgreSQL数据库容器:
```bash
# podman run -d \
--network net1 --name db \
-e POSTGRES_USER=admin \
-e POSTGRES_PASSWORD=password \
-e POSTGRES_DB=students \
postgres
```
2. 恢复数据库数据:
```bash
# cd Chapter10/students
# cat db.sql | podman exec -i db psql -U admin students
```
3. 构建并运行Web应用容器:
```bash
# buildah build -t students .
# podman run -d \
--network net1 \
-p 8080:8080 \
--name webapp \
students \
students -host db -port 5432 \
-username admin -password
```
4. 测试API调用:
```bash
# curl localhost:8080/students
{"Id":10149,"FirstName":"Frank","MiddleName":
"Vincent","LastName":
"Zappa","Class":"3A","Course":"Composition"}
```
#### 5. CNI网络后端的DNS解析
在Podman 3或4的CNI后端中,`net1`网络启用了`dnsname`插件,并启动了`dnsmasq`服务来解析容器名称到其分配的IP地址。具体操作如下:
1. 获取容器IP地址:
```bash
# podman inspect db --format '{{.NetworkSettings.Networks.net1.
IPAddress}}'
10.90.0.2
# podman in
```
0
0
复制全文
相关推荐










