K8S核心要素

K8S理念

容器云原生平台,屏蔽底层细节

核心要素

node节点(各种conditions控制) 和pod容器组
alt

service服务和labelSelector(标签选择器)
alt

集群架构

alt

service层网络逻辑

1.会为Service创建一个本地集群的DNS入口,因此前端Pod只需要DNS查找主机名为 ‘backend-service’,就能够解析出前端应用程序可用的IP地址。

2.现在前端已经得到了后台服务的IP地址,但是它应该访问2个后台Pod的哪一个呢?Service在这2个后台Pod之间提供透明的负载均衡,会将请求分发给其中的任意一个(如下面的动画所示)。通过每个Node上运行的代理(kube-proxy)完成

alt

控制器

针对POD的控制,由期望状态,通过控制器调整到目标状态
Deployment
StatefulSet
DaemonSet
CronJob
Jobs - Run to Completion

Ingress

非必须,可以起到路由转发作用,HTTP请求到service层中间增加路由功能

HTTP/HTTPS–>Ingress–>Service->kubeproxy–>Pod

网络模型

network namespace 进程的网络堆栈–>默认分配到 root networK Namespace

veth pair 跨多个network namespace进行通信(虚拟网卡)

网桥 ARP 判断是否本地转发

iptables进行NAT为互联网IP或者serviceIP

数据包的传递:Node-to-Internet
下图中:

1.数据包从 Pod 的 network namespace 发出
2.通过 veth0 到达虚拟机的 root network namespace
3.由于网桥上找不到数据包目标地址对应的网段,数据包将被网桥转发到 root network namespace 的网卡 eth0。在数据包到达 eth0 之前,iptables 将过滤该数据包。
4.在此处,数据包的源地址是一个 Pod,如果仍然使用此源地址,互联网网关将拒绝此数据包,因为其 NAT 只能识别与节点(虚拟机)相连的 IP 地址。因此,需要 iptables 执行源地址转换(source NAT),这样子,对互联网网关来说,该数据包就是从节点(虚拟机)发出的,而不是从 Pod 发出的
5.数据包从节点(虚拟机)发送到互联网网关
6.互联网网关再次执行源地址转换(source NAT),将数据包的源地址从节点(虚拟机)的内网地址修改为网关的外网地址,最终数据包被发送到互联网

alt

避免

避免建立迅速成功的Pod,造成K8S无法检测到成功,导致频繁拉起pod