searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

通过配置iptables实现推送镜像到harbor的方法

2024-06-13 02:45:28
17
0

背景介绍

镜像仓库Harbor

Harbor 是一个开源的镜像仓库软件,通过策略和基于角色的访问控制来保护制品,确保镜像经过扫描并免受漏洞影响,并将镜像标记为可信。作为 CNCF 毕业项目,Harbor 可以帮助用户在诸如 Kubernetes 和 Docker 之类的云原生计算平台上持续且安全地管理制品。

iptables

iptables 是一个在 Linux 系统中用于配置和管理网络防火墙规则的命令行工具。它是 netfilter 项目的一部分,netfilter 是Linux内核中实现网络包过滤、网络地址转换(NAT)和包处理功能的框架。iptables 允许用户通过设置规则来定义数据包(如网络请求)应该如何被内核处理,比如允许、拒绝或修改数据包。

主要功能:

  1. 数据包过滤​:根据源IP、目的IP、端口号、协议类型等条件对进出系统的数据包进行过滤。
  2. ​**网络地址转换(NAT)**​:可以用来做源NAT(SNAT)或目标NAT(DNAT),用于隐藏内部网络结构或者使多个设备共享一个公网IP地址。
  3. 端口转发​:通过DNAT功能,可以将外部对某一公共IP和端口的访问转发到内网中的某台主机上。
  4. 状态检查​:iptables支持状态检测技术,能够跟踪连接的状态,以便对属于已建立连接的数据包给予放行,提高效率和安全性。

规则结构:

iptables 的规则由几部分组成:链(chains)、表(tables)、规则(rules)和目标(targets)。

  • ​(chains)是预定义的处理数据包的点,如INPUT(处理进入系统的数据包)、OUTPUT(处理本地生成要输出的数据包)和FORWARD(处理转发的数据包)等。
  • ​(tables)包含规则集合,主要的表有filter(用于过滤)、nat(用于网络地址转换)和mangle(用于修改数据包)等。
  • 规则​(rules)定义了对匹配特定条件的数据包执行的操作,比如允许或拒绝。
  • 目标​(targets)是规则指定的动作,如ACCEPT(允许数据包通过)、DROP(丢弃数据包)或REDIRECT(重定向数据包)等。

问题

当部署Harbor时,在配置文件中会配置Harbor的真实地址,这里称为A地址,同时这个地址通常也是push镜像时的地址,有时需要通过公网访问Harbor或者通过Nginx转发后访问Harbor,那么这个地址才是真正在客户端推送镜像的地址,这里称为B地址。如果在客户端配置B地址,执行docker login命令时,会报如下错误:

Error response from daemon: Get 地址A/v2/: Get 地址B/service/token?account=harbor_admin&client_id=docker&offline_token=true&service=harbor-registry: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers) (Client.Timeout exceeded while awaiting headers)

那么如何解决该问题呢?

解决办法

通过配置iptables的nat表,可以实现推送habror镜像的目标。

执行如下命令:

//配置iptables规则
sudo iptables -t nat -A OUTPUT -d 地址A的ip -p tcp --dport 地址A的端口 -j DNAT --to-destination 地址B的ip和端口

//查看nat规则是否配置成功
sudo iptables -t nat -L -n --line-numbers

配置好iptables后,再次执行docker login命令时,便直接显示登录成功了,随后就可以docker push镜像了。

0条评论
0 / 1000