Kubernetes安全加固实战
2026/5/11 2:57:31
Docker Swarm 是 Docker 原生的容器编排工具,可以将多个 Docker 主机组成一个集群,统一管理和调度容器服务。
┌─────────────────────────────────────────────────────────────┐ │ Docker Swarm 架构 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────────┐ │ │ │ Manager │ │ │ │ (Leader) │ │ │ └──────┬──────┘ │ │ │ │ │ ┌─────────────────┼─────────────────┐ │ │ │ │ │ │ │ ▼ ▼ ▼ │ │ ┌───────────┐ ┌───────────┐ ┌───────────┐ │ │ │ Manager │ │ Worker │ │ Worker │ │ │ │ (Follower)│ │ │ │ │ │ │ └───────────┘ └───────────┘ └───────────┘ │ │ │ │ 角色说明: │ │ - Manager(管理节点):集群管理、调度决策 │ │ - Worker(工作节点):运行容器 │ │ - Leader(领导节点):Manager 中的单领导者 │ │ │ └─────────────────────────────────────────────────────────────┘| 概念 | 说明 |
|---|---|
| Node | Swarm 集群中的节点 |
| Service | 定义容器运行方式(镜像、端口、副本数) |
| Task | 服务的运行实例(容器) |
| Stack | 一组相关服务的组合(类似 Compose) |
# 初始化 Swarm(当前节点成为 Manager)dockerswarm init --advertise-addr192.168.1.10# 输出示例# Swarm initialized: current node (node1) is now a manager.# To add a worker to this swarm, run the following command:# docker swarm join --token SWMTKN-1-xxx 192.168.1.10:2377# To add a manager to this swarm, run 'docker swarm join-token manager' and follow the output.# 指定网卡dockerswarm init --advertise-addr eth0# 指定监听端口(默认 2377)dockerswarm init --advertise-addr192.168.1.10:2377 --listen-addr0.0.0.0:2377# 查看节点信息dockernodels# 查看 Swarm 信息dockerinfo|grep-A10Swarm# 查看 Swarm 状态dockersystem info|grepSwarm# 查看当前节点角色dockernodeinspect self--format'{{.Spec.Role}}'# 在 Worker 节点执行(从 Manager 获取的 token)dockerswarmjoin--tokenSWMTKN-1-xxx192.168.1.10:2377# 手动获取 Worker token(在 Manager 上)dockerswarm join-token worker# 验证节点已加入(在 Manager 上)dockernodels# 获取 Manager token(在现有 Manager 上)dockerswarm join-token manager# 在新节点执行dockerswarmjoin--tokenSWMTKN-2-xxx192.168.1.10:2377# 列出所有节点dockernodels# 查看节点详情dockernodeinspect node1# 查看节点任务dockernodepsnode1# 更新节点状态(设置为停用)dockernodeupdate--availabilitydrain node1# 更新节点状态(设置为激活)dockernodeupdate--availabilityactive node1# 更换节点角色(Worker → Manager)dockernodepromote node2# 更换节点角色(Manager → Worker)dockernodedemote node2# 删除节点dockernodermnode2# 添加标签dockernodeupdate --label-addenv=production node1dockernodeupdate --label-addstorage=ssd node2# 查看标签dockernodeinspect node1--format'{{.Spec.Labels}}'# 删除标签dockernodeupdate --label-rmenvnode1# 创建简单服务dockerservicecreate--nameweb--replicas3nginx# 创建服务并映射端口dockerservicecreate--nameweb\--publish8080:80\--replicas3\nginx# 创建服务并指定网络dockernetwork create--driveroverlay app-netdockerservicecreate--nameweb\--networkapp-net\--publish80:80\--replicas3\nginx# 创建服务并指定资源限制dockerservicecreate--nameapp\--limit-cpu0.5\--limit-memory 512M\--replicas3\myapp:latest# 列出服务dockerservicels# 查看服务详情dockerserviceinspect web# 查看服务任务(容器)dockerservicepsweb# 查看服务日志dockerservicelogs webdockerservicelogs-fwebdockerservicelogs--tail50web# 扩容到 5 个副本dockerservicescaleweb=5# 使用 update 命令dockerserviceupdate--replicas5web# 查看扩缩容结果dockerservicepsweb# 更新镜像dockerserviceupdate--imagenginx:alpine web# 更新端口配置dockerserviceupdate --publish-add8080:80 webdockerserviceupdate --publish-rm8080:80 web# 更新环境变量dockerserviceupdate --env-addNODE_ENV=production webdockerserviceupdate --env-rm NODE_ENV web# 更新资源限制dockerserviceupdate --limit-cpu1webdockerserviceupdate --limit-memory 1G web# 更新重启策略dockerserviceupdate --restart-condition on-failure webdockerserviceupdate --restart-delay 10s web# 删除服务dockerservicermweb# 强制删除dockerservicerm--forceweb# 创建带更新配置的服务docker service create \--name app \--replicas 5 \--update-parallelism 2 \--update-delay 10s \--update-failure-action pause \--update-monitor 30s \--update-order start-first \ myapp:1.0# 更新镜像(触发滚动更新)docker service update--image myapp:2.0 app# 查看更新状态docker service ps app--filter "desired-state=running"# 创建 Overlay 网络dockernetwork create--driveroverlay--attachablemy-overlay# 创建服务并使用 Overlay 网络dockerservicecreate--nameweb--networkmy-overlay nginx# 查看 Overlay 网络dockernetwork inspect my-overlay# 服务之间通过服务名通信# 创建两个服务dockerservicecreate--nameapi--networkmy-overlay myapidockerservicecreate--nameweb--networkmy-overlay nginx# web 服务可以通过 api 访问 api 服务# DNS 自动解析服务名到 VIP 或 IP 列表# Swarm 提供内置负载均衡# 创建服务dockerservicecreate\--nameweb\--publish8080:80\--replicas3\nginx# 请求会通过 Routing Mesh 分发到各副本# 访问任意节点的 8080 端口都会路由到服务实例# 查看服务 VIPdockerserviceinspect web--format'{{.Endpoint.VirtualIPs}}'| 命令 | 说明 |
|---|---|
docker swarm init | 初始化集群 |
docker swarm join | 加入集群 |
docker swarm leave | 离开集群 |
docker node ls | 列出节点 |
docker service create | 创建服务 |
docker service ls | 列出服务 |
docker service ps | 查看服务任务 |
docker service scale | 扩缩容 |
docker service update | 更新服务 |
docker service rm | 删除服务 |
docker service logs | 查看日志 |
# 查看 Swarm 状态dockerinfo|grep-A10Swarm# 查看 Manager 日志journalctl-udocker.service|grep"swarm"# 检查节点状态dockernodeinspect self# 离开集群(Worker)dockerswarm leave# 离开集群(Manager,强制)dockerswarm leave--force# 重新加入# 需要先离开,然后重新 join有多个 Manager 节点时自动选举,单节点需要恢复。
备份/var/lib/docker/swarm目录。
检查节点资源、标签约束、节点状态。