2

我是 K8S 的新手,我试图了解在集群中每个节点上运行的 kube-proxy 的确切作用。该文档提到“kube-proxy 反映了每个节点上 Kubernetes API 中定义的服务,并且可以在一组后端进行简单的 TCP、UDP 和 SCTP 流转发或循环 TCP、UDP 和 SCTP 转发”。要做到这一点,每个 kube-proxy 都需要有关于集群中运行的所有服务的完整信息,因为 kube-proxy 有责任提供对运行在 pod 上的应用程序所需的任何服务的访问(在相应的节点上)。那么这是否意味着 K8S 集群内的所有 kube-proxy(在每个节点上运行)都是镜像?如果是这样,为什么每个节点上都存在 kube-proxy 而不是整个集群的集中式代理?

链接到关于代理的 K8S 文档:https ://kubernetes.io/docs/concepts/cluster-administration/proxies/

4

1 回答 1

1

那么这是否意味着 K8S 集群内的所有 kube-proxy(在每个节点上运行)都是镜像?

是的,它们是相同图像的实例。

如果是这样,为什么每个节点上都存在 kube-proxy 而不是整个集群的集中式代理?

kube-proxy 使用操作系统包过滤层(如果有的话)并且可用,例如 IPtable、IPVS。否则,kube-proxy 会自行转发流量。kube-代理

Kube-Proxy 本身是一个k8s 控制器,它监视集群的所需状态(服务和端点)并在节点上进行更改,因为它管理 IPtabels(使用 iptable 模式)

要做到这一点,每个 kube-proxy 都需要拥有关于集群中运行的所有服务的完整信息......

有以下标志来设置 kube-proxy 的行为

--iptables-min-sync-period duration
The minimum interval of how often the iptables rules can be refreshed as endpoints and services change (e.g. '5s', '1m', '2h22m').
--iptables-sync-period duration     Default: 30s
The maximum interval of how often iptables rules are refreshed (e.g. '5s', '1m', '2h22m'). Must be greater than 0.

IMO,节点上的 pod 之间的连接(转发、接受)的决定应由节点组件而不是中心平面组件做出。此外,K8s 控制平面(api-server,etcd)保持集群的期望状态和当前状态,因此所有控制器都可以根据它们设置的行为进行协调。

于 2019-12-28T20:24:42.513 回答