Ceph cephadm OAuth2 Proxy 服务部署实战:基于 OIDC 的统一认证网关与 SSO 接入指南
Ceph cephadm OAuth2 Proxy 服务部署实战基于 OIDC 的统一认证网关与 SSO 接入指南【免费下载链接】cephCeph is a distributed object, block, and file storage platform项目地址: https://gitcode.com/gh_mirrors/ce/ceph导读本文围绕 Ceph 官方文档 oauth2-proxy.rst 展开系统讲解自 Tentacle 版本起引入的oauth2-proxy服务它作为认证网关与外部身份提供商IDP通过 OIDCOpenID Connect协议对接为 Ceph Dashboard、监控栈等 Ceph 应用提供统一的登录认证与单点登录SSO能力。读完本文你将掌握oauth2-proxy服务的部署命令、完整的 YAML 服务规范Service Specification、各字段的含义与校验规则以及它与mgmt-gateway协同实现高可用和自动化的底层原理。oauth2-proxy 服务概述从 Ceph Tentacle 版本开始cephadm 引入了oauth2-proxy服务为 Ceph 应用提供一种更高级的认证与访问控制方式。该服务基于开源的oauth2-proxy项目与外部身份提供商Identity Providers, IDPs集成通过 OIDC 协议提供安全、灵活的认证能力。在整体架构中oauth2-proxy扮演认证网关authentication gateway的角色它拦截对 Ceph 应用的访问请求将未认证用户重定向到 IDP 完成登录登录成功后管理会话令牌再将用户带回目标应用。这样一来包括Ceph Dashboard 与监控栈Prometheus、Alertmanager、Grafana在内的所有 Ceph 应用的访问都受到严格管控。部署命令非常简单ceph orch apply oauth2-proxy [--placement ...] ...一旦应用该服务cephadm 会自动重新配置相关组件使其改用oauth2-proxy进行认证从而保护所有 Ceph 应用的访问。服务会处理登录流程、将用户重定向到合适的 IDP 进行认证并管理会话令牌以提供流畅的用户访问体验。核心价值安全、SSO 与集中式认证原文档总结了该服务的三大收益增强的安全性Enhanced Security通过与外部 IDP 集成、基于 OIDC 协议提供健壮的认证能力无缝 SSOSeamless SSO在全部 Ceph 应用间实现单点登录改善用户访问控制体验集中式认证Centralized Authentication将认证管理集中化降低复杂度、提升访问管控力。从安全增强角度看oauth2-proxy服务确保所有对 Ceph 应用的访问都经过认证阻止未授权用户接触敏感信息。由于复用了oauth2-proxy开源项目的能力该服务可以轻松对接多种外部 IDPOIDC/OAuth2 提供商提供安全而灵活的认证机制。在实现上服务内部将 IDP 配置为provider oidc并通过oidc_issuer_url指向发行方Issuer端点由 IDP 负责签发和校验 JWT 令牌详见下文源码剖析。高可用架构与 mgmt-gateway 协同oauth2-proxy通常与mgmt-gateway服务配合使用oauth2-proxy可以部署为多个无状态实例stateless instancesmgmt-gateway基于 NGINX 的反向代理负责在这些实例之间以round-robin轮询策略做负载均衡由于oauth2-proxy对接的是外部 IDP登录环节的高可用由外部 IDP 保障不属于该服务的职责范围。这一设计在源码中有清晰印证mgmt-gateway 的 nginx.conf.j2 模板会根据oauth2_proxy_endpoints动态生成upstream oauth2_proxy_servers服务器组external_server.conf.j2 则把/oauth2/路径代理到该 upstream并对受保护资源执行auth_request /oauth2/auth、error_page 401 /oauth2/sign_in即把未认证请求转交给 oauth2-proxy 触发登录流程。部署后的访问流程完成oauth2-proxy部署后对 Ceph 应用的访问都将要求通过已配置的 IDP 完成认证用户访问受保护的 Ceph 应用如 Dashboard请求被重定向至 IDP 登录页用户登录成功后被引导返回最初请求的应用oauth2-proxy校验令牌、建立会话后续请求通过会话 Cookie 放行。这套流程与 Ceph 管理栈无缝集成既保证了安全访问也统一了登录体验。Service Specification完整服务规范前置条件先启用带认证的 mgmt-gateway部署oauth2-proxy之前请务必先部署mgmt-gateway服务并打开--enable_auth标志ceph orch apply mgmt-gateway --enable_authtruemgmt-gateway是 Ceph 应用Dashboard 与监控栈的单一前端入口其完整部署细节可参考 mgmt-gateway.rst。只有先启用认证的网关oauth2-proxy才能作为其后端认证组件被正确代理与编排。YAML 规范示例oauth2-proxy服务可以通过一份 YAML 规范specification来定义完整示例继承自原文档service_type: oauth2-proxy service_id: auth-proxy placement: label: mgmt spec: https_address: 0.0.0.0:4180 provider_display_name: My OIDC Provider client_id: your-client-id oidc_issuer_url: http://192.168.100.1:5556/dex client_secret: your-client-secret cookie_secret: your-cookie-secret ssl_certificate: | -----BEGIN CERTIFICATE----- MIIDtTCCAp2gAwIBAgIYMC4xNzc1NDQxNjEzMzc2MjMyXzxvQ7EcMA0GCSqGSIb3 DQEBCwUAMG0xCzAJBgNVBAYTAlVTMQ0wCwYDVQQIDARVdGFoMRcwFQYDVQQHDA5T [...] -----END CERTIFICATE----- ssl_certificate_key: | -----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC5jdYbjtNTAKW4 /CwQr/7wOiLGzVxChn3mmCIF3DwbL/qvTFTX2d8bDf6LjGwLYloXHscRfxszX/4h [...] -----END PRIVATE KEY-----通过如下命令应用该规范ceph orch apply -i oauth2-proxy.yaml规范一旦可用cephadm 会自动重新部署mgmt-gateway服务并调整其配置把认证请求重定向到新部署的oauth2-proxy服务上。spec 字段详解OAuth2ProxySpecoauth2-proxy服务规范的类型定义位于源码 service_spec.py 中的OAuth2ProxySpec。各字段含义、默认值及校验规则如下字段必填含义与默认值https_address否HTTPS 监听地址格式为host:port默认0.0.0.0:4180。校验要求包含合法主机名/IP 与 0~65535 端口provider_display_name是在 UI 中展示的身份提供商名称client_id是与 IDP 认证使用的客户端 IDclient_secret是与 IDP 认证使用的客户端密钥oidc_issuer_url是OIDC Issuer 的 URL必须是含 scheme 与 netloc 的合法 URLredirect_url否登录成功后的重定向地址未配置时 cephadm 自动计算为mgmt-gateway 外部端点/oauth2/callbackscope否OAuth scope 列表未配置时使用默认 scopecookie_secret否用于签名/加密 Cookie 的密钥长度必须是16、24 或 32 字节用于创建 AES 密码未配置时自动生成 32 字节随机 base64 密钥email_domains否允许访问的邮箱域名白名单列表allowlist_domains否登录/登出后允许安全重定向的域名白名单防止未授权重定向未配置时 cephadm 会自动把mgmt-gateway的 IP 与主机名追加进去ssl_insecure_skip_verify否跳过对 OIDC 提供方的 TLS 校验默认false仅限非生产环境ssl/ssl_cert/ssl_key/certificate_source/custom_sans否TLS 证书相关配置由基类ServiceSpec提供支持自定义 SAN 与证书来源extra_container_args/extra_entrypoint_args/custom_configs否追加容器/入口参数与自定义配置文件校验逻辑在OAuth2ProxySpec.validate()中实现要点如下必填字段为provider_display_name、oidc_issuer_url、client_id、client_secret缺失任一字段都会抛出SpecValidationError错误信息形如Missing required fields for oauth2-proxy: ...cookie_secret先尝试按 base64 解码后计算字节长度若解码失败则按 UTF-8 明文计算长度长度不在 {16, 24, 32} 中即报错oidc_issuer_url、redirect_url必须是合法 URL含 scheme 与 netlochttps_address必须是[IP|hostname]:port格式且端口在 0~65535 范围内。这些校验行为被单元测试覆盖见 test_service_spec.py 中的test_oauth2_proxy_missing_required_fields参数化用例逐一验证缺字段时的报错信息。源码级原理剖析配置模板生成cephadm 的 mgr 模块通过 services/oauth2_proxy.py 中的OAuth2ProxyService生成守护进程配置渲染模板为 oauth2-proxy.conf.j2最终产出三个必需文件oauth2-proxy.conf主配置oauth2-proxy.crt/oauth2-proxy.keyTLS 证书与私钥由 cephadm 的证书管理模块get_certificates()提供。从模板内容可以看到实际下发给 oauth2-proxy 的关键运行参数https_address默认0.0.0.0:4180与provider oidcskip_provider_button、skip_jwt_bearer_tokensCookie 相关cookie_samesite none兼容 Chrome 等对第三方 Cookie 管控更严格的浏览器、cookie_secure true、cookie_expire 5h、cookie_refresh 2h透传与头信息pass_access_token、pass_authorization_header、pass_basic_auth、pass_user_headers、set_xauthrequest true这正是 mgmt-gateway 中auth_request机制所依赖的 X-Auth-Request 头访问控制email_domains默认*表示不限制、whitelist_domains即 spec 中的allowlist_domainscephadm 会自动并入 mgmt-gateway 的地址见generate_config()。redirect_url的自动计算逻辑在get_redirect_url()中若 spec 未显式配置则取 mgmt-gateway 外部端点拼上/oauth2/callback。同时OAuth2ProxyService.get_dependencies()将mgmt-gateway的守护进程声明为依赖确保在网关就绪后才计算回调地址。守护进程部署细节守护进程侧由 src/cephadm/cephadmlib/daemons/oauth2_proxy.py 中的OAuth2Proxy类负责容器化编排daemon_type oauth2-proxy启动参数固定为--config/etc/oauth2-proxy.conf --tls-cert-file/etc/oauth2-proxy.crt --tls-key-file/etc/oauth2-proxy.key容器内以nobody用户UID_NOBODY/GID_NOGROUP运行三个配置文件通过卷挂载注入容器支持在容器内执行oauth2-proxy --version探测版本号容器镜像默认值为quay.io/oauth2-proxy/oauth2-proxy:v7.6.0定义于 images.py。Dashboard SSO 联动mgr 模块在 module.py 中通过apply_oauth2_proxy()受理编排请求。当最后一个oauth2-proxy守护进程被移除时post_remove()会自动调用 Dashboard 模块的disable_oauth2_sso关闭 Dashboard 的 OAuth2 SSO前提是 Dashboard 模块已加载且sso_oauth2选项开启避免留下不可用的认证配置。监控栈的 Grafana 配置也会根据oauth2_enabled决定是否启用enable_basic_auth见 services/monitoring.py从而在 OAuth2 生效时自动关闭基础认证。限制与注意事项原文档明确列出了一系列重要限制非穷尽清单oauth2-proxy自身不支持高可用配置——其 HA 依赖 mgmt-gateway 的负载均衡与外部 IDP 的可用性IDP 与 OAuth2 参数必须正确配置错误配置会直接导致认证失败、访问异常IDP 必须在签发的 JWT 令牌中包含jti声明claim因为 Ceph Dashboard 依赖该值校验令牌有效性若oauth2-proxy服务宕机cephadm 会自动禁用 Dashboard 的 OAuth2 SSO。容器镜像管理oauth2-proxy服务使用的容器镜像可通过以下命令查询ceph config get mgr mgr/cephadm/container_image_oauth2_proxy管理员可以通过修改 cephadm 模块选项container_image_oauth2_proxy指定自定义镜像。如果已有守护进程在运行修改镜像后必须重新部署守护进程使其生效ceph config set mgr mgr/cephadm/container_image_oauth2_proxy new-oauth2-proxy-image ceph orch redeploy oauth2-proxy小结oauth2-proxy服务把外部 OIDC 身份提供商的能力引入 Ceph 管理栈配合mgmt-gateway构成了网关统一入口 认证网关的现代安全架构无状态多实例部署、NGINX 轮询负载均衡、JWT 令牌校验、Cookie 会话管理以及 Dashboard SSO 的自动启停均由 cephadm 编排完成。实际操作时只需记住三条主线先以--enable_authtrue部署mgmt-gateway再通过 YAML 规范务必填齐四个必填字段并保证cookie_secret为 16/24/32 字节应用oauth2-proxy最后按需通过模块选项管理镜像与重部署。【免费下载链接】cephCeph is a distributed object, block, and file storage platform项目地址: https://gitcode.com/gh_mirrors/ce/ceph创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Mac读写NTFS终极指南:2026亲测五种方案与避坑全攻略

