对于上下文 - 我正在尝试在气隙环境中部署 OKD,这需要镜像镜像注册表。然后,在安装过程中,网络中的其他机器会从这个私有、安全的注册表中提取。
描述环境 - 运行注册表容器的主机正在运行 Centos 7.6。其他机器都是使用 libvirt 运行 Fedora coreOS 的虚拟机。虚拟机和主机使用使用 libvirt 创建的虚拟网络连接,其中包括虚拟机的 DHCP 设置(通过 virsh net-edit 配置),为它们提供静态 IP。主机还托管 DNS 服务器(绑定),据我所知,它配置正确,因为我可以使用其完全限定的域名从其他机器 ping 每台机器并访问特定端口(例如端口主机上的 apache 服务器监听)。使用 Podman 代替 Docker 进行 OKD 的容器管理,但据我所知,命令完全相同。
我使用以下命令在气隙环境中运行注册表:
sudo podman run --name mirror-registry -p 5000:5000 -v /opt/registry/data:/var/lib/registry:z \
-v /opt/registry/auth:/auth:z -v /opt/registry/certs:/certs:z -e REGISTRY_AUTH=htpasswd \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.pem -e REGISTRY_HTTP_TLS_KEY=/certs/registry-key.pem \
-d docker.io/library/registry:latest
可以使用curl -u username:password https://host-machine.example.local:5000/v2/_catalog
which returns访问它{"repositories":[]}
。我相信这证实了我的 TLS 和授权配置是正确的。但是,如果我将 ca.pem 文件(用于签署注册表使用的 SSL 证书)传输到虚拟网络上的 VM 之一,并尝试使用相同的curl
命令,我会收到错误消息:
connect to 192.168.x.x port 5000 failed: Connection refused
Failed to connect to host-machine.example.local port 5000: Connection refused
Closing connection 0
这对我来说很奇怪,因为过去我已经能够使用这种方法从 VM 与注册表进行通信,但我不确定发生了什么变化。
经过进一步挖掘,似乎端口本身存在某种问题,但我无法确定问题出在哪里。例如,如果我sudo netstat -tulpn | grep LISTEN
在主机上运行,我会收到一条指示 podman (conmon) 正在侦听正确端口的行:
tcp 0 0 0.0.0.0:5000 0.0.0.0:* LISTEN 48337/conmon
但是,如果我测试该端口是否可以从 VM 访问,(nc -zvw5 192.168.x.x 5000
)我会收到类似的错误:Ncat: Connection refused.
如果我在主机上的任何其他侦听端口上使用相同的测试,则表明与这些端口的连接成功。
请注意,我已经完全禁用了 firewalld,据我所知,所有端口都是开放的。
我不确定问题出在我的 DNS 设置、虚拟网络还是注册表本身,我不太确定如何进一步诊断问题。任何见解将不胜感激。
网络定义:
<network connections='6'>
<name>okd</name>
<uuid>2ce10cce-9bb6-4d5d-950f-15427172b196</uuid>
<bridge name='virbr1' stp='on' delay='0'/>
<mac address='52:54:00:d9:d6:95'/>
<domain name='okd'/>
<ip address='192.168.2.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.2.200' end='192.168.2.254'/>
<host mac='52:54:00:45:93:07' name='okd-bootstrap' ip='192.168.2.200'/>
<host mac='52:54:00:f0:0a:1c' name='okd-master1' ip='192.168.2.201'/>
<host mac='52:54:00:d1:29:9e' name='okd-master2' ip='192.168.2.202'/>
<host mac='52:54:00:c9:a4:bb' name='okd-master3' ip='192.168.2.203'/>
<host mac='52:54:00:25:5d:48' name='okd-worker1' ip='192.168.2.204'/>
<host mac='52:54:00:1e:90:3c' name='okd-worker2' ip='192.168.2.205'/>
</dhcp>
</ip>
</network>
“连接被拒绝”是一个方便的提示。iptables 拒绝连接,或者软件配置为将某些 IP 范围列入白名单/黑名单。路径中的某些东西正在积极拒绝连接。如果您收到“请求超时”......这可能是一个更大的问题列表。(路由,数据包被丢弃......等等......)