news 2026/10/29 8:52:52

k0s 集群 OpenID Connect(OIDC)身份提供方接入指南:Google Cloud 与 kubelogin 实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
k0s 集群 OpenID Connect(OIDC)身份提供方接入指南:Google Cloud 与 kubelogin 实战
  • 云原生
  • 容器编排
  • 边缘计算

【免费下载链接】k0s

k0s - The Zero Friction Kubernetes

项目地址:https://gitcode.com/gh_mirrors/k0/k0s
点击查看免费下载

k0s 本身不提供用户管理能力,推荐通过 OpenID Connect(OIDC)对接外部身份提供方(IdP),为kubectl用户引入单点登录(SSO)。本篇指南以 Google Cloud 为例,完整演示「k0s 侧通过extraArgs开启 OIDC 认证 → IdP 侧创建应用与凭据 → 生成用户 kubeconfig」的全流程,并覆盖k8s-oidc-helper、kubelogin两种客户端方案以及接入后的 RBAC 授权与 kubeconfig 安全分发。读完本文,你将能在自己的 k0s 集群上复现一套可用的 OIDC 认证链路。

为什么 k0s 集群需要 OIDC

开发者通常用kubectl访问 Kubernetes 集群。默认情况下kubectl使用客户端证书向 API Server 认证,这意味着当多位开发者需要访问同一集群时,证书需要在团队内共享——证书一旦泄露,后果往往很严重(用户管理文档 也明确指出:Kubernetes 及 k0s 没有内置用户管理功能,用户身份完全依赖外部来源,而客户端证书有效期长达一年且无法吊销)。

OIDC 方案把认证职责交给外部 IdP:API Server 只负责校验 IdP 签发的令牌(ID Token),用户无需持有共享证书,凭据泄露面大幅收窄。在 k0s 中,通过配置文件的spec.api.extraArgs即可把 OIDC 相关参数传递给 kube-apiserver 进程,无需改动任何组件代码。

阅读顺序建议:本指南(oidc-provider-configuration.md)负责「身份提供方」一侧的配置,而集群侧的整体接入请配合 oidc-cluster-configuration.md 一起阅读。

k0s 侧配置:为 kube-apiserver 开启 OIDC 认证

OIDC 认证通过 k0s 配置中的extraArgs开启。以下是 kube-api 支持的 OIDC 参数总览(完整继承自 oidc-cluster-configuration.md):

参数说明示例是否必填
--oidc-issuer-url提供方 URL,API Server 据此发现公开签名密钥。仅接受https://协议,通常是不带路径的提供方发现地址,即.well-known/openid-configuration的上一级若发现地址为https://accounts.google.com/.well-known/openid-configuration,则此处填https://accounts.google.com是
--oidc-client-id所有令牌必须为其签发的 client idkubernetes是
--oidc-username-claim用作用户名的 JWT claim。默认sub(终端用户的唯一标识)。管理员可按提供方情况改用email、name等;但除email外的 claim 会加上 issuer URL 前缀,以避免与其他插件命名冲突sub否
--oidc-username-prefix用户名前缀,避免与已有名称(如system:用户)冲突。例如oidc:会生成oidc:jane.doe这样的用户名。若未设置且--oidc-username-claim不是email,默认前缀为(Issuer URL)#;值-可完全禁用前缀oidc:否
--oidc-groups-claim用作组的 JWT claim,若存在必须是字符串数组groups否
--oidc-groups-prefix组名前缀,避免与已有名称(如system:组)冲突。例如oidc:会生成oidc:engineering、oidc:infraoidc:否
--oidc-required-claimkey=value形式描述 ID Token 中必须存在的 claim,会校验其值与匹配;可重复设置多个claim=value否
--oidc-ca-file签署 IdP Web 证书的 CA 证书路径,默认使用主机根 CA/etc/kubernetes/ssl/kc-ca.pem否

最小可行配置只需要三项:oidc-issuer-url、oidc-client-id、oidc-username-claim。对应的 k0s 配置示例:

apiVersion: k0s.k0sproject.io/v1beta1 kind: ClusterConfig spec: api: extraArgs: oidc-issuer-url: <issuer-url> oidc-client-id: <client-id> oidc-username-claim: email # 用 email 令牌 claim 作为用户名

以此配置为起点,完成 k0s 集群安装请继续参考configuration guide(例如通过k0s config create生成配置并启动控制面)。

