gol*_*er3 6 linux token kubernetes
这个问题涉及 kubernetes v1.24 及更高版本
所以我可以为服务帐户创建令牌
kubectl create token myserviceaccount
Run Code Online (Sandbox Code Playgroud)
创建的令牌可以工作并达到目的,但令我感到困惑的是,当我的kubectl get sa
myserviceaccount 的 SECRETS 字段仍然为 0 时。该令牌没有出现在kubectl get secrets
任何一个中。
我还看到我可以 pass--bound-object-kind
和--bound-object-name
tokubectl create token
但这似乎也没有做任何事情(可见)......
有没有办法查看创建的令牌?--bound.. 标志的目的是什么?
感谢我今天偶然发现的文档链接(我不知道在提出问题时我是如何错过它的,因为我花了相当长的时间浏览文档......)我找到了我正在寻找的信息为了。我想提供这个答案,因为我发现 v1d3rm3 的答案不完整且不完全准确。
kubernetes 文档证实了 v1d3rm3 的声明(顺便说一句,这是回答我的问题的关键):
创建的令牌是经过签名的 JSON Web 令牌 (JWT)。
由于令牌是 JWT 令牌,服务器可以验证它是否已签名,因此无需存储它。设置 JWT 过期时间不是因为令牌不与对象关联(实际上是这样,如下所示),而是因为服务器无法使令牌失效(它实际上需要跟踪失效令牌,因为令牌不存储在任何地方,任何具有良好签名的令牌都是有效的)。为了减少令牌被盗时的损失,有一个有效期。
签名的 JWT 令牌包含其中的所有必要信息。
解码后的令牌(使用kubectl create token test-sa
test-sa 是服务帐户名称创建)如下所示:
{
"aud": [
"https://kubernetes.default.svc.cluster.local"
],
"exp": 1666712616,
"iat": 1666709016,
"iss": "https://kubernetes.default.svc.cluster.local",
"kubernetes.io": {
"namespace": "default",
"serviceaccount": {
"name": "test-sa",
"uid": "dccf5808-b29b-49da-84bd-9b57f4efdc0b"
}
},
"nbf": 1666709016,
"sub": "system:serviceaccount:default:test-sa"
}
Run Code Online (Sandbox Code Playgroud)
与 v1d3rm3 答案相反,此令牌自动与服务帐户关联,正如 kubernets 文档链接所确认的那样,并且我们也可以从上面的令牌内容中看到。
假设我有一个想要将令牌绑定到的秘密(例如kubectl create token test-sa --bound-kind Secret --bound-name my-secret
,其中 test-sa 是服务帐户名称,my-secret 是我要绑定令牌的秘密),解码后的令牌将如下所示:
{
"aud": [
"https://kubernetes.default.svc.cluster.local"
],
"exp": 1666712848,
"iat": 1666709248,
"iss": "https://kubernetes.default.svc.cluster.local",
"kubernetes.io": {
"namespace": "default",
"secret": {
"name": "my-secret",
"uid": "2a44872f-1c1c-4f18-8214-884db5f351f2"
},
"serviceaccount": {
"name": "test-sa",
"uid": "dccf5808-b29b-49da-84bd-9b57f4efdc0b"
}
},
"nbf": 1666709248,
"sub": "system:serviceaccount:default:test-sa"
}
Run Code Online (Sandbox Code Playgroud)
请注意,绑定发生在令牌内部,在kubernetes.io key 下,如果您描述 my-secret,您仍然不会看到令牌。因此 --bound-... 标志(来自秘密对象)没有明显执行任何操作,因为绑定发生在令牌本身内部...
我们还可以在 TokenRequest 对象中查看详细信息,而不是解码 JWT 令牌
kubectl create token test-sa -o yaml
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3563 次 |
最近记录: |