防火墙与安全
不需要为 Zenavo 开放任何端口
初始化完成后,Zenavo 不会再主动连入你的服务器。初始化安装的 Zenavo agent 运行在服务器上,通过 HTTPS(443 端口)向外连接控制面,Zenavo 通过这条连接下发部署、读取日志和打开终端。因此:
- Kubernetes API(6443):对公网关闭。只有服务器内部的 agent 会用到它。
- SSH(22):只在初始化期间由 Zenavo 控制面使用。之后只允许你管理服务器的地址访问,或者直接关闭。
80、443 以及(如果你发布了端口)30000–32767 需要对所有人开放。服务器的 防火墙 标签页会从控制面检查这些端口。服务器必须能通过 HTTPS 访问控制台的地址。
Agent 能做什么
Agent 使用自己的 Kubernetes 服务账号,权限仅限 Zenavo 所需:
- 它只管理项目命名空间(
zv-…)。每个命名空间都强制执行 Kubernetes Pod 安全标准的 baseline 级别,所以任何工作负载都不能以特权模式运行、使用主机网络或挂载主机目录。 - 它不能读取项目命名空间以外的 Secret 或在其中执行命令,不能修改自己的权限,也不能改动 K3s 的系统组件(可以读取它们的状态)。
- 这些限制由 Kubernetes 准入策略强制执行,agent 无法移除它。
Agent 的容器以非 root 用户运行,文件系统只读。它以只读方式挂载一个主机目录,用于报告 /var/lib/rancher/k3s 的磁盘用量。
Zenavo 存储什么
- Agent 令牌的哈希值。令牌本身只存在于你的服务器上。
- 一个镜像仓库拉取凭据,只能读取你团队的镜像。
对于正常运行的服务器,Zenavo 不保存任何 SSH 密钥、密码或集群凭据。你输入的 SSH 密码或密钥由初始化任务使用,初始化成功后立即清除。如果初始化失败,会加密保留一天,方便你不用重新输入就能重试,之后再清除。初始化不会向 ~/.ssh/authorized_keys 添加任何内容。
移除服务器时,Zenavo 会删除它的 agent 令牌,agent 将无法再连接。K3s、agent 和你的数据仍留在机器上:如果不再需要,在服务器上运行 /usr/local/bin/k3s-uninstall.sh。
在 agent 之前添加的服务器
在 agent 出现之前添加的服务器,是通过 Zenavo 安装的密钥用 SSH 访问,并用 K3s 的管理员凭据通过 Kubernetes API 访问的。Zenavo 会自动把它们迁移到 agent:安装 agent,从 ~/.ssh/authorized_keys 中移除 Zenavo 的密钥,并删除保存的密钥和凭据。设置 → 连接方式 显示迁移状态,也可以立即开始迁移。如果你当初粘贴的是自己的私钥,不再使用的话请自行从服务器上移除。之后还可以用 k3s certificate rotate 轮换 K3s 的证书(会重启 K3s),让 Zenavo 曾经持有的管理员凭据失效。
构建从不在你的服务器上运行
Git 构建在 Zenavo 的构建机上运行,构建机无法访问控制面、其他客户或云凭据。你的服务器只拉取构建好的镜像,并固定到 digest。