身份提供方接入指南:Google Cloud 与 kubelogin 实战)
云原生容器编排边缘计算【免费下载链接】k0sk0s - The Zero Friction Kubernetes项目地址https://gitcode.com/gh_mirrors/k0/k0s点击查看免费下载k0s 本身不提供用户管理能力推荐通过 OpenID ConnectOIDC对接外部身份提供方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 方案把认证职责交给外部 IdPAPI 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提供方 URLAPI 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-claimkeyvalue形式描述 ID Token 中必须存在的 claim会校验其值与匹配可重复设置多个claimvalue否--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为集群注册的应用客户端 IDusername-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。创建应用打开 Google Cloud 控制台的 API Dashboard 页面在组织中新建一个项目进入 Credentials凭据页面创建 OAuth consent screenOAuth 同意屏幕。创建用户凭据进入 Google Cloud 控制台的 Credentials 页面新建凭据类型选择 OAuth client ID应用类型选择 Desktop桌面应用保存生成的client ID和client secret。用 k8s-oidc-helper 生成 kubeconfig 用户记录k0s 文档推荐的客户端方案之一是k8s-oidc-helper工具它负责在 kubeconfig 中写入正确的用户记录。运行以下命令并按提示操作k8s-oidc-helper --client-idCLIENT_ID \ --client-secretCLIENT_SECRET \ --writetrue命令会引导完成 OAuth 授权并刷新令牌最终把 OIDC 用户凭据写入 kubeconfig。使用 kubelogin 插件对接其他提供方对于非 Google 的其他 OIDC 提供方可以使用kubectl的kubelogin插件。其通用思路是先运行kubectl oidc-login setup完成一次授权并输出用户配置再把该用户以exec插件模式注册到 kubeconfig之后kubectl会在令牌过期时自动调用插件刷新令牌。Google Cloud 示例kubectl oidc-login setup \ --oidc-issuer-urlhttps://accounts.google.com \ --oidc-client-idCLIENT_ID \ --oidc-client-secretCLIENT_SECRET kubectl config set-credentials oidc \ --exec-api-versionclient.authentication.k8s.io/v1beta1 \ --exec-commandkubectl \ --exec-argoidc-login \ --exec-argget-token \ --exec-arg--oidc-issuer-urlhttps://accounts.google.com \ --exec-arg--oidc-client-idCLIENT_ID \ --exec-arg--oidc-client-secretCLIENT_SECRET配置完成后可将当前 context 切换到oidc用户kubectl config set-context --current --useroidc关于kubelogin的完整 setup 细节浏览器/设备码授权、令牌刷新缓存位置等请以 kubelogin 插件的官方 setup 文档为准。授权OIDC 认证之后如何控制权限认证解决「你是谁」授权解决「你能做什么」。k0s 集群中实现 OIDC 授权有两种可选路径方式一基于提供方的角色映射使用oidc-groups-claim参数指定令牌中的哪个 claim 作为用户所属组即 RBAC 角色列表。其核心工作在于把 IdP 侧的组数据与 kube-api 的 RBAC 系统同步起来——例如把 IdP 中的engineering组映射到某个 ClusterRoleBinding。这种方式依赖提供方侧的组管理能力配置细节见上文参数表及提供方文档。方式二手动角色管理为每个新用户分别创建 Role 与 RoleBindingRole 可以被所有用户共享。以下 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.iokubeconfig 安全分发的注意事项将 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 落地到实际集群。赞分享云原生容器编排边缘计算【免费下载链接】k0sk0s - The Zero Friction Kubernetes项目地址https://gitcode.com/gh_mirrors/k0/k0s点击查看免费下载相关推荐Koel 单点登录SSO接入指南Google 与通用 OpenID Connect 身份提供方Koel 单点登录SSO接入指南Google 与通用 OpenID Connect 身份提供方 Koel开源音乐流媒体方案在常规的邮箱密码登录之外音视频后端前端FreshRSS 集成 OpenID ConnectOIDC完整指南环境变量配置、Docker 部署与身份提供商对接FreshRSS 集成 OpenID ConnectOIDC完整指南环境变量配置、Docker 部署与身份提供商对接 本指南以 FreshRSS 官方管理后端前端CLIASP.NET Core OpenID Connect 示例实战在 OpenIdConnectSample 中配置 Azure AD 与 Google 身份提供方ASP.NET Core OpenID Connect 示例实战在 OpenIdConnectSample 中配置 Azure AD 与 Google 身份提后端Web框架上一篇解放你的音乐3分钟掌握NCM文件转换技巧下一篇终极解决方案如何永久保存你的网易云音乐无损歌单创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考