如何在kube-apiserver上实现'watch = true'?

时间:2020-01-14 14:41:18

标签: kubernetes kube-apiserver

在观察kubernetes资源的变化时,到底发生了什么? http突然变为wss连接吗?

为解决对kube-apiserver的请求过多的问题,我正在将一些代码重写为我认为更像是运算符模式的代码。

在我们的多租户微服务体系结构中,所有服务都使用相同的库来查找与租户特定的数据库的连接详细信息。连接详细信息以秘密方式保存在与应用程序相同的名称空间中。每个租户数据库都有自己的秘密。

因此,在每次调用时,都会读取并解析带有正确标签的所有机密,以获取必要的数据库连接详细信息。我们大约有400个服务/吊舱...

我的想法:创建一个缓存并在每次通过观察者更改相关秘密时更新缓存,而不是读取每个呼叫的所有秘密。

我的担忧:我是否只是用同样昂贵的websocket替换http请求?据我了解,我现在将为每个服务/吊舱建立一个开放的websocket连接,仍然是400个开放连接。

最好有一个代理服务来监视机密信息(kube-apiserver请求),然后所有服务都查询该服务以获取连接详细信息(内网请求,不释放kube-apiserver)?

1 个答案:

答案 0 :(得分:2)

来自the sources

// ServeHTTP serves a series of encoded events via HTTP with Transfer-Encoding: chunked
// or over a websocket connection.

这在很大程度上取决于客户端使用哪种协议(分块的http或ws),这两个协议都有其成本,您必须将其与当前请求频率进行比较。

使用代理缓存可能会更好,该缓存可以定期监视或轮询,但这在很大程度上取决于您的应用程序。