源码视角:extraArgs如何生效

从源码结构看,该机制的核心在配置类型与组件实现两层:

  • 配置类型:pkg/apis/k0s/v1beta1/api.go 中APISpec定义了ExtraArgs map[string]string(键值对,推荐使用)与RawArgs []string(追加参数,不做校验);RawArgs会追加在ExtraArgs之后,注释明确建议优先使用ExtraArgs。
  • 组件实现:pkg/component/controller/apiserver.go 在组装 kube-apiserver 启动参数时遍历NodeConfig.Spec.API.ExtraArgs,若与内置默认参数同名会打印overriding apiserver flag with user provided value警告并覆盖,随后才生成最终 args。也就是说,oidc-*系列参数正是在这一合并步骤中被注入 API Server 进程的。

docs/configuration.md对extraArgs的说明补充了一个重要边界:extraArgs触发的任何行为不在 k0s 支持范围内,使用前应充分理解参数本身的作用。

身份提供方侧:接入前置条件

k0s 侧就绪后,还需要从 IdP 拿到三样东西(对应上文三个必填参数):

  • issuer-url:提供方的 issuer 地址;
  • client-id:为集群注册的应用客户端 ID;
  • username-claim:决定用令牌中的哪个字段作为 Kubernetes 用户名。

不同厂商的申请流程差异较大,k0s 文档不逐一覆盖所有提供方——请参考你的提供方官方文档,或直接使用本指南的 Google Cloud 示例作为模板。独立部署(stand-alone)的 OIDC 提供方需要特别注意:如果其 Web 证书不是由公共根 CA 签发,就必须为 kube-api 显式指定oidc-ca-file参数,指向签署该证书的 CA。

Google Cloud 为例:完整接入流程

本文以 Google Cloud 作为示例提供方(其他厂商请对照各自文档调整),其 issuer URL 为https://accounts.google.com。

创建应用

  1. 打开 Google Cloud 控制台的 API Dashboard 页面;
  2. 在组织中新建一个项目;
  3. 进入 "Credentials"(凭据)页面;
  4. 创建 "OAuth consent screen"(OAuth 同意屏幕)。

创建用户凭据

  1. 进入 Google Cloud 控制台的 "Credentials" 页面;
  2. 新建凭据,类型选择 "OAuth client ID";
  3. 应用类型选择 "Desktop"(桌面应用);
  4. 保存生成的client ID和client secret。

用 k8s-oidc-helper 生成 kubeconfig 用户记录

k0s 文档推荐的客户端方案之一是k8s-oidc-helper工具,它负责在 kubeconfig 中写入正确的用户记录。运行以下命令并按提示操作:

k8s-oidc-helper --client-id=<CLIENT_ID> \ --client-secret=<CLIENT_SECRET> \ --write=true

命令会引导完成 OAuth 授权并刷新令牌,最终把 OIDC 用户凭据写入 kubeconfig。

使用 kubelogin 插件对接其他提供方

对于非 Google 的其他 OIDC 提供方,可以使用kubectl的kubelogin插件。其通用思路是:先运行kubectl oidc-login setup完成一次授权并输出用户配置,再把该用户以exec插件模式注册到 kubeconfig,之后kubectl会在令牌过期时自动调用插件刷新令牌。

Google Cloud 示例

kubectl oidc-login setup \ --oidc-issuer-url=https://accounts.google.com \ --oidc-client-id=<CLIENT_ID> \ --oidc-client-secret=<CLIENT_SECRET> kubectl config set-credentials oidc \ --exec-api-version=client.authentication.k8s.io/v1beta1 \ --exec-command=kubectl \ --exec-arg=oidc-login \ --exec-arg=get-token \ --exec-arg=--oidc-issuer-url=https://accounts.google.com \ --exec-arg=--oidc-client-id=<CLIENT_ID> \ --exec-arg=--oidc-client-secret=<CLIENT_SECRET>

配置完成后,可将当前 context 切换到oidc用户:

kubectl config set-context --current --user=oidc

关于kubelogin的完整 setup 细节(浏览器/设备码授权、令牌刷新缓存位置等),请以 kubelogin 插件的官方 setup 文档为准。

授权:OIDC 认证之后如何控制权限

认证解决「你是谁」,授权解决「你能做什么」。k0s 集群中实现 OIDC 授权有两种可选路径:

方式一:基于提供方的角色映射

