kubernetes是一个集群,那么在集群里面有master,有node。这些角色都需要进行通信,那么kubernetes整个集群里面是如何通信的呢?
在kubernetes集群内部,集群之间的通信主要分为两种,一种上master到cluster的通信,相当于下发通知。另外一种是cluster到master的通信,相当于上报自身信息。下面分别介绍下。
一、master到cluster的通信
master到cluster的通信主要分为两种:”
1、apiserver访问kubernetes集群中每个节点上的kubelet进程。 2、使用apiserver的proxy功能,从apiserver访问集群的所有节点、pod和service。 3、ssh隧道
apiserver访问kubelet有如下场景:
1、抓取pod日志 2、通过kubectl exec -it 指令获取容器的命令行终端 3、提供kubectl port-forward功能
以上三种通信再分别解释下:
1、apiserver访问kubernetes集群中每个节点上的kubelet进程。
apiserver访问kubelet的方式主要通过kubelet节点的https端口进行访问。 备注下: 此处的https是不做身份校验的,也没有进行加密传输。
2、使用apiserver的proxy功能,从apiserver访问集群的所有节点、pod和service。
apiserver访问node节点、pod和service的时候是通过节点上的http进行连接的。同样也是没有身份证认知。
3、ssh隧道
Kubernetes 支持 SSH隧道(tunnel)来保护 Master --> Cluster 访问路径。此时,apiserver 将向集群中的每一个节点建立一个 SSH隧道(连接到端口22的ssh服务)并通过隧道传递所有发向 kubelet、node、pod、service 的请求。
二、cluster到master的通信
这里的通信主要是集群几点向master汇报自己的状态。所以所有的请求入口都是apiserver。此时apiserver的https端口监听为:443端口,集群其他节点必须配置api的公钥根证书,与apiserver进行交互的时候,需要进行授权认证。具体的授权认证模式有:
1)Node
node即节点认证。
2)ABAC
ABAC即基于属性的访问控制
3)RBAC
RBAC即基于角色的访问控制
4)Webhook
Webhook即基于http回调机制的访问控制
还没有评论,来说两句吧...