K8S Calico网络插件

您所在的位置:网站首页 kubeadmin安装calico插件 K8S Calico网络插件

K8S Calico网络插件

2023-08-26 06:04| 来源: 网络整理| 查看: 265

0.前言

参考文档:https://github.com/containernetworking/cni Pod网络插件,为了实现Pod网络而需要的插件、组件。由于Kubernetes通过开放的CNI接口来允许插件的接入,所以它又称之为CNI网络插件。 为了解决跨主机容器间通信问题,市面上存在很多解决方案,为了兼容和规范这些解决方案,Kubernetes仅设计了网络模型,却将Pod网络的实现交给了CNI网络插件,并允许网络插件通过标准的CNI(Container Network Interface,容器网络接口)连接到容器管理系统。 CNI网络插件主要解决的就是容器跨主机通信问题而存在的,并使跨主机间运行的Pod位于同一个网络平面,其大致解决步骤通常有两步:分配设置自定义容器网络(PodIP在集群中全局唯一性)和实现容器网络通信(处理方法通常有路由、覆盖网络{Vxlan、IPIP}等等)。 每个Pod都会创建一个名叫"pause"的根容器,其他运行的业务容器都是复制该容器的网络,这个容器就是Kubernetes为了自定义网络等特殊功能而存在的。 CNI网络插件分为以下四种:

MAIN,主要的,创建接口,主要网络的实现。如:bridge、ipvlan、loopback、macvlan、ptp、vlan、host-device。 Windows,特用于Windows的MAIN插件。如:win-bridge、win-overlay。 IPAM,仅提供IP地址分配功能。如:dhcp、host-local、static。 META,其他插件,通过调用第三方插件来实现网络功能。如:tuning、portmap、bandwidth、sbr、firewall、flannel。

光单独靠一种CNI网络插件是无法实现完整的Pod网络通信和更高级的网络策略功能的,第三方组织可以灵活的组合这些CNI插件实现基本Pod网络功能和更高级功能,所以市面上流行出来很多解决方案。 在现今,比较常用的流行的Pod网络解决方案有Flannel和Calico(支持网络策略功能)、Canal(由Flannel实现网络通信+Calico提供网络策略)。

1.Calico概述

参考文档:https://projectcalico.docs.tigera.io/ Calico是一款广泛采用、久经考验的开源网络和网络安全解决方案,适用于Kubernetes、虚拟机和裸机工作负载。与Flannel对比,Calico除了支持基本网络功能的实现之外,它还支持全套Kubernetes网络策略功能,以及在其之上扩展网络策略。

1.1.Calico组件

Calico主要由以下组件组成:

1.1.1.CNI Plugin

CNI网络插件,Calico通过CNI网络插件与kubelet关联,从而实现Pod网络。

1.1.2.Calico Node

Calico节点代理是运行在每个节点上的代理程序,负责管理节点路由信息、策略规则和创建Calico虚拟网络设备。 Calico Node主要由以下子模块程序组成:

Felix,Calico代理程序。运行在每个节点上的守护进程,它主要负责管理节点上网络接口、为节点创建路由信息和ACL规则、以及报告当前节点网络的健康状态给控制器等工作。 BIRD-BGP客户端,BIRD是一个项目的简称,全称为BIRD Internet Routing Daemon,BIRD是一个类UNIX系统下旨在开发一个功能齐全的IP路由守护进程,它是一个路由软件,可以实现多种路由协议,如BGP、OSPF、RIP等。在Calico中,BIRD是一个BGP客户端,用于使用BGP协议广播给其他主机动态的学习路由规则。更多了解BIRD可参考:https://bird.network.cz/。 BIRD-Route Reflector(可扩展的组件),BGP客户端在每个节点上运行,其随着节点数量越来越多,一个BGP客户端需要连接更多数量的其他BGP客户端,其网络连接的数量非常多且网络会变得复杂。在节点之外,允许将BIRD程序配置成"Route Reflector"路由反射器工作方式,BGP客户端可以直接连接到"Route Reflector"路由反射器,而不是很多数量的其他BGP客户端,从而减少网络连接的数量,以提高BGP网络的性能。 1.1.3.Calico Controller

Calico网络策略控制器。允许创建"NetworkPolicy"资源对象,并根据资源对象里面对网络策略定义,在对应节点主机上创建针对于Pod流出或流入流量的IPtables规则。

1.1.4.Calico Typha(可选的扩展组件)

Typha是Calico的一个扩展组件,用于Calico通过Typha直接与Etcd通信,而不是通过kube-apiserver。通常当K8S的规模超过50个节点的时候推荐启用它,以降低kube-apiserver的负载。每个Pod/calico-typha可承载100~200个Calico节点的连接请求,最多不要超过200个。

1.2.Calico网络实现

