--- tags: [wayne, preview, infra] create time: 2026-07-04 12:00 --- # Wayne 多集群容器管理平台 ## 概述 Wayne(由 360 开源)是一个基于 Web 的多集群 Kubernetes 容器管理平台,支持通过可视化的方式创建、管理 Deployment 和 Service。xininfra 平台将其作为核心的**服务发布入口**——开发同学无需直接操作 kubectl,通过 Wayne UI 或 API 即可完成服务部署。 > [!info] 背景 > Wayne 已大规模服务于 360 搜索内部,稳定管理近千个业务、上万个容器,运行两年以上。命名源于 DC 漫画角色「Bruce Wayne」(蝙蝠侠)。 ## 核心概念 ### 架构概览 ```mermaid graph LR subgraph 前端 UI["Web UI / Angular + Ace Editor"] end subgraph 后端 API["API Server / Beego (Go)"] Worker["Worker / 异步任务"] DB[("MySQL - 持久化存储")] end subgraph 底层 K8s1[K8s Cluster A] K8s2[K8s Cluster B] K8N[...] end UI --> API API <--> DB API -->|"Client-Go"| K8s1 API -->|"Client-Go"| K8s2 API -->|"消息队列"| Worker Worker -->|"Audit / Webhook"| K8s1 ``` 核心交互: - **前端**:Angular 框架 + Ace Editor 实现 YAML 模板编辑,提供表单式部署界面 - **后端**:Beego(Go 框架)处理 HTTP API → Client-Go 操作 K8s API,数据持久化到 MySQL - **Worker**:基于消息队列的异步任务组件,负责审计日志、Webhook 通知等 - **数据库**:存储项目/用户/部门权限关系、YAML 模板版本历史、发布记录与审计数据 ### 核心模型 | 模型 | 说明 | |------|------| | **Project** | 项目级分组,相当于 Git Repo 的映射 | | **Cluster** | 注册的 K8s 集群连接信息(kubeconfig) | | **Namespace** | 集群内的逻辑隔离空间 | | **Environment** | 环境(dev / staging / prod),用于区分不同阶段的部署 | | **Deployment** | 应用层面的容器编排配置 | | **Service** | 网络层面的服务暴露配置 | ### Wayne 与 K8s 对象的对应关系 ``` Wayne Deployment YAML ──→ K8s Deployment + ConfigMap + Ingress Wayne Service YAML ──→ K8s Service ``` Wayne 对这两种资源的 YAML 做了**标准化封装**,内置了一套模板体系: ```yaml # Wayne 中的 Deployment 模板骨架 apiVersion: apps/v1 kind: Deployment metadata: name: {{ .Release.Name }} spec: replicas: {{ .Env.Replicas | default 2 }} template: spec: containers: - name: {{ .ContainerName }} image: {{ .Image.Repository }}:{{ .Image.Tag }} ports: - containerPort: {{ .Container.Ports }} ``` ### Wayne 核心能力 | 能力 | 说明 | 对你的意义 | |------|------|-----------| | **RBAC 权限管理** | 用户通过角色关联部门与项目,部门角色 vs 项目角色分离 | 多租户场景下按团队划分资源边界 | | **简化 K8s 对象创建** | 基础模式(表单+模板)+ 高级模式(直接编辑 JSON/YAML) | 降低业务接入成本,无需记忆 kubectl 命令 | | **多集群管理** | 统一入口管理多个 K8s 集群,可针对集群定制配置 | xininfra 跨机房、跨集群部署的基础 | | **完整审计模块** | 每次操作留痕,支持自定义 Webhook 回调 | 故障追溯、合规检查的关键支撑 | | **发布历史与回滚** | 保存所有版本发布记录,一键回滚或基于旧版更新 | 生产安全的底线保障 | | **Web Shell** | 基于严格权限校验的 Pod 远程终端 | 排查线上问题的快捷通道 | | **资源报表** | 各项目资源使用占比、上线频次等图表 | 容量规划与成本分摊依据 | | **站内通知系统** | 管理员推送集群公告、故障报告等 | 信息同步通道 | | **APIKey 开放接口** | 用户可自助申请 APIKey 管理自己的部门/项目,运维可获取全局 APIKey 进行批量操作 | CI/CD 自动化的基础凭证 | ### 认证登录模式 Wayne 支持三种认证方式,适应不同企业的集成需求: | 模式 | 适用场景 | |------|---------| | **DB 内置** | 独立运行,不依赖外部认证服务 | | **LDAP** | 与企业组织架构打通,同步部门用户 | | **OAuth 2.0** | 对接已有 SSO / Identity Provider | > [!warning] 实习环境 > xininfra 目前使用 DB 模式 + LDAP 混合架构。开发同学通过 LDAP 账号登录 Wayne,但权限分配由 xininfra 侧统一管控。 ### API 对接思路 Wayne 提供 RESTful API,适合 CI/CD 流水线自动化调用: ```bash # 1. 登录获取 token curl -X POST http://wayne-host/api/user/token/ \ -H "Content-Type: application/json" \ -d '{"username": "admin", "password": "wayne"}' # 2. 基于模板创建 Deployment(GitLab CI 场景) curl -X POST http://wayne-host/api/project/{project-id}/environment/{env-id}/deployment/template/ \ -H "Authorization: Bearer {token}" \ -H "Content-Type: application/json" \ -d '{"templateName": "my-service", ...}' ``` > [!tip] GitLab CI 对接 Wayne 的设计方向 > 实习目标是开发 GitLab CI 自动触发 Wayne API 创建 Deployment 和 Service,流程大致为: > `CI 编译 → 镜像推送到 Registry → CI 调 Wayne API 传入镜像 tag → Wayne 执行部署` ## 常见陷阱与最佳实践 ### 1. 权限模型要提前规划 Wayne 的 Project → Environment → Namespace 三级结构容易与实际的 K8s 权限边界不对齐。**建议**:每个业务团队一个 Project,按环境划分 Environment,避免多人混用同一命名空间。 ### 2. YAML 模板版本管理 Wayne 允许保存多个 Deployment Template 版本。生产环境的模板应该锁定版本并纳入代码仓库,避免「今天能跑明天不行」的问题。 ### 3. APIKey 权限边界要明确 运维人员的全局 APIKey 拥有所有集群和资源的操作权限。**原则**:给 CI/CD 流水线分配最小必要范围的 APIKey,限制其可操作的 Project 和环境范围,避免凭证泄漏导致大面积影响。 ## 延伸阅读 - [[technical/xinfra-preview/k8s-rke2-fundamentals]] — Wayne 上层的 K8s 对象知识基础 - [[technical/xinfra-preview/cloud-dm-overview]] — Wayne 部署的服务通常依赖 CloudDM 管理的 MySQL - [[technical/xinfra-preview/cachecloud-overview]] — Wayne 部署的服务可能使用 CacheCloud 管理的 Redis - https://github.com/Qihoo360/wayne — Wayne GitHub 仓库