<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Kubernetes on IDaaS Book</title><link>https://idaas.xlabs.club/tags/kubernetes/</link><description>Recent content in Kubernetes on IDaaS Book</description><generator>Hugo</generator><language>zh-CN</language><copyright>Copyright (c) 2020-2024 xlabs.club</copyright><atom:link href="https://idaas.xlabs.club/tags/kubernetes/index.xml" rel="self" type="application/rss+xml"/><item><title>Keycloak 直连 Kubernetes OIDC 认证 — API Server 集成与 RBAC 绑定 | IDaaS Book</title><link>https://idaas.xlabs.club/docs/solution-blogs/keycloak-kubernetes-rbac/</link><pubDate>Sat, 11 Jul 2026 00:00:00 +0800</pubDate><guid>https://idaas.xlabs.club/docs/solution-blogs/keycloak-kubernetes-rbac/</guid><description>&lt;h2 id="场景"&gt;场景&lt;/h2&gt;&#10;&lt;p&gt;你有一个 Kubernetes 集群，团队成员目前用证书或静态 token 认证，管理起来既麻烦又不安全。组织已经在用 Keycloak 管理用户和组，你想把 K8s 集群的认证直接委托给 Keycloak，用 Keycloak 里的组来控制谁有集群管理员权限、谁只能看 Pod 日志。&lt;/p&gt;&#10;&lt;p&gt;与 &#13;&#10;&#13;&#10;&lt;a class="link link--text" href="https://idaas.xlabs.club/docs/solution-blogs/dex-keycloak-federation/"&gt;Dex + Keycloak 联邦方案&lt;/a&gt; 不同，这里不需要额外的 Dex 代理层——Keycloak 本身就是标准的 OIDC Provider，Kubernetes API Server 原生支持 OIDC 认证。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;一句话：Keycloak 告诉 K8s「这个人是谁、属于哪些组」，K8s RBAC 决定「这些组能做什么」。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;h2 id="适用与不适用"&gt;适用与不适用&lt;/h2&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;适用&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;不适用&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;单集群或少量集群，用户都在 Keycloak 里&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;几十个集群需要统一管理（建议加 Dex，参考&#13;&#10;&#13;&#10;&lt;a class="link link--text" href="https://idaas.xlabs.club/docs/solution-blogs/dex-keycloak-federation/"&gt;联邦方案&lt;/a&gt;）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Keycloak 是唯一的用户身份源&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;需要同时接受 GitHub、LDAP、Google 等多源认证（用 Dex 做聚合）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;团队规模中等（几十到几百用户）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;上千用户且需要动态 RBAC 同步&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;已有 Keycloak 部署，不想引入新组件&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Keycloak 还没部署（先部署 Keycloak，参考&#13;&#10;&#13;&#10;&lt;a class="link link--text" href="https://idaas.xlabs.club/docs/implementation/kubernetes-production/"&gt;生产部署指南&lt;/a&gt;）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h2 id="架构"&gt;架构&lt;/h2&gt;&#10;&lt;pre class="mermaid"&gt;&#13;&#10; sequenceDiagram&#10; participant User as kubectl / kubelogin&#10; participant K8s as K8s API Server&#10; participant KC as Keycloak&#10;&#10; User-&amp;gt;&amp;gt;K8s: kubectl get pods&#10; K8s-&amp;gt;&amp;gt;User: 401 + OIDC redirect URL&#10; User-&amp;gt;&amp;gt;KC: 浏览器打开 Keycloak 登录页&#10; Note over User,KC: OIDC Authorization Code + PKCE&#10; KC-&amp;gt;&amp;gt;User: 登录成功，返回 id_token + refresh_token&#10; User-&amp;gt;&amp;gt;K8s: kubectl get pods (Authorization: Bearer &amp;amp;lt;id_token&amp;amp;gt;)&#10; K8s-&amp;gt;&amp;gt;K8s: 验证 JWT 签名 + issuer + aud + exp&#10; K8s-&amp;gt;&amp;gt;K8s: 提取 sub、groups → 匹配 RBAC&#10; K8s-&amp;gt;&amp;gt;User: Pod 列表&#13;&#10;&lt;/pre&gt;&#13;&#10;&#13;&#10;&lt;p&gt;流程要点：&lt;/p&gt;</description></item><item><title>Keycloak Kubernetes 导入导出与数据迁移实战</title><link>https://idaas.xlabs.club/blog/keycloak-export-import-on-k8s/</link><pubDate>Mon, 01 Apr 2024 00:00:00 +0800</pubDate><guid>https://idaas.xlabs.club/blog/keycloak-export-import-on-k8s/</guid><description>在 Kubernetes 上把 Realm 完整导出备份、再迁移到新集群：&lt;code&gt;kc.sh export/import&lt;/code&gt; 的正确用法（含 master Realm 不参与导出的坑）、&lt;code&gt;Script upload is disabled&lt;/code&gt; 报错的处理，以及为什么控制台导出不能当作备份。</description></item></channel></rss>