Tsuru 是一个使用 Go 编写、以 Docker 为基础构建私有 PaaS 的开源框架。与直接向开发团队暴露容器和调度基础设施相比,Tsuru 提供了围绕应用、服务和配置组织交付流程的更高层接口。1.30.1 是一次维护版本,其中最值得应用开发者关注的变化,是应用环境变量名称现在可以以下划线开头。
一个小改动解决真实的兼容问题
在 Unix shell、Docker 以及大量语言运行时中,_BOOT_MODE、_JAVA_OPTIONS 这类以下划线开头的环境变量并不罕见。此前,如果平台的变量名校验规则拒绝这类名称,应用即使能在本地容器运行,迁移到 PaaS 后也可能需要改代码或增加启动脚本。
1.30.1 调整了应用环境变量的校验,允许名称以一个下划线开头。这意味着下面这些形式应当属于此次改动覆盖的场景:
_BOOT_MODE=compat
_INTERNAL_ENDPOINT=http://internal-api:8080
_FEATURE_FLAG=true
这里需要注意边界:发布摘要只明确提到“允许以一个下划线开头”,并没有说明其他特殊字符或连续下划线的规则发生变化。升级后仍应使用字母、数字和下划线组成变量名,并避免假设平台会接受连字符、空格等字符。
可以这样验证升级结果
下面示例假设 Tsuru CLI 已配置好目标集群,并且当前账号有权修改 example-app。执行前将应用名替换成实际名称;不同 CLI 版本的参数顺序可能略有差异,可以先运行 tsuru help env-set 核对。
APP_NAME="example-app"
# 设置一个以单下划线开头的应用环境变量
tsuru env-set _BOOT_MODE=compat -a "$APP_NAME"
# 查看平台保存的环境变量
tsuru env-get -a "$APP_NAME"
应用可以用一个很小的 Go 程序验证变量是否进入运行容器。将以下内容保存为 main.go 后直接运行,或者放入现有应用并通过 Tsuru 部署流程发布:
package main
import (
"fmt"
"os"
)
func main() {
value, ok := os.LookupEnv("_BOOT_MODE")
if !ok {
fmt.Println("_BOOT_MODE is not set")
os.Exit(1)
}
fmt.Printf("_BOOT_MODE=%s\n", value)
}
本地验证命令如下:
_BOOT_MODE=compat go run main.go
预期输出为:
_BOOT_MODE=compat
在真实集群中,不要只检查 env-get 的输出。还应触发一次应用重启或重新部署,并通过应用日志确认运行中的进程确实读到了新值:
tsuru app-restart -a "$APP_NAME"
tsuru app-log -a "$APP_NAME" --lines 100
命令名称和选项应以集群安装的 CLI 帮助为准。对于生产应用,建议先在测试应用中完成这套检查。
维护版本不等于可以跳过安全评估
发布摘要还列出了升级到 1.26.5、更新贡献者列表,以及“忽略一些尚未修复的漏洞”等提交,但没有明确指出 1.26.5 对应的具体组件,也没有给出被忽略漏洞的范围。因此,不能仅凭摘要判断这些漏洞是否会影响控制面、构建流程或应用容器。
平台维护者在升级前应当进一步核对完整变更记录、依赖清单和镜像扫描结果。尤其要区分以下几类风险:
- Tsuru 控制面及其 Go 依赖中的漏洞;
- Docker 基础设施或宿主机组件中的漏洞;
- 构建镜像、基础镜像和应用依赖中的漏洞;
- 扫描器报告但当前没有修复版本的漏洞。
“暂时忽略”通常只是扫描或发布流程层面的处理,不代表风险已经消失。团队应记录漏洞编号、受影响组件、可利用条件、补偿措施和复查日期。
可以在升级前后对实际部署镜像执行同一种扫描,以便比较差异。以下以 Trivy 为例,运行前替换镜像地址:
IMAGE="registry.example.com/platform/tsuru:1.30.1"
docker pull "$IMAGE"
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
aquasec/trivy:latest image \
--severity HIGH,CRITICAL \
--ignore-unfixed \
"$IMAGE"
--ignore-unfixed 适合将注意力放在已有修复方案的问题上,但不应成为唯一报告。生产环境还应定期生成一份包含未修复漏洞的完整清单,用于风险跟踪。
升级时重点检查什么
Tsuru 依赖 Go 环境和 libxml,从源码构建或维护自定义镜像的团队,需要确认构建节点上的工具链与依赖仍然匹配。对于已经运行的平台,建议采用小范围验证再逐步扩大的方式:
- 备份平台配置和关键数据,并记录当前服务与应用状态。
- 在预发布环境安装 1.30.1,验证控制面、应用部署和服务绑定。
- 分别测试普通变量名与
_开头的变量名,包括设置、读取、重启和重新部署。 - 检查平台日志、应用日志和容器健康状态,避免只依据 CLI 返回码判断成功。
- 审查被忽略漏洞及
1.26.5升级项对应的真实组件,再决定生产发布窗口。 - 准备与当前部署方式匹配的回滚步骤,并在变更后保留一段重点观察时间。
1.30.1 的应用层变化并不庞大,但环境变量校验位于部署配置的关键路径上。依赖下划线前缀变量的应用可以减少迁移时的特殊处理;平台团队则应把这次升级与依赖核对、镜像扫描和回滚演练放在同一个变更计划中。