使用oidc-groups-claim参数指定令牌中的哪个 claim 作为用户所属组(即 RBAC 角色列表)。其核心工作在于把 IdP 侧的组数据与 kube-api 的 RBAC 系统同步起来——例如把 IdP 中的engineering组映射到某个 ClusterRoleBinding。这种方式依赖提供方侧的组管理能力,配置细节见上文参数表及提供方文档。

方式二:手动角色管理

为每个新用户分别创建 Role 与 RoleBinding,Role 可以被所有用户共享。以下 Role 授予default命名空间内的全部权限(示例为全量授权,生产环境务必按实际需求收敛):

--- kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: namespace: default name: dev-role rules: - apiGroups: ["*"] resources: ["*"] verbs: ["*"]

RoleBinding 示例(把 IdP 侧用户 ID 绑定到该角色):

kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: dev-role-binding subjects: - kind: User name: <provider side user id> roleRef: kind: Role name: dev-role apiGroup: rbac.authorization.k8s.io

kubeconfig 安全分发的注意事项

将 OIDC 用户 kubeconfig 交付给终端用户前,有两点必须注意:

  • 不要把/var/lib/k0s/pki/admin.conf的完整内容直接发给用户——该文件持有管理员级凭据,直接分发等同于泄漏集群管理权限;
  • 正确做法是把/var/lib/k0s/pki/admin.conf当作集群参数的模板(cluster/server、CA 证书等),只提取其中与集群连接相关的部分,套用前面生成的 OIDC 用户记录,组合出一份权限受限的用户专属 kubeconfig。

授权侧的 kubeconfig 组装方式由各提供方/工具的具体方案决定,可参考 user-management.md 中关于集群用户与 RBAC 绑定的说明(k0s kubeconfig create是证书方案的对应命令,OIDC 场景下则使用本指南的 helper/kubelogin 流程)。

小结

在 k0s 上启用 OIDC 的完整链路可归纳为四步:① 在spec.api.extraArgs中配置oidc-issuer-url、oidc-client-id、oidc-username-claim(必要时加oidc-groups-claim、oidc-ca-file);② 在 IdP 侧创建应用与凭据;③ 用k8s-oidc-helper或kubelogin生成用户 kubeconfig;④ 通过 RBAC(角色映射或手动绑定)完成授权,并安全分发受限的 kubeconfig。涉及的技术规范可进一步查阅 OAuth2 规范、Kubernetes RBAC 授权系统与 Kubernetes 认证系统文档,并结合本仓库的 oidc-cluster-configuration.md 与 configuration.md 落地到实际集群。

  • 云原生
  • 容器编排
  • 边缘计算

【免费下载链接】k0s

k0s - The Zero Friction Kubernetes

项目地址:https://gitcode.com/gh_mirrors/k0/k0s
点击查看免费下载
上一篇:解放你的音乐:3分钟掌握NCM文件转换技巧
下一篇:终极解决方案:如何永久保存你的网易云音乐无损歌单

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/15 15:47:48

深入浅出运算放大器:分类、核心参数、典型电路与行业应用全解(一)

专栏定位:面向电子工程师、嵌入式开发者、硬件入门者,从基础分类到选型参数,从电路原理到行业落地,系统构建运放知识体系,看完即可独立完成运放选型与基础电路设计。 前言:为什么你必须系统掌握运放? 运算放大器(Operational Amplifier,简称 Op-Amp)是模拟电路的 “…

作者头像 李华
网站建设 2026/10/15 16:05:51

大模型 or Not?智慧农业落地,大小模型各有所长

最近两年&#xff0c;智慧农业圈有一个很有意思的现象&#xff1a;不管做什么项目&#xff0c;必先提大模型。打开行业通稿&#xff0c;清一色都是同款话术&#xff1a;农业大模型走出实验室&#xff0c;让种地告别“靠天吃饭”&#xff0c;正式进入“算法种地”时代。从育种、…

作者头像 李华
网站建设 2026/10/15 17:40:48

插件ponytail如何使用:轻量级聚合与收拢机制实战指南

1. 从“ponytail”这个词说起&#xff1a;它到底是什么第一次看到“ponytail”这个词&#xff0c;绝大多数人脑子里蹦出来的画面是发型——马尾辫。没错&#xff0c;字面意思确实如此。但在技术圈和工具生态里&#xff0c;ponytail 已经悄悄变成了一个有意思的符号&#xff0c;…

作者头像 李华