日更第28日: 容器安全之Docker守护进程配置TLS身份认证

日更第28日: 容器安全之Docker守护进程配置TLS身份认证,第1张

可以让 Docker 守护进程监听特定的 IP 和端口以及除默认 Unix 套接字以外的任何其他 Unix 套接字。

配置 TLS 身份验证以限制通过 IP 和端口访问 Docker 守护进程。

默认情况下, Docker 守护程序绑定到非联网的 Unix 套接字,并以 root 权限运行。

如果将默认的 Docker 守护程序更改为绑定到 TCP 端口或任何其他 Unix 套接字,那么任何有权访问该端口或套接字的人都可以完全访问 Docker 守护程序,进而可以访问主机系统。

因此,不应该将 Docker 守护程序绑定到另一个 IP /端口或 Unix 套接字。

如果必须通过网络套接字暴露 Docker 守护程序,请为守护程序配置 TLS 身份验证

生产环境下避免开启 tcp 监听,若避免不了,执行以下 *** 作。

192.168.235.128 为当前主机 IP 地址

停服务

编辑配置文件

替换 ExecStart=/usr/bin/dockerd 为以下

重启

默认情况下,当 Docker 守护进程终止时,它将关闭正在运行的容器。您可以配置守护程序,以便容器在守护程序不可用时保持运行。此功能称为live-restore。live-restore选项有助于减少由于守护进程崩溃、计划中断或升级而导致的容器停机时间。

在工作中,假如修改了docker的配置而需要重新加载docker守护进程,导致docker容器重启,业务会中断一会,尤其是在生产环境,存在一定的风险。这种情况下,可以启用live-restore功能,以在守护进程不可用时使容器保持活动状态,有以下两种方法设置。

一、

将配置添加到守护进程配置,即docker-daemon.json,如下

二、

手动启用该过程

docker官方文档建议使用第一种方式

Docker作为目前最火的轻量级容器技术,有很多令人称道的功能,如Docker的镜像管理。然而,Docker同样有着很多不完善的地方,网络方面就是Docker比较薄弱的部分。因此,我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

安装Docker时,它会自动创建三个网络,bridge(创建容器默认连接到此网络)、 none 、host

首先,要实现网络通信,机器需要至少一个网络接口(物理接口或虚拟接口)来收发数据包;此外,如果不同子网之间要进行通信,需要路由机制。

Docker 中的网络接口默认都是虚拟的接口。虚拟接口的优势之一是转发效率较高。 Linux 通过在内核中进行数据复制来实现虚拟接口之间的数据转发,发送接口的发送缓存中的数据包被直接复制到接收接口的接收缓存中。对于本地系统和容器内系统看来就像是一个正常的以太网卡,只是它不需要真正同外部网络设备通信,速度要快很多。

Docker 容器网络就利用了这项技术。它在本地主机和容器内分别创建一个虚拟接口,并让它们彼此连通(这样的一对接口叫做 veth pair)。

创建网络参数

Docker 创建一个容器的时候,会执行如下 *** 作:

完成这些之后,容器就可以使用 eth0 虚拟网卡来连接其他容器和其他网络。

可以在 docker run 的时候通过 --net 参数来指定容器的网络配置,有4个可选值:

当你安装Docker时,它会自动创建三个网络。你可以使用以下docker network ls命令列出这些网络:

Docker内置这三个网络,运行容器时,你可以使用该–network标志来指定容器应连接到哪些网络。

bridge网络代表docker0所有Docker安装中存在的网络。除非你使用该docker run --network=选项指定,否则Docker守护程序默认将容器连接到此网络。

我们在使用docker run创建Docker容器时,可以用 --net 选项指定容器的网络模式,Docker可以有以下4种网络模式:

Docker 容器默认使用 bridge 模式的网络。其特点如下:

Host 模式并没有为容器创建一个隔离的网络环境。而之所以称之为host模式,是因为该模式下的 Docker 容器会和 host 宿主机共享同一个网络 namespace,故 Docker Container可以和宿主机一样,使用宿主机的eth0,实现和外界的通信。换言之,Docker Container的 IP 地址即为宿主机 eth0 的 IP 地址。其特点包括:

Container 网络模式是 Docker 中一种较为特别的网络的模式。处于这个模式下的 Docker 容器会共享其他容器的网络环境,因此,至少这两个容器之间不存在网络隔离,而这两个容器又与宿主机以及除此之外其他的容器存在网络隔离。

网络模式为 none,即不为 Docker 容器构造任何网络环境。一旦Docker 容器采用了none 网络模式,那么容器内部就只能使用loopback网络设备,不会再有其他的网络资源。Docker Container的none网络模式意味着不给该容器创建任何网络环境,容器只能使用127.0.0.1的本机网络。

自定义网络模式,docker提供了三种自定义网络驱动:

bridge驱动类似默认的bridge网络模式,但增加了一些新的功能,overlay和macvlan是用于创建跨主机网络。

建议使用自定义网桥来控制容器之间的相互通讯,还可以自动DNS解析容器名称到ip地址。Docker提供了创建这些网络的默认网络驱动程序,你可以创建一个新的Bridge网络,Overlay或Macvlan网络,你可以创建一个网络插件或远程网络进行完善的自定义和控制。

你可以根据需要创建任意数量的网络,并且可以在任何给定的时间将容器连接到这些网络中的零个或多个网络。此外,您可以连接并断开网络中的容器,而无需重新启动容器,当容器连接到多个网络时,其外部连接通过第一个非内部网络以词法顺序提供。

接下来介绍Docker的内置网络驱动程序。

使用自定义网络启动容器

自定义网络好处:

参考:

https://blog.51cto.com/u_13362895/2130375

https://blog.csdn.net/meltsnow/article/details/94490994

https://blog.csdn.net/weixin_41842682/article/details/90417959


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11772891.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存