我正试图通过Traefik设置docker注册表,并通过服务帐户承载令牌进行身份验证。问题是,默认服务令牌secret的名称以一些随机字符结尾,这些字符不能传递给Ingress配置,或者可以吗?
无论如何,我想以某种方式迫使Kubernetes以可预测的方式命名令牌。
当前的解决方案是手动创建API令牌。
kind: Secret
metadata:
name: account-token
annotations:
kubernetes.io/service-account.name: account
type: kubernetes.io/service-account-token
不幸的是,原始随机命名的令牌仍在系统中,无法删除。
如果它是在服务帐户之前创建的,它会被删除,但在服务帐户之后,随机化的秘密是.
创建额外的API令牌似乎是唯一现有的解决方案。您可以引用现有的服务帐户,控制器将使用新生成的令牌对其进行更新,如下所述:
若要为服务帐户创建额外的API令牌,请创建一个秘密类型为ServiceAccountToken,带有引用该服务的注释帐户,控制器将使用生成的令牌对其进行更新。
不幸的是,原始随机命名的令牌仍在系统,无法删除。
那么,当您试图按照此处描述的方式删除/使其无效时,会发生什么呢?
它将立即被重新创建。为了避免这种情况,首先必须已从serviceaccount.secrest列表中删除。但它不可能是复杂的通过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