AMHPOD容器IP错误问题
宿主机是一台独立IP的国内主机,近期因为一些原因,主机的IP地址变更了两次,IPV4和IPV6同时变更
我发现变更后,普通的docker可以正常启动,但是使用了podman的amhpod似乎无法直接适应IP的变化,无法正常从外网访问
默认情况下,应该是走的bridge 网络模式?
直接在amhpod重启运行、或重部署容器不能解决问题
第一次变更IP时,我将所有容器全部卸载,重装了amhpod后,再挨个重新拉取部署解决
现在因为容器十几个,挨个重复这个操作很费劲
请问大大有没有更好的解决方式
根据两位大大的提示,问题排查如下:
确定容器内网ip 10.88.0.6
"NetworkSettings": {
"EndpointID": "",
"Gateway": "10.88.0.1",
"IPAddress": "10.88.0.6",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "96:e1:27:f0:4e:ea",
"Bridge": "",
"SandboxID": "",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {
"80/tcp": [
{
"HostIp": "",
"HostPort": "10000"
}
]
},
"SandboxKey": "/run/netns/netns-ddee8b9f-89d7-2eeb-d814-1ddf20a1363a",
"Networks": {
"podman": {
"EndpointID": "",
"Gateway": "10.88.0.1",
"IPAddress": "10.88.0.6",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "96:e1:27:f0:4e:ea",
"NetworkID": "podman",
"DriverOpts": null,
"IPAMConfig": null,
"Links": null,
"Aliases": [
"1f4798f85017"
]
}
}
并且ping curl测试均正常
现在我在想是不是防火墙出了问题:
这是摘选的几条相关IP和端口(10000)防火墙记录:
-A INPUT -p tcp -m tcp --dport 10000 -j ACCEPT
-A NETAVARK-DN-1D8721804F16F -p tcp -m tcp --dport 10000 -j DNAT --to-destination 10.88.0.36:80
-A NETAVARK-DN-1D8721804F16F -p tcp -m tcp --dport 8089 -j DNAT --to-destination 10.88.0.6:8088
-A NETAVARK-DN-1D8721804F16F -p tcp -m tcp --dport 10000 -j DNAT --to-destination 10.88.0.6:80
-A NETAVARK-DN-1D8721804F16F -s 10.88.0.0/16 -p tcp -m tcp --dport 10000 -j NETAVARK-HOSTPORT-SETMARK
-A NETAVARK-DN-1D8721804F16F -s 127.0.0.1/32 -p tcp -m tcp --dport 10000 -j NETAVARK-HOSTPORT-SETMARK
-A NETAVARK-DN-1D8721804F16F -p tcp -m tcp --dport 10000 -j DNAT --to-destination 10.88.0.6:80
-A NETAVARK-HOSTPORT-DNAT -p tcp -m tcp --dport 10000 -m comment --comment "dnat name: podman id: 1f4798f85017ea7c01563710553d46107ddbeae713c2d6006ef314fde27a0776" -j NETAVARK-DN-1D8721804F16F
我发现多了一个8089的端口的转发,但是这个端口我应该是用在另外一个IP为10.88.0.4的容器,并且防火墙中也有这么一条记录:
-A NETAVARK-DN-1D8721804F16F -p tcp -m tcp --dport 8089 -j DNAT --to-destination 10.88.0.4:8088
于是我把所有容器都停止了,然后发现还剩下这么几个规则:
-A NETAVARK-DN-1D8721804F16F -p tcp -m tcp --dport 8092 -j DNAT --to-destination 10.88.0.23:8080
-A NETAVARK-DN-1D8721804F16F -d 127.0.0.100/32 -p tcp -m tcp --dport 5270 -j DNAT --to-destination 10.88.0.25:80
-A NETAVARK-DN-1D8721804F16F -p tcp -m tcp --dport 21114 -j DNAT --to-destination 10.88.0.34:21114
-A NETAVARK-DN-1D8721804F16F -p tcp -m tcp --dport 10000 -j DNAT --to-destination 10.88.0.36:80
-A NETAVARK-DN-1D8721804F16F -p tcp -m tcp --dport 8092 -j DNAT --to-destination 10.88.0.3:8080
-A NETAVARK-DN-1D8721804F16F -p tcp -m tcp --dport 21114 -j DNAT --to-destination 10.88.0.5:21114
-A NETAVARK-DN-1D8721804F16F -d 127.0.0.100/32 -p tcp -m tcp --dport 5270 -j DNAT --to-destination 10.88.0.7:80
-A NETAVARK-DN-1D8721804F16F -p tcp -m tcp --dport 10000 -j DNAT --to-destination 10.88.0.6:80
明显出现了重复的规则……我决定这几条全删掉
然后,恢复了……
总结一下,问题出现在了防火墙上出现了一些冗余的规则,这些规则目前我也不知道怎么来的,可能是我个人操作的原因
我打算这回把所有容器自己定义好子网IP,这样应该不会有类似问题发生?
容器默认网络是10.88.0.0/16网段的,在内网正常应该不会影响才对,
外网访问是通过iptables转发到内网访问到相应的容器,容器只监听端口的情况,应是没绑定外网IP的,访问不了的话,可以先确认下容器的网络情况,可以运行命令,
podman inspect 容器名/或ID
看下容器网络配置,类似
上面容器就10.88.0.18,可以在ssh先ping与curl测试相应内网端口是否正常,
也排查外网监听情况,在面板『网络』可以看得到,
与iptables转发规则,默认是用的NETAVARK,老系统是CNI,
正常这些在容器重新启动时是会自动配置。