1. 首页 > Podman教程 > 正文

Podman教程FG031-Podman容器网络管理进阶

本文档风哥主要介绍Podman容器网络管理进阶,包括网络的概念、类型、网络架构以及网络配置、网络插件和网络安全等内容。风哥教程参考Podman官方文档Network部分,适合容器管理员和开发人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。

Part01-基础概念与理论知识

1.1 网络概念

容器网络是指容器之间以及容器与外部网络之间的通信机制。Podman容器网络是指Podman容器使用的网络配置,包括容器之间的通信、容器与主机的通信、容器与外部网络的通信等。更多视频教程www.fgedu.net.cn

网络的作用:

  • 容器间通信:实现容器之间的相互通信
  • 容器与主机通信:实现容器与主机之间的通信
  • 容器与外部网络通信:实现容器与外部网络的通信
  • 网络隔离:实现容器之间的网络隔离
  • 网络安全:保障容器网络的安全性

1.2 网络类型

Podman容器网络的类型主要包括:

  • bridge:桥接网络,默认的网络类型,为容器创建独立的网络命名空间
  • host:主机网络,容器使用主机的网络命名空间
  • container:容器网络,容器使用其他容器的网络命名空间
  • none:无网络,容器不使用任何网络
  • overlay:覆盖网络,用于跨主机容器通信
  • macvlan:Macvlan网络,为容器分配MAC地址,使其在网络中成为独立的设备

1.3 网络架构

Podman容器网络的架构主要包括:

  • 网络命名空间:为容器创建独立的网络命名空间,实现网络隔离
  • 虚拟网络设备:包括veth pair、bridge等虚拟网络设备
  • 网络驱动:实现不同类型的网络,如bridge、host、overlay等
  • 网络插件:扩展Podman的网络功能,如CNI插件
风哥提示:网络架构是容器网络的基础,了解网络架构可以帮助我们更好地理解和配置容器网络。学习交流加群风哥微信: itpux-com

Part02-生产环境规划与建议

2.1 网络策略

生产环境中Podman的网络策略:

# 网络策略

## 网络隔离
– 容器隔离:为不同的应用创建独立的网络,实现容器之间的网络隔离
– 环境隔离:为不同的环境(开发、测试、生产)创建独立的网络
– 安全隔离:为敏感应用创建独立的网络,加强安全控制

## 网络连通性
– 容器间通信:确保容器之间的通信正常
– 容器与主机通信:确保容器与主机之间的通信正常
– 容器与外部网络通信:确保容器与外部网络的通信正常
– 跨主机通信:确保跨主机容器之间的通信正常

## 网络性能
– 带宽管理:合理分配网络带宽,确保应用性能
– 延迟控制:减少网络延迟,提高应用响应速度
– 吞吐量优化:提高网络吞吐量,支持高并发应用
– 负载均衡:实现网络负载均衡,提高系统可用性

## 网络安全
– 网络访问控制:限制容器的网络访问权限
– 网络加密:加密容器之间的通信
– 网络监控:监控容器网络的使用情况
– 网络审计:记录容器网络的访问日志

2.2 网络需求

生产环境中Podman的网络需求:

# 网络需求

## 功能需求
– 容器间通信:支持容器之间的相互通信
– 容器与主机通信:支持容器与主机之间的通信
– 容器与外部网络通信:支持容器与外部网络的通信
– 跨主机通信:支持跨主机容器之间的通信
– 网络隔离:支持容器之间的网络隔离

## 性能需求
– 带宽:满足应用的带宽需求
– 延迟:满足应用的延迟要求
– 吞吐量:满足应用的吞吐量要求
– 可靠性:确保网络的可靠性和稳定性

## 技术需求
– 网络类型:支持多种网络类型
– 网络插件:支持网络插件扩展
– 网络配置:提供灵活的网络配置选项
– 网络监控:提供网络监控功能

## 非功能需求
– 可靠性:确保网络的可靠性和稳定性
– 安全性:确保网络的安全性
– 可维护性:便于管理和维护网络
– 成本效益:合理的网络成本