Mac读写NTFS终极指南:2026亲测五种方案与避坑全攻略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/21 2:51:34 阅读更多 →
Weex Core C++ 单元测试实战:googletest 常见问题(FAQ)全解与源码级剖析

Weex Core C++ 单元测试实战:googletest 常见问题(FAQ)全解与源码级剖析

移动开发跨平台前端UI组件OpenHarmony 【免费下载链接】weex A framework for building Mobile cross-platform UI 项目地址: https://gitcode.com/gh_mirrors/we/weex 点击查看 免费下载 本文以 Weex 仓库中随第三方依赖一并托管的 googletest 官方 FAQ 文档&…

2026/9/21 2:51:34 阅读更多 →
Laravel API认证实战:基于jwt-auth实现无状态Token令牌机制

Laravel API认证实战:基于jwt-auth实现无状态Token令牌机制

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/21 2:51:33 阅读更多 →

最新新闻

V8 字符串表示体系详解:从 SeqString 到 ConsString 的内部表示、internalization 与 String Table

V8 字符串表示体系详解:从 SeqString 到 ConsString 的内部表示、internalization 与 String Table

语言运行时编译器JIT编译解释器内存管理 【免费下载链接】v8 The official mirror of the V8 Git repository 项目地址: https://gitcode.com/gh_mirrors/v81/v8 点击查看 免费下载 导读 JavaScript 中的字符串是最基础的数据类型,V8 并没有使用单一的…

