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。
- Environments -> Add Environment -> Docker Standalone -> Agent。
- 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)。 |
六、 安全防线
- 第一道防线: 云安全组/防火墙关闭 9000、9001 端口。
- 第二道防线: Docker 绑定
127.0.0.1进一步限制访问源。 - 第三道防线: 必须拥有 SSH 密钥/密码才能建立隧道,进入管理后台。
这套方案让你既享受了可视化管理的便利,又不用担心后台被黑客扫描和暴力破解。
浙公网安备 33010602011771号