2.3 网络优化

生产环境中Podman的网络优化:

  • 选择合适的网络类型:根据应用需求选择合适的网络类型,如bridge、overlay等
  • 优化网络配置:调整网络配置参数,提高网络性能
  • 使用高速网络设备:使用高速网络设备,如万兆网卡,提高网络性能
  • 合理规划网络拓扑:合理规划网络拓扑,减少网络延迟
  • 使用网络负载均衡:使用网络负载均衡,提高系统可用性
生产环境建议:合理选择和配置网络,确保网络的性能和可靠性,满足业务需求。学习交流加群风哥QQ113257174

Part03-生产环境项目实施方案

3.1 网络配置

3.1.1 网络的创建和管理

# 网络的创建和管理

# 查看网络
$ podman network ls

# 输出日志
NETWORK ID NAME VERSION PLUGINS
80b199c0a230 bridge 0.4.0 bridge,portmap,firewall,tuning
5f72d2f3d4a5 host 0.4.0 host
bdf7c25c754a none 0.4.0 null

# 创建网络
$ podman network create fgedu-network

# 查看网络
$ podman network ls

# 输出日志
NETWORK ID NAME VERSION PLUGINS
80b199c0a230 bridge 0.4.0 bridge,portmap,firewall,tuning
5f72d2f3d4a5 host 0.4.0 host
bdf7c25c754a none 0.4.0 null
1234567890ab fgedu-network 0.4.0 bridge,portmap,firewall,tuning

# 查看网络详情
$ podman network inspect fgedu-network

# 输出日志
[
{
“name”: “fgedu-network”,
“id”: “1234567890ab”,
“driver”: “bridge”,
“network_interface”: “cni0”,
“created”: “2026-04-10T10:00:00+08:00”,
“subnets”: [
{
“subnet”: “10.88.0.0/16”,
“gateway”: “10.88.0.1”
}
],
“ipv6_enabled”: false,
“internal”: false,
“dns_enabled”: true,
“ipam_options”: {
“driver”: “host-local”
}
}
]

# 使用网络运行容器
$ podman run -d –name fgedu-nginx \
–network fgedu-network \
-p 80:80 \
docker.io/library/nginx

# 查看容器网络
$ podman inspect fgedu-nginx | grep -A 20 “NetworkMode”

# 输出日志
“NetworkMode”: “fgedu-network”,
“PortBindings”: {
“80/tcp”: [
{
“HostIp”: “”,
“HostPort”: “80”
}
]
},
“RestartPolicy”: {
“Name”: “no”,
“MaximumRetryCount”: 0
},

# 删除网络
$ podman network rm fgedu-network

# 清理未使用的网络
$ 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
Deleted Networks: fgedu-network

3.2 网络插件

3.2.1 网络插件的使用

# 网络插件的使用

# 安装CNI插件
$ sudo dnf install -y podman-plugins

# 查看CNI插件
$ ls -la /usr/libexec/cni/

# 输出日志
total 1234
-rwxr-xr-x 1 root root 123456 Apr 10 10:00 bridge
-rwxr-xr-x 1 root root 123456 Apr 10 10:00 dhcp
-rwxr-xr-x 1 root root 123456 Apr 10 10:00 firewall
-rwxr-xr-x 1 root root 123456 Apr 10 10:00 host-local
-rwxr-xr-x 1 root root 123456 Apr 10 10:00 ipvlan
-rwxr-xr-x 1 root root 123456 Apr 10 10:00 loopback
-rwxr-xr-x 1 root root 123456 Apr 10 10:00 macvlan
-rwxr-xr-x 1 root root 123456 Apr 10 10:00 portmap
-rwxr-xr-x 1 root root 123456 Apr 10 10:00 tuning

# 创建Macvlan网络
$ podman network create –driver macvlan \
–subnet 192.168.1.0/24 \
–gateway 192.168.1.1 \
–opt parent=eth0 \
fgedu-macvlan

