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

这篇具有很好参考价值的文章主要介绍了Kubernetes(k8s):网络插件之Calico安装与详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


💖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

配置calico网络插件,# Kubernetes,容器化与编排技术深度解析,kubernetes,网络插件,Calico安装与详解,运维,云原生,容器

3、验证部署

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

kubectl get nodes 

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

配置calico网络插件,# Kubernetes,容器化与编排技术深度解析,kubernetes,网络插件,Calico安装与详解,运维,云原生,容器

🎈 :✨✨✨可见只有安装了网络插件,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: myapp
  policyTypes:
  - Ingress
  ingress:
  - 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-config
  namespace: 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-node
  namespace: kube-system
  labels:
    k8s-app: calico-node
spec:
  selector:
    matchLabels:
      k8s-app: calico-node
  updateStrategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
  template:
    metadata:
      labels:
        k8s-app: calico-node
    spec:
      nodeSelector:
        kubernetes.io/os: linux
      hostNetwork: true
      tolerations:
        # Make sure calico-node gets scheduled on all nodes.
        - effect: NoSchedule
          operator: Exists
        # Mark the pod as a critical add-on for rescheduling.
        - key: CriticalAddonsOnly
          operator: Exists
        - effect: NoExecute
          operator: Exists
      serviceAccountName: 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: 0
      priorityClassName: system-node-critical
      initContainers:
        # 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-ipam
          image: docker.io/calico/cni:v3.25.0
          imagePullPolicy: IfNotPresent
          command: ["/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-endpoint
              optional: true
          env:
            - name: KUBERNETES_NODE_NAME
              valueFrom:
                fieldRef:
                  fieldPath: spec.nodeName
            - name: CALICO_NETWORKING_BACKEND
              valueFrom:
                configMapKeyRef:
                  name: calico-config
                  key: calico_backend
          volumeMounts:
            - mountPath: /var/lib/cni/networks
              name: host-local-net-dir
            - mountPath: /host/opt/cni/bin
              name: cni-bin-dir
          securityContext:
            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网络插件,# Kubernetes,容器化与编排技术深度解析,kubernetes,网络插件,Calico安装与详解,运维,云原生,容器

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 中相应的配置和状态。

配置calico网络插件,# Kubernetes,容器化与编排技术深度解析,kubernetes,网络插件,Calico安装与详解,运维,云原生,容器文章来源地址https://www.toymoban.com/news/detail-848216.html


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

到了这里,关于Kubernetes(k8s):网络插件之Calico安装与详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • k8s-kubernetes--网络策略、flannel网络插件和calico网络插件

    抽象的接口层,将 容器网络配置方案与容器平台方案解耦 CNI(Container Network Interface)就是这样的一个接口层,它定义了一套接口标准,提供了规范文档以及一些标准实现。采用CNI规范来设置容器网络的容器平台不需要关注网络的设置的细节,只需要按CNI规范来调用CNI接口即

    2024年02月07日
    浏览(26)
  • 【云原生-K8s】kubeadm搭建安装k8s集群v1.25版本完整教程【docker、网络插件calico、中间层cri-docker】

    从 k8s 1.24开始,dockershim已经从kubelet中移除,但因为历史问题docker却不支持kubernetes主推的CRI(容器运行时接口)标准,所以docker不能再作为k8s的容器运行时了,即从k8s v1.24开始不再使用docker了 但是如果想继续使用docker的话,可以在kubelet和docker之间加上一个中间层cri-docker。

    2024年02月03日
    浏览(34)
  • K8S第三讲 Kubernetes集群配置网络插件

    在Kubernetes集群中,网络插件是必需的,因为它们为Pod提供了可访问的IP地址,并确保它们能够相互通信。Kubernetes支持多种网络插件,包括Calico、Flannel、Weave Net等。这里以Calico为例介绍如何配置Kubernetes集群的网络插件。 插件配置可以参考官网: K8S集群网络插件列表 1: 安装

    2024年02月09日
    浏览(31)
  • k8s部署Calico网络插件出现Init:ImagePullBackOff

    配置环境: CentOS 7.9 docker-ce-19.03.15 kubeadm-1.22.17-0 kubelet-1.22.17-0 kubectl-1.22.17-0 配置过程略。。。 在部署单Master时,想要其他的node节点加入到集群中来,然后就显示其中一个node节点的准备状态是NotReady  此时这里我们用到的网络插件:Calico kubectl apply -f  https://gitee.com/leedon21/k

    2024年02月16日
    浏览(31)
  • Linux高级---k8s搭建之使用calico网络插件

    一、配置ip、修改主机名 二、修改/etc/hosts文件 三、关闭防火墙、selinux 四、三台都互相配置免密登录 五、关闭交换分区 k8s默认不允许使用交换分区(因为性能低),否则k8s初始化失败,可以在安装时指定–ignore-preflight-errors=Swap来使用交换分区 六、修改内核参数 配置的原因:

    2024年02月06日
    浏览(27)
  • ·[K8S:使用calico网络插件]:解决集群节点NotReady问题

    执行: wget --no-check-certificate https://projectcalico.docs.tigera.io/archive/v3.25/manifests/calico.yaml 1.2.1:查看本机ip 网卡相关信息: 1.2.2:修改calico.yaml网卡interface相关信息 1.3.1:异常日志抛出: 1.3.2:场景一:执行K8S admin config配置文件替换相关操作: 1.3.2:场景二:执行K8S admin config配置文

    2024年02月14日
    浏览(47)
  • 【大数据】kubernetes(k8s)calico跨节点网络不通的问题及排错过程

    进入节点 k8s-node27 的pod,ping k8s-node28 节点上的pod的ip都不通,k8s-node28 节点ping k8s-node27 也不通,但是k8s-node27,k8s-node28 之间他们各自节点上的pod的ip之间是可以相互ping通。 排查过程: 这种情况让我们想起了当时设置路由转发时候的配置,主机上有多个网卡,而k8s的calico网络

    2024年02月11日
    浏览(42)
  • k8s calico 网络异常处理

    故障 worker3故障重启后,该节点的 pod 访问不了其它节点服务 2023-06-26T07:44:41.041Z        ERROR   setup   unable to start manager {\\\"error\\\": \\\"Get \\\"https://10.244.64.1:443/api?timeout=32s\\\": dial tcp 10.244.64.1:443: i/o timeout\\\"} 发现网络组件也是有报错重启,对比其它节点的iptables,少了好多。     该节点

    2024年02月11日
    浏览(36)
  • k8s calico vxlan式详解

    之前的文章讲了k8s ipip模式的使用以及流量路径,本篇文章主要是来讲解一下vxlan 模式下pod 流量是如何通信的。 修改calico backend参数 将calico_backend参数由 bird 设置为 vxlan ,因为vxlan部署不使用bgp 修改calico daemonset 修改ippool 确认没有bgp运行 通过上面的操作已经将ipip模式转换成了

    2024年04月28日
    浏览(41)
  • k8s 之网络组件-Calico(十九)

    下载资源 :安装 kubernetes 网络组件-Calico 一, 简介         Calico是Kubernetes生态系统中另一种流行的网络选择。虽然Flannel被公认为是最简单的选择,但Calico以其性能、灵活性而闻名。Calico的功能更为全面,不仅提供主机和pod之间的网络连接,还涉及网络安全和管理。Cali

    2024年02月11日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包