互联网技术 / 互联网资讯 · 2023年11月12日 0

Docker守护进程的注册表安全问题解析

在Docker中,私有注册表的安全性存在争议。在接下来的部分中,我们将以MyRegistry:5000作为私有注册表的示例进行讨论。

一个安全的注册表会使用TLS协议,并且其CA证书的副本应存放在Docker主机上,路径为/etc/docker/certs.d/MyRegistry:5000/ca.crt。不安全的注册表可能未使用TLS(即以纯文本HTTP进行通信),或者虽然使用了TLS,但Docker守护进程无法识别其CA证书。当在路径/etc/docker/certs.d/MyRegistry:5000/下找不到证书,或者证书验证失败(例如, CA错误)时,后者的情况会发生。

默认情况下,Docker会假设所有注册表都是安全的。如果Docker认为一个注册表是安全的,则无法与不安全的注册表进行通信。要与不安全的注册表进行交互,Docker守护进程需要使用–insecure-registry选项,格式如下:

–insecure-registry MyRegistry:5000 表示Docker守护进程将MyRegistry:5000视为不安全的注册表。

–insecure-registry 10.1.0.0/16 则表示Docker守护进程将属于CIDR语法描述的子网中,域解析为IP地址的所有注册表视为不安全。

该标志可以多次使用,以允许将多个注册表标记为不安全。

如果不安全的注册表未被标记,执行docker pull、docker push和docker search命令时将出现错误消息,提示用户需要提供安全选项或通过–insecure-registry标志进行设置。

自Docker 1.3.2起,IP地址在127.0.0.0/8范围内的本地注册表会被自动标记为不安全。然而,不建议依赖此方式,因为未来可能会有所更改。

在运行本地注册表时,启用–insecure-registry选项(允许未加密和/或不受信任的通信)可能会有用。但由于这会引发安全漏洞,建议仅在测试环境中使用。为了增强安全性,用户应将CA证书添加到系统的受信任CA列表中,而不是启用–insecure-registry。

旧版注册表

不再支持与仅支持旧版v1协议的注册表进行操作。具体来说,守护进程不会尝试对V1注册表执行push、pull或login。唯一的例外是,可以在v1注册中心上执行搜索操作。

[[[IMG_1]]]
[[[IMG_2]]]
[[[IMG_3]]]