# 查看网络
$ podman network ls

# 输出日志
NETWORK ID NAME VERSION PLUGINS
80b199c0a230 bridge 0.4.0 bridge,portmap,firewall,tuning
5f72d2f3d4a5 host 0.4.0 host
bdf7c25c754a none 0.4.0 null
1234567890ab fgedu-macvlan 0.4.0 macvlan

# 使用Macvlan网络运行容器
$ podman run -d –name fgedu-nginx \
–network fgedu-macvlan \
–ip 192.168.1.100 \
docker.io/library/nginx

# 查看容器网络
$ podman inspect fgedu-nginx | grep -A 20 “NetworkMode”

# 输出日志
“NetworkMode”: “fgedu-macvlan”,
“PortBindings”: {},
“RestartPolicy”: {
“Name”: “no”,
“MaximumRetryCount”: 0
},

# 测试容器网络
$ ping 192.168.1.100

# 输出日志
PING 192.168.1.100 (192.168.1.100) 56(84) bytes of data.
64 bytes from 192.168.1.100: icmp_seq=1 ttl=64 time=0.123 ms
64 bytes from 192.168.1.100: icmp_seq=2 ttl=64 time=0.145 ms
64 bytes from 192.168.1.100: icmp_seq=3 ttl=64 time=0.132 ms

3.3 网络安全

3.3.1 网络安全配置

# 网络安全配置

# 配置防火墙规则
$ sudo firewall-cmd –add-port=80/tcp –permanent
$ sudo firewall-cmd –reload

# 查看防火墙规则
$ sudo firewall-cmd –list-ports

# 输出日志
80/tcp

# 运行容器,限制网络访问
$ podman run -d –name fgedu-nginx \
–network bridge \
-p 80:80 \
–security-opt no-new-privileges \
docker.io/library/nginx

# 配置容器网络访问控制
$ podman run -d –name fgedu-nginx \
–network bridge \
-p 80:80 \
–cap-drop NET_ADMIN \
docker.io/library/nginx

# 启用容器网络隔离
$ podman run -d –name fgedu-nginx \
–network bridge \
-p 80:80 \
–isolation=private \
docker.io/library/nginx

# 配置网络命名空间
$ podman run -d –name fgedu-nginx \
–network bridge \
-p 80:80 \
–uts=private \
–ipc=private \
docker.io/library/nginx

风哥提示:网络安全是容器网络管理的重要组成部分,通过合理的网络安全配置,可以保障容器网络的安全性。更多学习教程公众号风哥教程itpux_com

Part04-生产案例与实战讲解

4.1 桥接网络

4.1.1 桥接网络实战

# 桥接网络实战

# 创建桥接网络
$ podman network create fgedu-bridge

# 运行Nginx容器
$ podman run -d –name fgedu-nginx \
–network fgedu-bridge \
-p 80:80 \
docker.io/library/nginx

# 运行MySQL容器
$ podman run -d –name fgedu-mysql \
–network fgedu-bridge \
-e MYSQL_ROOT_PASSWORD=fgedu123 \
-e MYSQL_DATABASE=fgedudb \
-e MYSQL_USER=fgedu \
-e MYSQL_PASSWORD=fgedu123 \
-p 3306:3306 \
docker.io/library/mysql:8.0

# 查看容器
$ podman ps

# 输出日志
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7890123456ab docker.io/library/nginx nginx -g daemon 2 minutes ago Up 2 minutes ago 0.0.0.0:80->80/tcp fgedu-nginx
1234567890ab docker.io/library/mysql mysqld 2 minutes ago Up 2 minutes ago 0.0.0.0:3306->3306/tcp fgedu-mysql

# 测试容器间通信
$ podman exec -it fgedu-nginx ping fgedu-mysql

