【问题标题】:Is it possible to set exact name of Service Account token?是否可以设置服务帐户令牌的确切名称?
【发布时间】:2020-01-08 17:25:53
【问题描述】:

我正在尝试通过 Traefik 设置 docker 注册表,并通过服务帐户持有者令牌进行身份验证。问题是默认服务令牌密钥的名称以一些随机字符结尾,无法传递给 Ingress 配置,或者可以吗?

无论如何,我想以某种方式强制 Kubernetes 以可预测的方式命名令牌。

目前的解决方案是手动创建 API 令牌。

kind: Secret
metadata:
  name: account-token
  annotations:
    kubernetes.io/service-account.name: account
type: kubernetes.io/service-account-token

很遗憾,原来随机命名的token还在系统中,无法删除。

如果它是在服务帐户之前创建的,它会被删除,但在此之后,随机密钥是。

【问题讨论】:

  • 您的意思是默认的 ServiceAccount 令牌,其名称类似于 default-token-r9dm9?为什么必须将其传递给 Ingress?
  • @weibeld 基本上我试图强制 traefik 授权服务帐户的入口。我目前正在尝试将身份验证转发到 apiserver,但得到 500 并且没有关于错误的单个日志条目

标签: kubernetes kubernetes-security


【解决方案1】:

看起来creating additional API token 是唯一现有的解决方案。您可以引用现有的服务帐户,控制器将使用新生成的令牌对其进行更新,如下所述:

要为服务帐户创建额外的 API 令牌,请创建一个密钥 ServiceAccountToken 类型,带有引用服务的注释 帐户,控制器将使用生成的令牌对其进行更新。


很遗憾,原来随机命名的token还在 系统,无法删除。

那么当您尝试按照here 描述的方式删除它/使其无效时会发生什么?

它将立即重新创建。为了避免这种情况,首先它必须是 从 serviceaccount.secrests 列表中删除。但不能复杂 通过 yaml 文件完成。或者是否有一些api事务可以 在配置应用时使用?

编辑:

您可以使用两种解决方案来实现您的目标。当您编辑默认的 ServiceAccount 令牌时,它将不再有效,并且不会像删除它一样自动重新创建:

第一个是修补令牌:

kubectl patch secret default-token-jrc6q -p '{"data":{"token": "c29tZW90aGVyc2hpdAo="}}'

第二个是编辑

kubectl edit secret default-token-jrc6q  # and change token to any value you want

【讨论】:

  • 它将立即重新创建。为避免这种情况,首先必须将其从 serviceaccount.secrests 列表中删除。但它不能通过 yaml 文件复杂地完成。或者有没有一些 api 事务可以在 config 应用程序中使用?
  • 请看我回答的编辑。
猜你喜欢
  • 1970-01-01
  • 2021-05-13
  • 2010-11-17
  • 2016-05-17
  • 2021-12-06
  • 2021-04-21
  • 1970-01-01
  • 1970-01-01
  • 2017-05-07
相关资源
最近更新 更多