0%

容器技术

Docker 基础知识

Docker 是什么

Docker 是一个容器化平台,可以将应用程序及其依赖打包在一个“容器”里运行。

  • Docker 容器就像把软件 + 系统依赖 + 配置文件都装进一个“快递箱子”里,无论在哪台机器上运行都是一样的结果

Docker 容器 vs 虚拟机

项目 容器(Docker) 虚拟机(VM)
启动速度 秒级 分钟级
占用资源 少,只共享操作系统内核 多,需要完整操作系统
隔离性 中,基于 Linux Namespace(命名空间)/Cgroups(控制组) 强,硬件级隔离

Docker 的核心组件

Docker采用客户端-服务器(C/S)架构,主要由以下核心组件构成:

  1. Docker守护进程(Daemon):运行在后台的服务,负责管理容器的生命周期(创建、运行、停止等)
  2. Docker客户端(Client):用户与Docker交互的接口,通过命令行或REST API与守护进程通信
  3. Docker镜像(Images):容器的静态模板,包含运行应用所需的所有文件和配置,采用分层存储结构
  4. Docker容器(Container):镜像的运行实例,是轻量级、可移植的应用封装
  5. Docker仓库(Registry):集中存储和管理镜像的服务,如公共的Docker Hub或企业私有仓库

工作流程:用户通过Docker客户端发送命令→Docker守护进程接收并执行命令→从仓库拉取镜像或构建新镜像→基于镜像创建并运行容器。

Docker 安全相关

容器逃逸

容器本应是隔离的,但如果配置不当,攻击者可能从容器跳出来控制主机。

常见方式:

  • 危险配置:容器以特权模式 --privileged 启动(几乎等于 root 权限)

  • 危险挂载:主机目录(如根目录 / )挂载到容器,例如:

    1
    2
    docker run -v /:/host -it ubuntu
    chroot /host bash # 控制宿主机
  • 相关程序漏洞:参与到容器生态中的服务端、客户端程序自身存在的漏洞

  • 内核漏洞利用:从用户空间非法进入内核空间,在内核空间赋予当前或其他进程高权限后回到用户空间

镜像安全

  • 镜像来源:要确保从可信的仓库拉取镜像,避免使用未知或不可信的镜像,因为恶意镜像可能包含后门或恶意软件
  • 镜像漏洞:定期使用镜像扫描工具(如 Trivy 等)检测镜像中的漏洞,及时更新镜像版本以修复漏洞
  • 镜像构建安全:在编写 Dockerfile 时,避免安装不必要的软件包,减少潜在的攻击面

容器安全配置

  • 权限管理:避免在容器中以 root 用户运行应用,尽量使用非 root 用户,降低容器被攻破后攻击者获取的权限
  • 资源限制:合理设置 cgroups 参数,限制容器的 CPU、内存等资源使用,防止容器被利用进行资源耗尽攻击
  • 网络隔离:利用 Docker 的网络隔离特性,确保容器之间的网络通信安全,只开放必要的端口

Docker API 暴露

默认 Docker 只监听本地 Unix socket,但很多开发人员会开启:

1
tcp://0.0.0.0:2375

这可能导致未经认证的远程控制容器

Kubernetes 基础知识

Kubernetes 是什么

Kubernetes(K8s)是一个容器编排平台,负责管理大量容器的生命周期。

  • Docker 是造轮子的工厂。
  • Kubernetes 是“自动驾驶系统”,能安排每个轮子该去哪、什么时候滚、坏了自动换备胎。

功能

  1. 智能调度
    • 指定部署区域:Kubernetes会根据资源需求和节点特性(如是否有GPU)选择最优节点
    • 指定副本数:声明需要运行的Pod数量,Kubernetes会自动维持这个数量
    • 资源分配:可以精确指定每个容器需要的CPU和内存
  2. 自动恢复
    • 健康检查:定期检测容器是否健康,不健康的容器会被自动重启或替换
    • 节点故障处理:当节点失效时,其上的Pod会被重新调度到健康节点
  3. 滚动更新与回滚
    • 逐步替换旧版本Pod,确保服务不中断
    • 出现问题时可一键回滚到之前的稳定版本
  4. 水平自动扩缩容(HPA)
    • 根据CPU利用率、内存使用量或自定义指标自动增加或减少Pod数量
    • 电商大促时,订单服务可以从10个Pod自动扩容到100个应对流量高峰

核心概念

概念 解释
Pod K8s 的最小调度单位,封装一个或多个容器
Node 承载 Pod 的工作节点
Deployment 管理多个 Pod 副本,支持自动滚动升级
Service 暴露 Pod 的访问入口(如负载均衡)
ConfigMap/Secret 存储配置信息或敏感数据(如数据库密码)
Ingress 路由规则入口,控制外部流量如何进入服务

Kubernetes 安全相关

API Server 暴露

  • K8s 的核心是 API Server,所有管理操作都要通过它。
  • 若 API Server 未加 RBAC(访问控制),攻击者可能用 kubectl 操作集群。

RBAC 配置不当

RBAC = Role-Based Access Control

  • 权限过大:某个账号被赋予 cluster-admin 权限(最高权限)

  • 常考命令:

    1
    2
    kubectl get clusterrolebindings
    kubectl auth can-i create pods --as system:anonymous

3. 容器逃逸场景

  • Pod 中容器使用 hostPID: truehostNetwork: true,可以访问宿主机进程

  • 使用 hostPath 映射敏感文件,比如:

    1
    2
    3
    4
    5
    6
    7
    volumeMounts:
    - mountPath: /host
    name: host-volume
    volumes:
    - name: host-volume
    hostPath:
    path: /

4. Dashboard 未授权访问

K8s 的 Web 控制台曾被发现默认无需登录,攻击者可直接创建 Pod、注入恶意镜像。

常见面试题

面试题 简答思路
Docker 容器和虚拟机有什么区别? 资源消耗、隔离方式、启动速度不同
如何防止容器逃逸? 禁止 privileged、合理配置 seccomp/apparmor
怎么扫描镜像安全问题? 使用 trivy、clair、anchore 等工具
Kubernetes 中如何进行权限控制? 使用 RBAC,避免默认 cluster-admin
Kubernetes 中如何配置敏感信息? 使用 Secret,并控制访问权限
如何判断某个 Pod 是否能访问主机资源? 查看 YAML 是否设置了 hostNetwork、hostPID、hostPath 等