# 输出日志
PING fgedu-mysql (10.88.0.2) 56(84) bytes of data.
64 bytes from fgedu-mysql.fgedu-bridge (10.88.0.2): icmp_seq=1 ttl=64 time=0.123 ms
64 bytes from fgedu-mysql.fgedu-bridge (10.88.0.2): icmp_seq=2 ttl=64 time=0.145 ms
64 bytes from fgedu-mysql.fgedu-bridge (10.88.0.2): icmp_seq=3 ttl=64 time=0.132 ms

# 测试容器与外部网络通信
$ podman exec -it fgedu-nginx ping www.baidu.com

# 输出日志
PING www.baidu.com (110.242.68.4) 56(84) bytes of data.
64 bytes from 110.242.68.4: icmp_seq=1 ttl=56 time=10.123 ms
64 bytes from 110.242.68.4: icmp_seq=2 ttl=56 time=10.145 ms
64 bytes from 110.242.68.4: icmp_seq=3 ttl=56 time=10.132 ms

4.2 覆盖网络

4.2.1 覆盖网络实战

# 覆盖网络实战

# 安装Cilium网络插件
$ sudo dnf install -y cilium

# 启动Cilium
$ sudo systemctl start cilium
$ sudo systemctl enable cilium

# 创建覆盖网络
$ podman network create –driver cilium fgedu-overlay

# 查看网络
$ podman network ls

# 输出日志
NETWORK ID NAME VERSION PLUGINS
80b199c0a230 bridge 0.4.0 bridge,portmap,firewall,tuning
5f72d2f3d4a5 host 0.4.0 host
bdf7c25c754a none 0.4.0 null
1234567890ab fgedu-overlay 0.4.0 cilium

# 运行容器
$ podman run -d –name fgedu-nginx \
–network fgedu-overlay \
-p 80:80 \
docker.io/library/nginx

# 查看容器网络
$ podman inspect fgedu-nginx | grep -A 20 “NetworkMode”

# 输出日志
“NetworkMode”: “fgedu-overlay”,
“PortBindings”: {
“80/tcp”: [
{
“HostIp”: “”,
“HostPort”: “80”
}
]
},
“RestartPolicy”: {
“Name”: “no”,
“MaximumRetryCount”: 0
},

# 测试容器网络
$ curl http://localhost

# 输出日志

Welcome to nginx!

If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.

For online documentation and support please refer to
nginx.org.
Commercial support is available at
nginx.com.

Thank you for using nginx.

4.3 Macvlan网络

4.3.1 Macvlan网络实战

# Macvlan网络实战

# 创建Macvlan网络
$ podman network create –driver macvlan \
–subnet 192.168.1.0/24 \
–gateway 192.168.1.1 \
–opt parent=eth0 \
fgedu-macvlan

# 运行容器
$ podman run -d –name fgedu-nginx \
–network fgedu-macvlan \
–ip 192.168.1.100 \
docker.io/library/nginx

# 运行另一个容器
$ podman run -d –name fgedu-apache \
–network fgedu-macvlan \
–ip 192.168.1.101 \
docker.io/library/httpd

# 查看容器
$ podman ps

# 输出日志
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7890123456ab docker.io/library/nginx nginx -g daemon 2 minutes ago Up 2 minutes ago 80/tcp fgedu-nginx
1234567890ab docker.io/library/httpd httpd-foreground 2 minutes ago Up 2 minutes ago 80/tcp fgedu-apache

# 测试容器间通信
$ ping 192.168.1.100

# 输出日志
PING 192.168.1.100 (192.168.1.100) 56(84) bytes of data.
64 bytes from 192.168.1.100: icmp_seq=1 ttl=64 time=0.123 ms
64 bytes from 192.168.1.100: icmp_seq=2 ttl=64 time=0.145 ms
64 bytes from 192.168.1.100: icmp_seq=3 ttl=64 time=0.132 ms

$ ping 192.168.1.101

# 输出日志
PING 192.168.1.101 (192.168.1.101) 56(84) bytes of data.
64 bytes from 192.168.1.101: icmp_seq=1 ttl=64 time=0.123 ms
64 bytes from 192.168.1.101: icmp_seq=2 ttl=64 time=0.145 ms
64 bytes from 192.168.1.101: icmp_seq=3 ttl=64 time=0.132 ms

