我是K8S的新手,我试图了解在集群中每个节点上运行的kube-proxy的确切作用。该文档提到“ kube-proxy反映了每个节点上的Kubernetes API中定义的服务,并且可以在一组后端上执行简单的TCP,UDP和SCTP流转发或循环TCP,UDP和SCTP转发”。为做到这一点,每个kube-proxy将需要具有有关集群中运行的所有服务的完整信息,因为kube-proxy的责任是提供对在Pod上运行的应用程序所需的任何服务的访问权限(在相应节点上)。那么这是否意味着K8S集群(在每个节点上运行)中的所有kube代理都是镜像?如果是这样,为什么在每个节点上都存在一个kube-proxy而不是整个集群的集中式代理?
链接到有关代理的K8S文档:https://kubernetes.io/docs/concepts/cluster-administration/proxies/
答案 0 :(得分:1)
那么这是否意味着K8S集群(在每个节点上运行)中的所有kube代理都是镜像?
是的,它们是同一张图片的实例。
如果是这样,为什么在每个节点上都存在一个kube-proxy,而不是整个集群的集中式节点?
kube-proxy使用操作系统数据包过滤层(如果有的话),例如IPtable,IPVS。否则,kube-proxy会转发流量本身。 kube-proxy
Kube-Proxy本身是一个 k8s控制器,它监视群集的所需状态(服务和端点)并在节点上进行更改,因为它管理IPtabels(使用iptable模式)< / p>
要做到这一点,每个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之间的连接(转发,接受)应由节点组件而不是中央平面组件决定。此外,K8的控制平面(API服务器等)保持集群的所需状态和当前状态,因此所有控制器都可以根据其设置的行为进行协调。