k8s的二进制部署和网络类型

k8s的二进制部署

master01:192.168.233.10 kube-apiserver kube-controller-manager kube-scheduler etcd

master02:192.168.233.20 kube-apiserver kube-controller-manager kube-scheduler

node01:192.168.233.30 kubelet kube-proxy etcd

node02:192.168.233.40 kubelet kube-proxy etcd

负载均衡:nginx+keepalive

master:192.168.233.50

backup:192.168.233.60

[root@10 ~]# systemctl stop firewalld

[root@10 ~]# setenforce 0

[root@10 ~]# iptables -t nat -F

[root@10 ~]# iptables -t mangle -F

[root@10 ~]# iptables -X

[root@10 ~]# swapoff -a

[root@10 ~]# free -h

              total        used        free      shared  buff/cache   available

Mem:           7.6G        302M        7.0G        9.1M        379M        7.0G

Swap:            0B          0B          0B

k8s在设计时,为了提升性能,默认是不使用swap交换分区,kubenetes在初始化时,会检测swap是否关闭

[root@10 ~]# hostnamectl set-hostname master01

[root@10 ~]# su

[root@master01 ~]# vim /etc/hosts

[root@master01 ~]# vim /etc/sysctl.d/k8s.conf

net.bridge.bridge-nf-call-ip6tables=1

net.bridge.bridge-nf-call-iptables=1

net.ipv6.conf.all.disable_ipv6=1

net.ipv4.ip_forward=1

[root@master01 ~]# sysctl --system

部署第一个组件

存储k8s的集群信息和用户配置组件etcd

etcd是一个高可用---分布式的键值存储数据库

采用raft算法,保证节点信息一致性。etcd时go语言写的

etcd的端口:2379(提供API服务,api接口。对外为客户端提供通信)   2380(内部服务的通信端口)

etcd一般是集群部署,由于etcd有选举leader的机制,至少要3台或者奇数台

k8s的内部通信依靠证书认证、密钥认证

证书的签发环境:

cfssl:证书签发的命令工具

cfssl-certinfo:查看证书信息的工具

cfssljson: 把证书的格式转化成json格式,变成文件的承载式证书

ca-config.ison 证书颁发机构的配置文件,定义了证书生成的策略,默认的过期时间和模版

ca-csr.ison 签名的请求文件,包括一些组织信息和加密方式

ca.pem 根证书文件,用于给其他组件签发证书

server.csr  etcd的服务器签发证书的请求文件

server-key.pem  etcd服务器的私钥文件

ca.csr  根证书签发请求文件

ca-key.pem  根证书的私钥文件

etcd- cert.sh  用于通过服务器验证客户端

server-csr.ison  用于生成etcd的服务器证书和私钥签名文件

server.pem  etcd服务器的证书文件,用于加密和认证etcd节点之间的通信

kubectl config set-context default \

--cluster=kubernetes \

--user=cluster-admin

-kubeconfig=$KUBE CONFIG)kubect! config use-context default --kubeconfig=$(KUBE CONFIG)

context 上下文:

定义连接到哪个k8s集群,以及使用哪个用户的身份来进行操作,上下文包含了集群、用户和可选命名空间的信息

在k8s的集群中

kubectl create clusterrolebinding kubelet-bootstrap -clusterrole-system:node-bootstrapper --user-kubelet-bootstrap

RBAC授权,生成和赋权用户kubelet-bootstrap,发起node节点的请求认证,通过CSR加密认证实现NODEK节点加入到集群当中。

kubelet获取master的验证信息和获取API-server接口的通信认证。

k8s网络类型

k8s中的通信模式:

1、pod内部之间容器与容器之间的通信

在同一个pod中的容器共享资源和网络,使用同一个网络命名空间。他们可以直接通信

2、同一个node节点之内,不同pod之间的通信

每个pod都有一个全局的真实的IP地址。同一个node之间的不同pod可以直接使用对方pod的ip地址进行通信

pod1和pod2是通过doker0的网桥来进行通信。

3、不同node节点上的pod之间如何进行通信

cni插件:cni是一个标准接口,用于容器运行时调用网络插件,配置容器网络,负责设置容器的网络命名空间,ip地址,路由等等参数

插件①:Flannel

Flannel 的功能是让集群中的不同Docker 容器都具有全集群唯一的虚拟IP地址。

Flannel 是 Overlay 网络的一种,在底层物理网络的基础之上,创建一个逻辑的网络层。二层+三层集合。二层是网络层,三层是逻辑上的网络层。Overlay网络也是一种网络虚拟化的技术

