Portainer 安全集群配置指南

Portainer 安全集群配置指南 (非公网版)

一、 核心架构:零公网暴露

通过 SSH 隧道,我们将 Portainer 锁在内网,只在需要管理时才临时“拉”到本地。

  • 主控端 (Server): 仅对内网开放 9000 端口,对外关闭 9000/9443。
  • 被控端 (Agent): 仅对主控端内网 IP 开放 9001 端口。
  • 管理入口: 通过 SSH 22 端口建立隧道。

二、 部署实战

1. 被控端 (Agent) —— 保持内网监听

在所有需要管理的服务器上部署 Agent。

docker run -d \
  -p 127.0.0.1:9001:9001 \
  --name portainer_agent \
  --restart=always \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /var/lib/docker/volumes:/var/lib/docker/volumes \
  portainer/agent:latest

安全点: -p 127.0.0.1:9001:9001 限制了只有本机或内网隧道能访问该端口,公网扫描不到。

2. 主控端 (Server) —— 核心枢纽

在主服务器上部署 Server,同样建议仅监听内网或本地回环。

docker run -d \
  -p 127.0.0.1:9000:9000 \
  --name portainer_server \
  --restart=always \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v portainer_data:/data \
  portainer/portainer-ce:latest

三、 安全访问控制:SSH 隧道

由于 Server 的 9000 端口没有对外开放,你需要在本地电脑通过 SSH 隧道进行访问。

1. 建立隧道 (命令行)

在你的本地终端(Windows CMD/PowerShell 或 Mac 终端)执行:

ssh -L 9000:127.0.0.1:9000 root@你的服务器公网IP -p 你的SSH端口
  • -L 9000:127.0.0.1:9000:将远程服务器的 9000 端口映射到本地 9000。
  • 保持这个窗口不要关。

2. 浏览器登录

在本地浏览器输入:
http://localhost:9000


四、 跨机器集成 (内网纳管)

进入面板后,添加其他 Agent 机器时,严禁填写公网 IP

  1. Environments -> Add Environment -> Docker Standalone -> Agent
  2. Environment address:填写该机器的内网私有 IP:9001 (例如 172.16.0.10:9001)。

五、 常见故障与维护方案

现象 原因 解决方法
Connection Refused SSH 隧道没建好或端口填错 检查 ssh -L 命令是否在运行,确保端口一致。
Agent Paired Error Agent 已被旧 Server 锁定 在被控端执行 docker restart portainer_agent
Get...Timeout 环境地址填了公网 IP 且防火墙没开 改回内网 IP。确保主控端能 ping 通被控端的内网 IP。
Docker Command Not Found 连错了服务器 检查 SSH 登录的主机名 (Hostname)。

六、 安全防线

  1. 第一道防线: 云安全组/防火墙关闭 9000、9001 端口。
  2. 第二道防线: Docker 绑定 127.0.0.1 进一步限制访问源。
  3. 第三道防线: 必须拥有 SSH 密钥/密码才能建立隧道,进入管理后台。

这套方案让你既享受了可视化管理的便利,又不用担心后台被黑客扫描和暴力破解。

posted on 2026-04-13 23:00  滚动的蛋  阅读(65)  评论(0)    收藏  举报

导航