2026/9/21 3:26:55 阅读更多 →
rust-analyzer 排障 FAQ 实战指南:sysroot 损坏与 Cargo 构建锁竞争

rust-analyzer 排障 FAQ 实战指南:sysroot 损坏与 Cargo 构建锁竞争

rust-analyzer 排障 FAQ 实战指南:sysroot 损坏与 Cargo 构建锁竞争 【免费下载链接】rust-analyzer A Rust compiler front-end for IDEs 项目地址: https://gitcode.com/gh_mirrors/ru/rust-analyzer 本篇指南聚焦 rust-analyzer 官方 Troubleshooting FAQ…

2026/9/21 3:26:55 阅读更多 →
RxJS 4 `partition` 操作符深度解析:按谓词将一条 Observable 流一分为二

RxJS 4 `partition` 操作符深度解析:按谓词将一条 Observable 流一分为二

后端 【免费下载链接】RxJS The Reactive Extensions for JavaScript 项目地址: https://gitcode.com/gh_mirrors/rxj/RxJS 点击查看 免费下载 本文基于 RxJS v4(The Reactive Extensions for JavaScript)官方 API 文档与仓库源码&#xff0…

2026/9/21 3:26:55 阅读更多 →
sentence-transformers CrossEncoder 模型卡模板全解析:为 Reranker 自动生成专业 README 的完整机制