Calico支持两种类型网络工作模式(后端机制): 如果物理主机在同一2层网络中,则建议采用使用BGP动态路由通信方式;如果物理主机是跨子网通信的话,可能由于到达目标主机的跳数太多导致性能下降,所以建议使用覆盖网络模式。

1.2.1.动态路由模式(dynamic routing)

采用BGP动态路由协议自动学习来自其他AS自治系统上的路由条目,即其他节点主机上的路由条目。 类似于Flannel的Host-GW模式,不过它没有不能跨子网的限制。 想要更多了解BGP动态路由技术,可以参考其他网络资料,这里就不过多的阐述了。

1.2.2.覆盖网络模式(overlay network)

采用IPIP或VXLAN协议封装底层网络,然后通过上层物理覆盖网络通信。 将底层的Pod网络源目IP+数据封装到上层物理网络源目IP的数据包中,由同一个网络的物理主机通过直连路由完成数据包的传输和解封装,以实现底层Pod网络通信。 Calico对于覆盖网络的工作模式有:

IPIP,使用IPIP封装协议。当IPIP启用的时候不允许启用VXLAN。 VXLAN,使用VXLAN封装协议。当VXLAN启用的时候不允许启用IPIP。 IPIPCrossSubnet,当物理主机是跨子网的情况下才使用IPIP覆盖网络通信方式,正常情况下使用BGP路由模式。 VXLANCrossSubnet,当物理主机是跨子网的情况下才使用VXLAN覆盖网络通信方式,正常情况下使用BGP路由模式。 None,不使用IPIP或VXLAN覆盖网络模式。

IPIP比VxLAN的数据包头更小,但安全性较差。 虚接口:IPIP默认创建的三层虚接口通常叫"tunl0",而VXLAN默认创建的三层虚接口叫"vxlan.calico"。三层虚接口通常负责数据包的封装和解封装工作。

1.3.了解Calico对CIDR子网的划分(blockSize)

CIDR,Classless Inter-Domain Routing,无类别域间路由,在Kubernetes中指基于CIDR的网络划分方案,为Pod分配的子网范围(如:10.244.0.0/12)。 通常默认情况下,PodIP地址范围(--pod-network-cidr)为10.244.0.0/16,它拥有16^2=256*256=65536个地址(包括网络地址+广播地址)可拆分成独立子网。 Calico为每个节点都会创建一个独立子网,即从CIDR大的地址池中划分较小范围的地址池给到每个节点。 Calico可以通过修改配置blockSize块大小来设置每个节点分配的独立子网的范围池大小。这边默认值IPV4=26,IPV6=122。 二进制掩码26(11111111 11111111 11111111 11000000)转换成十进制掩码即=255.255.255.192,即每个节点的子网可以有64个IP地址,减去广播地址和网络地址,可为Pod分配的有效IP地址有62个。

1.4.Calico网络策略

Calico使用IPtables实现网络策略功能,在Kubernetes中可以创建"NetworkPolicy"资源对象传给Calico的控制器,由Calico Node根据NetworkPolicy定义的规则在相关节点上创建对应的IPtables规则,以实现对Pod出入口网络流量的安全策略限制。

2.安装Calico

Calico有两种安装方式:

使用calico.yaml清单文件安装 使用Tigera Calico Operator安装Calico(官方最新指导) Tigera Calico Operator,Calico操作员是一款用于管理Calico安装、升级的管理工具,它用于管理Calico的安装生命周期。从Calico-v3.15版本官方开始使用此工具。 Calico安装要求: x86-64, arm64, ppc64le, or s390x processor 2个CPU 2GB运行内存 10GB硬盘空间 RedHat Enterprise Linux 7.x+, CentOS 7.x+, Ubuntu 16.04+, or Debian 9.x+ 确保Calico可以管理主机上的cali和tunl接口。 2.1.使用calico.yaml清单文件安装Calico

参考文档:https://projectcalico.docs.tigera.io/archive/v3.14/getting-started/kubernetes/quickstart 当前主机环境:

主机系统:CentOS Linux release 7.6.1810 (Core) Kubernetes版本:v1.23.0 Calico版本:v3.23.0 其他提示:默认的calico.yaml清单文件无需手动配置Pod子网范围(如果需要,可通过CALICO_IPV4POOL_CIDR指定),默认使用kube-controller-manager的"--cluster-cidr"启动项的值,即kubeadm init时指定的"--pod-network-cidr"或清单文件中使用"podSubnet"的值。 1、配置Docker镜像加速

镜像加速由阿里云"容器加速器"提供。 由于安装清单中所使用的镜像来源于国外站点,所以需要配置为国内镜像源才能正常下载镜像到国内主机。 创建配置文件"/etc/docker/daemon.json",并写入以下内容:

[root@localhost ~]# mkdir -p /etc/docker [root@localhost ~]# cat /etc/docker/daemon.json


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3