Flannel支持的数据转发方式:①UDP(默认模式。应用转发,配置简单,性能最差。一般不用); ②VXLAN(基于内核转发。也是最常用的网络类型(小集群都用这个),用的最多); ③Host-gw(性能最好,但是配置很麻烦,用的比较少)

UDP的工作模式:基于应用转发,Flannel提供路由表,Fannel封装数据包、解封装

node都会有一个fannel的虚拟网卡

数据流向

k8s的二进制部署和网络类型_第1张图片

VXLAN的工作模式:使用的就是Overlay的虚拟隧道通信技术。二层+三层的模式。

UDP基于应用层用户态,

VXLAN:fannel提供给路由表,内核封装、解封装

flannel1.1接口

数据流向

k8s的二进制部署和网络类型_第2张图片

根据vni+IP地址来寻找目标节点的通信地址

flannel:每个发向容器的数据包进行封装,vxlan通过vtep打包数据,然后由内核封装成数据包,再转发到目标node节点。到了目标节点,还有个解封装过程,再发送目标pod,性能有一定影响

插件②:Calico(直接路由,性能最好)

calico:采用直接路由的方式(BGP动态路由)。不需要修改报文,统一直接通过路由表转发,路由表会很复杂,运行维护的要求比较高

BGP模式的特点:交换路由信息的外部网关协议,可以连接不同的节点。node节点可能不是一个网段,BGP实现可靠的、最佳的、动态的路由选择。自动识别相邻的路由设备。

calico不使用overlay,也不需要交换,直接通过虚拟路由实现,每一台虚拟路由都通过BGP转发

核心组件:

1、felix  也是运行在主机的一个个pod,一个进程,k8s daemonset的方式部署(后台部署)的pod

daemonset会在每个node节点部男相同的pod.后台的运行方式

负责在宿主机上插入路由规则,维护calico需要的网络设备。网络接口管理、监听、路由等等

2、BGP Client(bird)  BGP的客户端,专门负责在集群中分发路由规则的信息。每一个节点都会有一个BGP Client

BGP协议用广播的方式通知其他节点的分发路由的规则,实现网络互通

etcd:保存路由信息;负责整个网络元数据的一致性(保证整个网络状态的一致和准确)

Calico的工作原理:

路由表来维护每个pod之间的通信

创建好pod之后,添加一个设备cali  veth pair设备

虚拟网卡: veth pair是一对设备,虚拟的以太网设备

一头连接在容器的网络命名空间 eth0

另一头连接宿主机的网络命名空间 cali

IP地址分配:veth pair连接容器的部分给容器分配IP地址,这个IP地址是唯一标识,宿主机也会被veth pair分配一个calico网络的内部IP地址。和其他节点上的容器进行通信

veth设备:容器发出的IP地址通过veth pair设备到宿主机,宿主机就根据路由规则的下一跳地址发送到网关(目标宿主机,目标节点),数据包到达目标宿主机,veth pari设备,目标宿主机也是根据路由规则,下一跳地址,转发到目标容器

数据流向

k8s的二进制部署和网络类型_第3张图片

ipip模式:会生成一个tunnel隧道.数据包都是在tunnel内部打包 封装:宿主机IP、容器内部的IP地址

常用的网络插件类型:flannel和calico

flannel特点:配置简单,功能简单,基于overlay叠加网络实现,在物理层的网络上再封装一个虚拟的网络。

vxlan是虚拟三层网络。UDP是默认模式。host-gw模式。

vxlan:最多的模式,vni+IP进行转发,flannel提供路由表,内核封装和解封装

由于封装和解封装的过程,对数据传输的性能会有影响,没有网络策略配置的能力UDP协议

默认网段:10.244.0.0/16

calico特点:功能强大,基于路由表进行转发,没有封装和解封装的过程。具备网络策略的配置能力。但是路由表维护起来复杂

模式:ipip   BGP

BGP:通过为IP路由表的前缀来实现目标主机的可达性

对比ipip模式,BGP模式没有隧道,BGP模式下,pod的数据包直接通过网卡发送到目的地

ipip的隧道:在隧道进行数据包的封装ipv4 --- ipv4

简单的小集群:flannel

扩容、配置网络策略:calico

coredns:可以为集群当中的service资源创建一个域名和IP进行对应解析的关系

service是对外提供访问的地址,现在加入DNS机制之后,可以直接访问服务名

你可能感兴趣的:(kubernetes,容器,云原生)