2、k8s的cni网络插件和基本操作命令
kube-prxoy属于节点组件,网络代理,实现服务的自动发现和负载均衡。
k8s的内部网络模式
1、pod内的容器于容器之间的通信。
2、一个节点上的pod之间的通信,docker0网桥直接通信。
3、不同节点上的pod之间的通信:
通过物理网卡的ip地址和其他节点上的物理网卡的设备进行通信然后把流量转发到指定的pod内。
CNI作用:1、给每个pod提供一个全局的ip地址。
2、cni是一个标准接口,用于容器运行时调用网络插件,配置容器的网络。
设置容器的网络命令空间,IP地址,路由等等参数。
CNI的插件类型
CNI的插件可以让在集群内不同节点上创建的pod都拥有全局内唯一的IP地址。
flannel插件
是一种overlay网络模式,tcp数据包封装在另一种网络里面进行路由转发的模式。在二层的基础上创建一个逻辑上的网络层,可以实现跨节点的容器通信。
工作模式:udp模式,基于应用层转发,性能最差。
vxlan模式,基于内核转发,最常用的方式。
host-gw,性能最好,但是配置麻烦。
vxlan模式的工作原理:
1、数据帧从主机A上的POD1出发,进行二次封装源IP和目的IP(flannel会通过apiserver保存一张路由表到etcd)。
2、从pod1出发的数据包,经过docker0/cni0网络接口转到flannel.1接口(vxlan模式的默认接口)
3、flannel.1接口收到数据后添加vxlan头部,封装在udp报文中。
4、主机A的网卡收到flannel.1接口的数据包,封装主机A的IP和主机B的IP。
5、数据包到达主机B,vxlan默认接口8472,主机B收到数据包之后,解包,传送到8472端口,就是flannel.1接口,然后再解包,把数据转发到指定的pod。
- UDP网络:flannel.0
- vxlan:flannel.1
calico插件
把主机作为路由器,使用BGP(BGP动态路由,自动实现路由选择)同步路由的方式转发数据包。
calico的组成部分:
1、felix维护宿主机上的路由规则,以及FIB库(转发信息库)。
2、BIRD分发路由规则
3、confd配置管理组件
转发原理:
1、为每一个容器设置一个veth pair的设备。相当于桥接的功能,veth pair的一端接入宿主机的网络空间,另一端配置一个路由规则,接入容器docker0/cni0。
路由传播:
1、Felix在节点上添加pod的IP地址,添加pod的子网路由。
2、BIRD在集群内节点上建立BGP的会话,广播本机的路由节点。
3、集群内的节点学习整个路由,如何能够到达其他节点的pod的吓一跳的地址。
4、宿主机直接把数据包发送到目标主机,通过veth pair设备直接转发到目标pod。
k8s基本操作命令
查看k8s版本
查看api资源对象
查看证书api有效期时间
查看集群中组件的状态-cs
查看集群节点的状态-get
查看默认命名空间里pod的状态
查看pod的详细状态-wide
查看资源的详细信息-describe
查看pod与本机端口映射-svc
查看当前集群的命名空间
指定命名空间-n
创建命名空间
创建pod-create
- 基于deployment控制器创建pod控制器的名称是nginx1
- pod使用的镜像:nginx:1.22
- --replicas=3:pod的数量有多少 3个
pod端口映射-expose
- expose暴露出来的是service的类型,可以供内网访问的一个方式。
- --port=80:集群对外服务的端口
- NodePort:宿主机的随机端口
- target-port=80:集群里面容器暴露的端口
删除pod-delete
- 基于控制器创建的pod,删除pod相当于重启,不能把pod完全销毁。
基于控制器创建的pod删除pod副本需要删除相应的控制器
查看pod日志-logs
进入pod内的容器-exec
pod数量的扩缩容-scale
1、命令行改:kubectl scale deployment nginx --replicas=1
2、改yaml配置文件-edit
3、自动扩缩容:HPA根据cpu的负载自动扩缩容
直接创建pod-run
没有通过控制器创建的pod,可以直接删除-kubectl delete pod zw1