0

在 kubenertes 环境中,有一个 API 服务器,我们可以调用它来监视资源。感谢 HTTP 请求(或 WebSocket,但这与我的问题无关),我们可以调用此 API 服务器,我想知道 API 服务器如何处理永不终止此请求并继续通知客户端有关资源的任何更改。

编辑:我的意思是 HTTP 协议是一个请求/响应协议,我知道使用 HTTP2 我们可以保持同一个 TCP 连接打开以执行多个请求,但它仍然必须是请求/响应性质。那么监视机制如何与这个请求/响应协议一起工作呢?


从键

关键是分块头。

您可以在向 kube API 服务器请求时看到一个标头 Transfer-Encoding: chunked

https://en.wikipedia.org/wiki/Chunked_transfer_encoding

在 doc 中,服务器可以使用此标头连续发送有效负载。

在 kubernetes 中,您也可以检查它

curl -v 127.0.0.1:8001/apis/apps/v1/watch/namespaces/<mycase :)>>

GET /apis/apps/v1/watch/namespaces/<mycase :)> HTTP/1.1 
> Host: 127.0.0.1:8001
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Cache-Control: no-cache, private
< Content-Type: application/json
< Date: Wed, 07 Jul 2021 03:47:33 GMT
< Transfer-Encoding: chunked 
4

1 回答 1

1

Kubernetes 将其所有资源存储在 etcd 中,这是一个键值存储,而 etcd 提供了 Kubernetes API 所利用的监视功能。

您可以在此处阅读有关 etcd watch 的详细信息。

于 2019-09-25T14:15:54.940 回答