网络策略的编写方法 (考察)
1. 用户请求的接收
用户访问:
用户通过CLI(如kubectl)或YAML文件(资源对象文件)定义期望的资源状态(如Pod),并发出请求。该请求通过集群的入口(通常是Master节点的IP)进入Kubernetes集群。
2. Master节点的处理
流量进入Master节点:
用户请求流量到达Master节点,Master节点包含多个关键组件:
kube-apiserver:作为Kubernetes的控制平面和API入口,负责接收和处理用户请求。
etcd:分布式键值存储,保存集群的所有状态数据。
kube-scheduler:负责Pod的调度。
kube-controller-manager:负责集群状态的管理和调整。
kube-proxy:负责网络流量的管理。
3. 处理请求并存储状态
请求处理:
kube-apiserver接收到用户的请求后,会验证请求的合法性,并将用户定义的期望状态(如Pod的定义)存储到etcd中。
4. Pod调度
调度过程:
kube-scheduler监听kube-apiserver的事件,检测到新的Pod请求后,从etcd中获取所有节点的信息。
调度过程包括:
预选:根据Pod的资源请求和节点的可用资源,筛选出符合条件的节点。
优选:对预选出的节点进行进一步的评估,选择最适合的节点。
绑定:将调度结果通过kube-apiserver通知被选中的节点的kubelet。
5. Node节点的处理
kubelet的角色:
每个Node节点上运行kubelet,它是Kubernetes的主要工作负载代理。kubelet接收到来自kube-apiserver的调度指令后,会通过CRI(Container Runtime Interface)与底层容器引擎(如Docker或containerd)进行通信。
在Kubernetes 1.24版本及之后,kubelet与Docker之间的连接需要通过cri-dockerd进行。
6. 创建Pod
Pod的创建过程:
kubelet接收到调度指令后,通过CRI请求Docker创建Pod。Pod的创建过程如下:
首先,kubelet会创建一个名为pause的容器,这个容器作为Pod的网络命名空间的基础。
然后,基于用户定义的YAML文件,kubelet创建应用容器,并将其与pause容器共享网络命名空间。此时,应用容器可以通过pause容器访问网络。
7. 状态管理与反馈
状态信息的管理:
pause容器的相关数据(如网络和存储信息)被kubelet收集,并返回给kube-apiserver。kube-apiserver将这些状态信息存储到etcd中。
kube-controller-manager监听kube-apiserver的状态变化,确保集群中的实际状态与用户的期望状态保持一致。
8. 状态调整
实际状态与期望状态的对比:
kube-controller-manager会对比实际状态与期望状态。如果发现实际状态与期望状态不一致,kube-controller-manager将指挥kubelet进行相应的调整。这可能包括重新启动Pod、迁移Pod到其他节点等操作,以确保Pod的状态符合预期。
9. 总结
在这个完整的流程中,用户的请求从入口流入Master节点,通过kube-apiserver进行处理,存储到etcd,然后由kube-scheduler进行调度,最终在Node节点上由kubelet创建Pod。Pod的状态通过kube-controller-manager进行监控和调整,确保实际状态与期望状态一致。
必会********
在k8s里如何做
docker run -d --name 由k8s资源清单文件控制
--net 由 pause镜像控制
安全相关的