Pinniped配置:如何用Token替代客户端证书登录
解决方法
1. 调整Concierge的OIDC身份提供者配置
默认情况下Pinniped Concierge会发放客户端证书,要改成发放JWT Token,需先修改对应的OIDCIdentityProvider资源,同时确保存在JWTCredentialIssuer:
首先创建(若未存在)JWT凭证签发者:
apiVersion: credentialissuer.pinniped.dev/v1alpha1 kind: JWTCredentialIssuer metadata: name: pinniped-concierge-jwt namespace: pinniped-concierge spec: tls: certificateAuthorityData: <替换为你的Concierge CA证书base64编码>
然后修改对接Keycloak的OIDC身份提供者,关联上述JWT签发者:
apiVersion: idp.supervisor.pinniped.dev/v1alpha1 kind: OIDCIdentityProvider metadata: name: keycloak-idp namespace: pinniped-concierge spec: issuer: https://<你的Keycloak域名>/auth/realms/<你的Realm> tls: certificateAuthorityData: <替换为Keycloak的CA证书base64编码> authorizationConfig: additionalScopes: ["openid", "email", "profile"] claims: username: email # 或你用于映射K8s用户名的Claim字段 groups: groups client: secretName: keycloak-client-secret # 你之前创建的客户端密钥Secret credentialIssuer: apiGroup: credentialissuer.pinniped.dev kind: JWTCredentialIssuer name: pinniped-concierge-jwt
应用配置:
kubectl apply -f jwt-issuer.yaml kubectl apply -f oidc-idp.yaml
2. 重新执行登录命令获取Token
现在执行登录时,可选择直接输出Token,或让Pinniped将Token写入kubeconfig后提取:
方式一:直接输出Token到控制台
pinniped login oidc \ --provider pinniped-concierge/keycloak-idp \ --output token
执行后会弹出浏览器引导你登录Keycloak,授权完成后控制台将打印JWT Token。
方式二:写入kubeconfig后提取Token
若需同时给kubectl使用,执行:
pinniped login oidc \ --provider pinniped-concierge/keycloak-idp \ --kubeconfig ~/.kube/config
登录完成后打开kubeconfig文件,找到对应context的用户配置部分,其中的token字段即为所需的JWT Token,复制即可。
3. 浏览器中使用Token访问K8s
- Kubernetes Dashboard:打开Dashboard登录页,选择「Token」选项,粘贴复制的Token后点击登录。
- 直接调用K8s API:在浏览器开发者工具的Network面板中,给请求头添加
Authorization: Bearer <你的Token>,即可访问API资源。
注意:需确保你的Keycloak用户已配置对应的K8s RBAC权限,否则即使拿到Token也无法访问资源。
内容的提问来源于stack exchange,提问作者shabbir
相关产品推荐
相关产品推荐

