对于这一点,需要对网络运行机制和K8s的基本结构有深入的了解,否则丢问题的时候你会郁闷。
首先要明白,K8s的目的是编排和遏制管理。最小的部分其实不是器皿,而是容器。物理机或虚拟机称为节点。容器是一个基本单元,一个容器中可以有多个容器,但容器中只包含一个容器,并且容器之间共享相同容器网络和主机的配置,即它们之间可以直接通信。在本地主机中,这类似于同一台机器上的通信,所以不存在隔离和安全性。,它是一个外部环境,所以容器是这个业务环境的对象。那么第一个问题就是,同一个容器的不同容器可以放在不同的节点上吗?当然不是,必须是主机和网络共享的同一个节点。我们怎么知道一艘船有很多艘船呢?我可以指定哪个容器需要使用kubectlexec运行吗?当然,请参考以下说明:
因此,您可以在这里考虑包含的概念,而只是Pod。最后,pod是k8s的最小调度单元。那么Pod之间如何通信呢?
Pod之间的通信离不开K8s网络模型:
Flannel构成了一个大型的两层网络。IPPod的分配由flannel统一分配,通信过程也使用flannel网络。桥
每个节点上都会创建一个flannel0虚拟网卡,用于节点之间的通信。因此,可以直接使用podido来共享容器。
跨节点通信时,发送到端的数据会从docker0发送到flannel0虚拟网络,接收到的数据会从flannel0路由到docker0。
如果Container集合是应用程序容器,则Service为空。当应用服务在整个运行生命周期中需要被加载并被监控和管理时,它的意义就体现出来了,所以它是一个服务。一个抽象概念,定义Pod的逻辑集合以及访问这些Pod的计划。
最常见的任务是,当Podex由于某种原因运行时,kubelet会通过部署需求来创建一个新的Pod,以提供之前Pod的功能,但新Pod会部署新的Podflannel。IP,这将是一项巨大的努力。很多形状对象都适合使用,如果Service存在的话,这不是问题:让我们看看Service的运行原理。
这张图解释了服务的工作机制,当ServiceA被创建时,会触发ServiceController和EndPointsController来更新一些资源,比如针对服务中配置的选定容器中创建的每个Pod。等方面的能力Kube-manager还会更新iptable规则链,根据ClusterIP服务绑定到相应的Pod生成绑定规则。集群IP:端口。根据iptables链接将请求发送到相应的容器。该层有两种选择蔬菜的算法:RoundRobin和SessionAffinity。当然,除了iptables的这种方法之外,还有一种比较原始的方法就是用户推广方法。从客户端到ClusterIP:Port的消息将被重定向到ProxyPort。Kube-Proxy收到消息后,会采用RoundRobin(会话亲和性),即同一个ClientIP会使用同一条链来服务同一个。Pod.)分发到对应的Pod。
当然,新版本的k8s开始基于ipvs替换iptables,不过格式和iptables类似。
可以看到这个概念的雏形:
这是最原始的方式,如下图:
IPVS是LVS项目的一部分,是一个优秀的Layer4负载平衡器。凭借模块化核心,它可以轻松处理每秒超过100,000个请求。目前,在大中型互联网企业中,广泛采用IPVS来处理互联网入口的流量。
下一篇:kubernetes容器虚拟化