sentence-transformers CrossEncoder 模型卡模板全解析:为 Reranker 自动生成专业 README 的完整机制

sentence-transformers CrossEncoder 模型卡模板全解析:为 Reranker 自动生成专业 README 的完整机制 【免费下载链接】sentence-transformers State-of-the-Art Embeddings, Retrieval, and Reranking 项目地址: https://gitcode.com/gh_mirrors/se/sentence-tra…

2026/9/21 3:26:55 阅读更多 →
BrowserSkill错误码速查手册:cdp_failed、timeout、cancelled常见错误一次看懂

BrowserSkill错误码速查手册:cdp_failed、timeout、cancelled常见错误一次看懂

BrowserSkill错误码速查手册:cdp_failed、timeout、cancelled常见错误一次看懂 【免费下载链接】BrowserSkill Let AI agents use your real, logged-in browser without interrupting your work. CLI extension for browser automation across any shell-capable …

2026/9/21 3:26:55 阅读更多 →
claude-seo 实战:用 FLOW 框架 Audience Avatar 提示词构建可执行的「Find」阶段受众画像交付物

claude-seo 实战:用 FLOW 框架 Audience Avatar 提示词构建可执行的「Find」阶段受众画像交付物

claude-seo 实战:用 FLOW 框架 Audience Avatar 提示词构建可执行的「Find」阶段受众画像交付物 【免费下载链接】claude-seo Universal SEO skill for Claude Code. 25 sub-skills 18 sub-agents covering technical SEO, E-E-A-T, schema, GEO/AEO, backlinks, l…

2026/9/21 3:25:55 阅读更多 →

日新闻

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程 【免费下载链接】agentic-awesome-skills AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and …

2026/9/21 0:00:01 阅读更多 →
gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析 【免费下载链接】gin-vue-admin 🚀ViteVue3Gin拥有AI辅助的基础开发平台,企业级业务AI开发解决方案,内置mcp辅助服务,内置skills管理,…

2026/9/21 0:00:01 阅读更多 →
Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

桌面应用AI 应用插件系统 【免费下载链接】Wox A cross-platform launcher that simply works 项目地址: https://gitcode.com/gh_mirrors/wo/Wox 点击查看 免费下载 全功能插件(Full-featured Plugin)是 Wox 三类插件实现方式中能力最完整的…

2026/9/21 0:00:01 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/21 3:13:20 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/21 2:19:36 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/19 23:01:36 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/19 17:50:38 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →