Kubernetes(k8s):网络插件之Calico安装与详解

Kubernetes(k8s):网络插件之Calico安装与详解

  • 1、什么是Calico?
  • 2、安装和配置Calico(控制节点-master执行)
  • 3、配置网络策略
  • 4、 Calico 的 yaml 文件部分详解
    • 1、ConfigMap配置
    • 2、DaemonSet 配置
  • 5、calico-kube-controllers 解析


💖The Begin💖点点关注,收藏不迷路💖

在Kubernetes集群中,网络插件对于容器间的通信以及与外部网络的连接至关重要。Calico是一个流行的Kubernetes网络插件,它提供了高性能的网络和安全解决方案,适用于各种部署场景。

1、什么是Calico?

Calico是一个开源的网络和安全解决方案,旨在简化和增强Kubernetes集群的网络功能。它采用了BGP协议作为路由协议,通过直接路由的方式实现了高效的容器间通信。

Calico还提供了丰富的网络策略功能,允许用户定义细粒度的网络访问控制规则。

Calico的优势

1、高性能: Calico采用了纯三层架构,避免了网络包的二层封装和解封装过程,提高了网络传输效率和性能。
2、强大的网络策略: Calico支持基于标签的网络策略,可以轻松地定义3、和实施网络访问控制规则,保护容器间的通信安全。
4、易于部署和管理: Calico提供了简单的部署和管理工具,可以轻松集成到Kubernetes集群中,并提供了丰富的监控和调试功能。
5、跨云和混合云支持: Calico支持多种部署场景,包括公有云、私有云和混合云,为用户提供了灵活的选择。

2、安装和配置Calico(控制节点-master执行)

1、下载Calico YAML文件

首先,从Calico的官方GitHub仓库下载Calico YAML文件。可以通过以下命令下载Calico YAML文件,下载文件时不进行 SSL 证书检查:

wget https://docs.projectcalico.org/v3.25/manifests/calico.yaml --no-check-certificate

2、部署Calico

然后,使用kubectl命令将Calico YAML文件部署到Kubernetes集群中:

kubectl apply -f calico.yaml

在这里插入图片描述

3、验证部署

等待片刻,直到Calico组件在集群中完全部署和运行。你可以使用以下命令检查Calico的Pod是否正常运行:

kubectl get nodes kubectl get pods -n kube-system -l k8s-app=calico-node

在这里插入图片描述

🎈 :✨✨✨可见只有安装了网络插件,k8s集群下可以正常使用。✨✨✨

kubectl get nodes命令用于获取集群中所有节点的信息。以下是输出详解:1、节点名称(NAME):列出了集群中每个节点的名称。2、状态(STATUS):显示节点的当前状态。常见状态包括:Ready:节点处于正常工作状态,可以接受Pod的调度。
NotReady:节点无法接受新的Pod调度,可能由于网络或其他问题导致。
Unknown:无法确定节点的状态,可能由于与节点的通信问题而导致。
角色(ROLES):显示节点在集群中的角色。通常情况下,一个节点可以扮演多个角色,如:控制平面节点(master)、工作节点(worker)等。3、版本(VERSION):显示节点上运行的Kubernetes版本。
kubectl get pods -n kube-system -l k8s-app=calico-node命令用于获取在kube-system命名空间中,具有标签k8s-app=calico-node的所有Pod的信息。以下是输出详解:1、名称(NAME):列出了满足条件的所有Pod的名称。2、就绪(READY):显示Pod中容器的就绪状态。这是一个由两个数字组成的值,表示容器当前的就绪容器数/容器总数。3、状态(STATUS):显示Pod的当前状态。常见状态包括:Running:Pod正在运行中。
Pending:Pod处于等待状态,尚未被调度到节点上运行。
CrashLoopBackOff:Pod由于持续崩溃而无法正常运行。
ContainerCreating:Pod中的容器正在创建中。
Terminating:Pod正在被终止。4、重启(RESTARTS):显示Pod中容器的重启次数。

3、配置网络策略

一旦Calico成功部署,就可以开始配置网络策略。你可以使用Kubernetes的NetworkPolicy资源来定义网络策略,并应用到你的Pod中。

下面是一个简单的 NetworkPolicy 的例子,假设你想要限制只有特定的 Pod 才能访问另一个 Pod:
编辑 allow-from-namespace-a.yaml 文件:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: allow-from-namespace-a
spec:podSelector:matchLabels:app: myapppolicyTypes:- Ingressingress:- from:- namespaceSelector:matchLabels:name: namespace-a

上面的配置意味着只有来自名为 “namespace-a” 的命名空间中具有标签 “app=myapp” 的 Pod 才能访问被这个 NetworkPolicy 保护的 Pod。

2、应用配置文件:

使用 kubectl 命令将修改后的allow-from-namespace-a.yaml 文件中的配置应用到你的 Kubernetes 集群中:

kubectl apply -f allow-from-namespace-a.yaml

4、 Calico 的 yaml 文件部分详解

1、ConfigMap配置

ConfigMap 是 Kubernetes 中一种用于存储非敏感数据的对象,它可以用来存储配置文件、环境变量、命令行参数等信息。

ConfigMap 通常用于将应用程序的配置与容器镜像分离,使得配置可以独立于容器进行管理和修改,从而提高了应用程序的可移植性和可维护性。

kind: ConfigMap
apiVersion: v1
metadata:name: calico-confignamespace: kube-system
data:# Typha is disabled.typha_service_name: "none"# Configure the backend to use.calico_backend: "bird"# Configure the MTU to use for workload interfaces and tunnels.# By default, MTU is auto-detected, and explicitly setting this field should not be required.# You can override auto-detection by providing a non-zero value.veth_mtu: "0"# The CNI network configuration to install on each node. The special# values in this config will be automatically populated.cni_network_config: |-{"name": "k8s-pod-network","cniVersion": "0.3.1","plugins": [{"type": "calico","log_level": "info","log_file_path": "/var/log/calico/cni/cni.log","datastore_type": "kubernetes","nodename": "__KUBERNETES_NODE_NAME__","mtu": __CNI_MTU__,"ipam": {"type": "calico-ipam"},"policy": {"type": "k8s"},"kubernetes": {"kubeconfig": "__KUBECONFIG_FILEPATH__"}},{"type": "portmap","snat": true,"capabilities": {"portMappings": true}},{"type": "bandwidth","capabilities": {"bandwidth": true}}]}
kind: 定义资源类型,这里是一个 ConfigMap,用于存储配置信息。
apiVersion: API 版本,这里使用的是 Kubernetes API 的 v1 版本。
metadata: 元数据部分,包含了该 ConfigMap 的名称和命名空间。
name: ConfigMap 的名称,这里命名为 calico-config。
namespace: ConfigMap 所在的命名空间,这里是 kube-system,通常 Calico 相关的配置会放在这个命名空间中。
data: 数据部分,包含了实际的配置信息。
typha_service_name: Typha 是 Calico 的一个组件,这里设置为 "none" 表示禁用 Typha。
calico_backend: 指定 Calico 使用的后端,这里设置为 "bird"。
veth_mtu: 配置工作负载接口和隧道使用的 MTU(最大传输单元)大小,默认为自动检测。
cni_network_config: CNI 网络配置,这里定义了 Calico 使用的 CNI 插件的配置信息。具体来说:
name: 网络的名称。
cniVersion: CNI 规范的版本。
plugins: 插件列表,包含了 Calico、portmap 和 bandwidth 三种插件的配置信息。
calico: Calico CNI 插件的配置信息,包括日志级别、数据存储类型、节点名称、MTU 大小、IPAM 类型、策略类型等。
portmap: Portmap 插件的配置信息,用于配置端口映射。
bandwidth: Bandwidth 插件的配置信息,用于配置带宽控制。

2、DaemonSet 配置

DaemonSet 的配置文件,用于部署 Calico 的Agent 在 Kubernetes 集群中的每个节点上。其中包含了许多关于 Pod 模板、初始化容器等的详细配置信息,以确保 Calico 在 Kubernetes 集群中的每个节点上都能正常运行。

kind: DaemonSet
apiVersion: apps/v1
metadata:name: calico-nodenamespace: kube-systemlabels:k8s-app: calico-node
spec:selector:matchLabels:k8s-app: calico-nodeupdateStrategy:type: RollingUpdaterollingUpdate:maxUnavailable: 1template:metadata:labels:k8s-app: calico-nodespec:nodeSelector:kubernetes.io/os: linuxhostNetwork: truetolerations:# Make sure calico-node gets scheduled on all nodes.- effect: NoScheduleoperator: Exists# Mark the pod as a critical add-on for rescheduling.- key: CriticalAddonsOnlyoperator: Exists- effect: NoExecuteoperator: ExistsserviceAccountName: calico-node# Minimize downtime during a rolling upgrade or deletion; tell Kubernetes to do a "force# deletion": https://kubernetes.io/docs/concepts/workloads/pods/pod/#termination-of-pods.terminationGracePeriodSeconds: 0priorityClassName: system-node-criticalinitContainers:# This container performs upgrade from host-local IPAM to calico-ipam.# It can be deleted if this is a fresh installation, or if you have already# upgraded to use calico-ipam.- name: upgrade-ipamimage: docker.io/calico/cni:v3.25.0imagePullPolicy: IfNotPresentcommand: ["/opt/cni/bin/calico-ipam", "-upgrade"]envFrom:- configMapRef:# Allow KUBERNETES_SERVICE_HOST and KUBERNETES_SERVICE_PORT to be overridden for eBPF mode.name: kubernetes-services-endpointoptional: trueenv:- name: KUBERNETES_NODE_NAMEvalueFrom:fieldRef:fieldPath: spec.nodeName- name: CALICO_NETWORKING_BACKENDvalueFrom:configMapKeyRef:name: calico-configkey: calico_backendvolumeMounts:- mountPath: /var/lib/cni/networksname: host-local-net-dir- mountPath: /host/opt/cni/binname: cni-bin-dirsecurityContext:privileged: true
kind: DaemonSet: 表示这是一个 DaemonSet 资源,DaemonSet 会确保在 Kubernetes 集群的每个节点上都运行一个 Pod 的副本。
apiVersion: apps/v1: 指定了 Kubernetes API 版本。
metadata: 元数据部分,包含了资源的名称、命名空间、标签等信息。
name: calico-node: 资源的名称为 calico-node。
namespace: kube-system: 资源所属的命名空间是 kube-system,这是 Kubernetes 系统组件的命名空间。
labels: 资源的标签,用于标识和选择资源。
spec: 指定了 DaemonSet 的规范,包括 Pod 模板、选择器、更新策略等。
selector: 选择器用于选择将在哪些节点上运行 DaemonSet 控制的 Pod。
matchLabels: 匹配标签,选择具有指定标签的节点。
updateStrategy: 更新策略,定义了在更新 DaemonSet 时采取的策略。
type: RollingUpdate: 采用滚动更新策略,逐步更新每个节点上的 Pod。
rollingUpdate: 指定了滚动更新的相关配置,包括最大不可用 Pod 数量等。
maxUnavailable: 1: 在进行滚动更新时,允许的最大不可用 Pod 数量为 1。
template: Pod 模板,定义了将在每个节点上运行的 Pod 的规范。
metadata: Pod 元数据,包含标签等信息。
spec: Pod 的规范。
nodeSelector: 节点选择器,指定了要将 Pod 调度到哪些节点上。
kubernetes.io/os: linux: 选择操作系统为 Linux 的节点。
hostNetwork: true: 使用主机网络命名空间,允许 Pod 直接使用节点的网络命名空间。
tolerations: 容忍策略,允许在特定情况下将 Pod 调度到不符合标签要求的节点上。
serviceAccountName: calico-node: Pod 使用的服务账号名称。
terminationGracePeriodSeconds: 0: Pod 终止的优雅期限为 0 秒,表示立即终止。
priorityClassName: system-node-critical: 指定 Pod 的优先级类别,这里是系统关键节点的优先级类别。
initContainers: 初始化容器,用于在主容器启动之前执行一些操作。
upgrade-ipam: 升级 IP 地址管理器 (IPAM) 的初始化容器。
image: 使用的容器镜像。
command: 容器执行的命令。
envFrom: 从配置映射中获取环境变量。
env: 定义环境变量。
volumeMounts: 挂载的卷。
securityContext: 安全上下文,指定容器是否具有特权等。

5、calico-kube-controllers 解析

calico-kube-controllers 是 Calico 架构中的一个重要组件,它与 Calico Agent 和 Calico CNI 等其他组件协同工作,确保 Kubernetes 集群中的网络策略能够得到正确地应用和执行。

通常会随着 Calico CNI 插件一起部署在 Kubernetes 集群中。在典型的 Calico 安装中,calico-kube-controllers 会作为一个 Kubernetes Pod 部署在 kube-system 命名空间中。

可以通过以下命令来检查是否已经部署了 calico-kube-controllers:

[root@k8s-master ~]# kubectl get pods -n kube-system -l k8s-app=calico-kube-controllers
NAME                                       READY   STATUS    RESTARTS   AGE
calico-kube-controllers-64cc74d646-6dbwb   1/1     Running   0          45m
[root@k8s-master ~]# 

在这里插入图片描述

calico-kube-controllers 是 Calico 项目的一部分,它是一个 Kubernetes 控制器,用于管理 Calico 网络策略和其他相关资源。该控制器负责监视 Kubernetes 集群中的网络策略对象,并确保 Calico 网络策略与这些 Kubernetes 网络策略保持同步。

具体来说,calico-kube-controllers 主要执行以下任务:

1、同步网络策略: 将 Kubernetes 中定义的网络策略同步到 Calico 中,确保网络策略在整个集群中得到正确地应用和执行。

2、管理全局网络策略: Calico 支持全局网络策略,这些策略会应用到整个 Calico 网络中的所有 Pod。calico-kube-controllers 负责管理这些全局网络策略的创建、更新和删除。

3、处理策略引用: 当 Kubernetes 对象(如 Service、Ingress 等)引用了网络策略时,calico-kube-controllers 会相应地更新 Calico 中的策略状态,以确保正确的网络策略被应用。

4、监视资源对象: 监视 Kubernetes 中的资源对象的变化,如网络策略、Service 等,并根据变化更新 Calico 中相应的配置和状态。

在这里插入图片描述


💖The End💖点点关注,收藏不迷路💖

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/787321.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【智能算法】蜜獾算法(HBA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2021年,FA Hashim等人受到自然界中蜜獾狩猎行为启发,提出了蜜獾算法((Honey Badger Algorithm,HBA)。 2.算法原理 2.1算法思想 蜜獾以其…

Mysql 常用SQL语句

1、查看mysql中所有的数据库, show databases; 2、创建库 create database 库名;(也可以用 create database if not exists 库名; 表示如果库不存在再创建) 例:create database if not exists ecology; 3、删除库 …

[网鼎杯 2020 朱雀组]Nmap1

打开题目 在源代码中看到了提示 先随便输入127.0.0.1 那我们试试输入 127.0.0.1 | ls 可以看到 | 被转义符号\所转义 那我们输入 127.0.0.1 /| ls 得到三条反斜线 我们猜测,我们输入的东西是被escapeshellarg和escapeshellcmd处理过后的结果 我们输入的东西必须…

element-ui tag 组件源码分享

今日简单分享一下 tag 组件的源码实现,主要从以下三个方面来分享: 1、tag 组件页面结构 2、tag 组件属性 3、tag 组件方法 一、tag 组件页面结构 vue2 中使用 jsx 语法小结: 1.1 需要安装 babel-plugin-transform-vue-jsx 和 vue/babel-…

echarts仪表盘特殊样式

const drawChartOption function (value, max) {const colorConfig {name: 测试,colorList: {text: #fff,line2: {type: linear,x: 0, // 右y: 0, // 下x2: 1, // 左y2: 0, // 上colorStops: [// {// offset: 0,// color: transparent// },{offset: 0.1,color: #031e…

服务器托管让服务器管理更轻松高效

在信息化飞速发展的今天,服务器作为企业数据处理和信息存储的核心设备,其管理的重要性日益凸显。服务器托管,作为一种高效、专业的服务器管理方式,正逐渐成为众多企业的首选。那么,服务器托管究竟是如何让服务器管理更…

AI版青花瓷

3月22日,Suno正式上线V3版本,很多人都称之为AI音乐的"ChatGPT"时刻,从此人人都可以是作曲家,先来听下最近霸榜的只因你太美baby来感受下它的厉害之处(我已经被洗脑了哈哈) 1. Suno 介绍 根据Sun…

便携式组件el测试仪讲解

TH-EL3便携式组件EL(电致发光)测试仪是一种专门用于检测光伏组件质量的设备。该设备基于电致发光的原理,通过非破坏性的方式快速准确地检测出光伏组件内部的各种缺陷和问题。 产品概述 便携式组件EL测试仪是一种轻便、易于携带的设备&#…

Mysql实战--为什么表数据删掉一半,表文件大小不变

经常会有同学来问我,我的数据库占用空间太大,我把一个最大的表删掉了一半的数据,怎么表文件的大小还是没变? 那么今天,我就和你聊聊数据库表的空间回收,看看如何解决这个问题。 这里,我们还是针…

云容器引擎CCE弹性伸缩

CCE弹性伸缩介绍 CCE的弹性伸缩能力分为如下两个维度: 工作负载弹性伸缩:即调度层弹性,主要是负责修改负载的调度容量变化。例如,HPA是典型的调度层弹性组件,通过HPA可以调整应用的副本数,调整的副本数会…

数据结构进阶篇 之 【堆的应用】(堆排序,TOP-K问题)详细讲解

所有人都关心我飞的高不高,只有我妈关心我翅膀硬不硬 一、堆的应用 1. 堆排序 1.1 建堆 1.2 利用堆删除思想来进行排序 2.TOP-K问题 二、完结撒❀ –❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀-正文开始-❀–❀–❀–❀–❀–❀–❀–❀–…

如何快速有效地压缩图片大小?这款在线工具可保证图片质量

当你需要上传或发送大量图片时,大体积的图片文件往往会让我们感到困扰,如何快速有效的压缩图片大小成了比较关键的问题,在图片压缩时,我们还需要担心的就是会不会对图片质量有损害,想要做到图片无损压缩就需要用到一些…

go和Java该如何选择?

今天,每个企业都需要一个软件应用程序,从初创公司到大型公司如果你想以最有效的方式运行业务,你必须把它列在网上。竞争并没有就此结束 但重要的是您能够以多简单、多快速的方式创建软件应用程序-这是引领竞争的正确方式。 选择最适合您的软…

MegaSeg Pro for Mac v6.3.1 注册激活版 音视频DJ混音工具

MegaSeg Pro for Mac是一款专业的DJ和广播自动化软件,旨在为音乐专业人士提供强大的音乐播放和演播功能。这款软件具有多种功能,包括强大的音乐库管理,支持导入和组织大量音乐文件,可以轻松管理你的音乐收藏。它支持广泛的音频格式…

WPF学习笔记-FlowDocument流文档基础知识和基本操作

文章目录 概述一、块元素和内联元素1.1 块元素(Block类)1.2 内联元素(Inline类)二、Paragraph元素2.1 基本属性设置2.2 将内联元素Inline添加到Inlines中2.3 设置中西文字体不一样 三、Table元素3.1 添加新的Table3.2 添加列3.3 添…

深度学习系列-python实现-初步学习构建神经网络

深度学习系列-python实现-初步学习构建神经网络 前言1.在Keras中加载MNIST数据集2.构建简单的神经网络模型3.训练模型4.模型的预测和评估5.总结 前言 在数字时代,数据已经成为了一种无处不在的资源。从商业分析到科学研究,从人工智能到机器学习&#xf…

固态硬盘一年不通电数据就没了吗?丢失了怎么办

随着数字化时代的到来,数据的安全性和持久性变得尤为重要。作为现代电子设备中常见的存储设备,固态硬盘(SSD)以其高效、快速的特点受到广大用户的青睐。然而,有关固态硬盘长时间不通电后数据会丢失的担忧也时常困扰着用…

报错:AttributeError: module ‘numpy‘ has no attribute ‘unit8‘解决

错误问题: 解决方法: 哥们姐们仔细一点吧这个unit8是打错了,无非就是uint8写成了unit8 应该是【uint8】,以后敲代码仔细点哦

从零开始学数据分析之数据分析概述

当今世界对信息技术的依赖程度在不断加深,每天都会有大量的数据产生,我们经常会感到数据越来越多,但是要从中发现有价值的信息却越来越难。 这里所说的信息,可以理解为对数据集处理之后的结果,是从数据集中提炼出的可用…

【Leetcode】top 100 二分查找

35 搜索插入位置 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法。 基础写法!!!牢记…