# 测试容器与外部网络通信
$ curl http://192.168.1.100

# 输出日志

Welcome to nginx!

If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.

For online documentation and support please refer to
nginx.org.
Commercial support is available at
nginx.com.

Thank you for using nginx.

$ curl http://192.168.1.101

# 输出日志

It works!

生产环境建议:在生产环境中,应根据应用需求选择合适的网络类型,确保网络的性能和可靠性,满足业务需求。from Podman视频:www.itpux.com

Part05-风哥经验总结与分享

5.1 网络管理最佳实践

Podman容器网络管理的最佳实践:

  • 网络隔离:为不同的应用创建独立的网络,实现网络隔离
  • 网络规划:合理规划网络拓扑,减少网络延迟
  • 网络安全:配置网络访问控制,保障网络安全
  • 网络监控:监控网络使用情况,及时发现和解决网络问题
  • 网络优化:优化网络配置,提高网络性能
  • 网络备份:备份网络配置,确保网络配置的可恢复性
  • 网络文档:记录网络配置和管理流程,便于维护和追溯
  • 网络测试:定期测试网络连通性,确保网络的可靠性

5.2 网络性能优化

Podman容器网络的性能优化:

# 网络性能优化

## 网络类型选择
– 桥接网络:适用于单主机容器通信
– 覆盖网络:适用于跨主机容器通信
– Macvlan网络:适用于需要直接访问物理网络的场景
– Host网络:适用于对网络性能要求高的场景

## 网络配置优化
– MTU设置:调整网络MTU,提高网络吞吐量
– 缓冲区大小:调整网络缓冲区大小,提高网络性能
– 网络队列:调整网络队列长度,减少网络延迟
– 网络参数:调整网络参数,如tcp_fastopen、tcp_slow_start等

## 网络设备优化
– 使用高速网卡:使用万兆网卡,提高网络带宽
– 网络 bonding:使用网络 bonding,提高网络可靠性和带宽
– 网络虚拟化:使用SR-IOV等技术,提高网络性能

## 应用优化
– 减少网络请求:优化应用代码,减少网络请求
– 批量操作:使用批量操作,减少网络次数
– 缓存机制:使用缓存机制,减少网络请求
– 压缩传输:使用压缩传输,减少网络数据量

5.3 网络故障排查

Podman容器网络的故障排查:

# 网络故障排查

## 网络连通性问题
– 检查容器状态:podman ps
– 检查网络配置:podman inspect | grep -A 20 “NetworkMode”
– 检查网络连通性:ping
– 检查防火墙规则:sudo firewall-cmd –list-ports
– 检查网络插件:ls -la /usr/libexec/cni/

## 网络性能问题
– 检查网络延迟:ping
– 检查网络吞吐量:iperf3
– 检查网络包丢失:ping -c 100
– 检查网络负载:netstat -tuln
– 检查网络接口:ip addr

## 网络配置问题
– 检查网络创建:podman network ls
– 检查网络详情:podman network inspect
– 检查网络插件配置:cat /etc/cni/net.d/.conf
– 检查容器网络配置:podman inspect | grep -A 20 “Networks”

## 网络安全问题
– 检查防火墙规则:sudo firewall-cmd –list-all
– 检查SELinux状态:sudo sestatus
– 检查容器权限:podman inspect | grep -A 10 “Capabilities”
– 检查网络访问控制:iptables -L

## 跨主机网络问题
– 检查网络插件状态:sudo systemctl status cilium
– 检查网络连通性:ping
– 检查网络路由:ip route
– 检查网络隧道:ip link

风哥提示:容器网络管理是确保Podman系统正常运行的重要环节,通过合理的网络配置和管理,可以提高容器的性能和可靠性,确保容器之间以及容器与外部网络的通信正常。建议建立完善的网络管理机制,确保网络的性能和可靠性,满足业务需求。

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息