我是 K8S 的新手,我正在尝试了解在集群中的每个节点上运行的 kube-proxy 的确切角色。文档提到"kube-proxy 反映了每个节点上 Kubernetes API 中定义的服务,并且可以在一组后端执行简单的 TCP、UDP 和 SCTP 流转发或轮询 TCP、UDP 和 SCTP 转发"。为此,每个 kube-proxy 都需要拥有有关集群中运行的所有服务的完整信息,因为 kube-proxy 负责提供对在 pod(在相应节点上(上运行的应用程序所需的任何服务的访问。那么这是否意味着 K8S 集群内的所有 kube 代理(在每个节点上运行(都是镜像?如果是这样,为什么每个节点上都存在一个 kube 代理,而不是整个集群的集中式代理?
链接到代理上的K8S文档:https://kubernetes.io/docs/concepts/cluster-administration/proxies/
那么这是否意味着 K8S 集群内的所有 kube 代理(在每个节点上运行(都是镜像?
是的,它们是同一图像的实例。
如果是这样,为什么每个节点上都存在一个 kube 代理,而不是整个集群的集中式代理?
kube-proxy 使用操作系统数据包过滤层(如果有(并且可用,例如 IPtable、IPVS。否则,kube-proxy 会转发流量本身。kube-proxy
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(保持集群的所需状态和当前状态,因此所有控制器都可以根据其设置的行为进行协调。