当前位置: 首页 > 知识库问答 >
问题:

使用服务号令牌访问k8s集群

尹赞
2023-03-14

是否可以使用serviceaccount令牌获得k8s群集访问权限?

我的脚本没有访问kubeconfig文件的权限,但是,它可以访问/var/run/secrets/kubernetes处的服务帐户令牌。io/serviceaccount/token。

以下是我尝试过的步骤,但不起作用。

  1. kubectl配置设置凭据sa用户--令牌=$(cat/var/run/secrets/kubernetes.io/servicecomport/token)

但是当脚本运行“kubectl get rolebindings”时,我得到了以下错误:来自服务器的错误(禁止):rolebindings。rbac。批准k8s。io被禁止:用户“系统:服务帐户:测试:默认”无法在命名空间“test”中的API组“rbac.authorization.k8s.io”中列出资源“rolebindings”

共有2个答案

景星光
2023-03-14

是的,这是可能的。例如,如果您通过令牌登录K8S仪表板,它确实使用相同的方式。

遵循以下步骤;

创建服务帐户

$ kubectl -n <your-namespace-optional> create serviceaccount <service-account-name>

角色绑定将角色中定义的权限授予一个用户或一组用户。您可以使用预定义的角色,也可以创建自己的角色。请单击此链接了解更多信息。https://kubernetes.io/docs/reference/access-authn-authz/rbac/#rolebinding-example

$ kubectl create clusterrolebinding <binding-name> --clusterrole=cluster-admin --serviceaccount=<namespace>:<service-account-name>

获取令牌名称

$ TOKENNAME=`kubectl -n <namespace> get serviceaccount/<service-account-name> -o jsonpath='{.secrets[0].name}'`

最后,获取令牌并设置凭据

$ kubectl -n <namespace> get secret $TOKENNAME -o jsonpath='{.data.token}'| base64 --decode
$ kubectl config set-credentials <service-account-name> --token=<output from previous command>
$ kubectl config set-context --current --user=<service-account-name>

如果你仔细遵循这些步骤,你的问题就会解决。

计光赫
2023-03-14

是否可以使用serviceaccount令牌获得k8s群集访问权限?

当然,这就是ServiceAccount令牌的意义所在。你似乎要问的问题是“为什么我的默认服务帐户没有我想要的所有特权”,这是另一个问题。阅读关于这个主题的精美手册会让人受益匪浅

如果希望测试NS中的默认SA有权读取其NS中的内容,则必须创建一个作用域为该NS的角色,然后明确声明关系。SA不会自动拥有这些特权

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  namespace: test
  name: test-default
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: whatever-role-you-want
subjects:
- kind: ServiceAccount
  name: default
  namespace: test

但是当脚本运行“kubectl get pods”时,我得到了以下错误:来自服务器的错误(禁止):角色绑定。rbac。批准k8s。io被禁止:用户“系统:服务帐户:测试:默认”无法在命名空间“test”中的API组“rbac.authorization.k8s.io”中列出资源“rolebindings”

大概你的意思是你可以kubectl get rolebindings,因为我不希望运行kubectl get pods会发出那个错误

 类似资料:
  • 我无法获得足够的权限来使用我的应用程序访问Azure Key Vault(而不是通过用户登录)。以下是我的设置: 我已经给了我的名为“keyvault”的应用程序所有的许可。 我的应用程序注册了Azure Active Directory。我已经允许它进入密钥库:

  • 我有一个具有域范围委托设置的服务帐户,我正在尝试使用该服务帐户创建新帐户(google api服务管理目录),然后向新创建的帐户添加一些预设日历(google api services日历)。 我在目录api方面没有任何问题。我必须使用服务帐户创建一个委派(管理)用户,所有目录api调用都工作正常。 然而,我在日历api调用工作时遇到了问题。 Java依赖性: Java代码: 堆栈跟踪 : 有趣的

  • 我花了整整一周的时间与Gmail API做斗争,但没有成功。 我的任务: 使用自定义域创建邮箱 使用服务帐户通过Gmail API连接到此邮箱 我所做的: 然而,我总是会遇到一个错误: 我在设置中错过了什么?

  • 我对Kubernetes和Istio有点陌生。我正在尝试创建一个服务并通过HTTPS访问它。 通过HTTP看起来一切都很好 我使用了cert-manager和let's Encrypt来生成证书 证书已成功生成 我使用以下命令生成了机密 这些是我的网关、虚拟服务、集群颁发者和证书的配置文件。 网关 证书 当我运行时,我可以看到tls.crt和tls.key内容。 有什么想法为什么我不能达到我可以通

  • 我试图建立我的第一个应用程序,从广告词拉竞选数据,但我有一点麻烦。这是我在的地方: 安装了AdWords API NuGet软件包 创建了一个MCC测试帐户和一个AdWords测试帐户 创建了一个AdWords API开发者帐户(在LIVE AdWords帐户上) 在谷歌开发者控制台的我的测试账号中创建了一个项目和一个服务账号 连接我的网络。使用服务帐户OAuth credentials/p12文

  • 我正在尝试使用通过遵循客户端凭据授予流获得的“仅限应用程序”令牌查询Office 365 Discovery Service REST API,但它返回了被拒绝的访问权限。有没有办法做到这一点?