Files

6.3 KiB
Raw Permalink Blame History

tags, create time
tags create time
wayne
preview
infra
2026-07-04 12:00

Wayne 多集群容器管理平台

概述

Wayne(由 360 开源)是一个基于 Web 的多集群 Kubernetes 容器管理平台,支持通过可视化的方式创建、管理 Deployment 和 Service。xininfra 平台将其作为核心的服务发布入口——开发同学无需直接操作 kubectl,通过 Wayne UI 或 API 即可完成服务部署。

[!info] 背景 Wayne 已大规模服务于 360 搜索内部,稳定管理近千个业务、上万个容器,运行两年以上。命名源于 DC 漫画角色「Bruce Wayne」(蝙蝠侠)。

核心概念

架构概览

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 做了标准化封装,内置了一套模板体系:

# 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 流水线自动化调用:

# 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 和环境范围,避免凭证泄漏导致大面积影响。

延伸阅读