【发布时间】:2021-10-08 08:36:21
【问题描述】:
我正在尝试在一个 pod(在 k8s 上)中创建一个 JWK 服务器,当一个特定孩子的请求进来时,它将为密钥提供服务。我使用 generate 函数创建 JWK
func (s *jwkServer) startJWKServer() {
privateKey, err := rsa.GenerateKey(rand.Reader, 2048)
if err != nil {
panic(err)
}
jwk := go_jose.JSONWebKey{
Key: privateKey,
KeyID: "rand_key_id",
Algorithm: "RSA256",
}
s.jwk = &jwk
}
func (s *jwkServer) ServeHTTP(response http.ResponseWriter, request *http.Request) {
// Do some encoding and decoding to encapsulate into the response object
return s.jwk
}
我使用上面生成的密钥来签署 JWT 令牌。 当对上述 key 的请求进来时,pod 会返回 key。
这里的问题是,如果 pod 在 JWK 的请求到来之前重启,那么 key 就找不到了,这会导致错误。这种情况应该如何处理?
我在这里想到了几个解决方案
解决方案 1:每次都创建相同的密钥,但如果有人可以访问该密钥,这将是一个问题。
解决方案 2:每次 pod 重新启动时都会生成一个新的 JWK 密钥,但是我担心 pod 重新启动发生很多次的情况,然后它会增加代码的延迟。
在 kubernetes 中我应该如何处理 JWK 服务器?
【问题讨论】:
-
您有可以分享的部署文件吗?最好是 pod manifest?
-
我尝试添加更多代码来解释我在做什么,希望对您有所帮助
-
您需要将密钥保存在某处;如果有多个副本,或者如果 pod 重新启动,它们都需要就密钥是什么达成一致。一个简单的选择是通过 Secret 注入它,尽管这有一些相当明显的缺点(集群操作员很容易将其提取出来)。
标签: kubernetes jwt jwk