Calico网络插件
阅读原文时间:2022年05月24日阅读:1

以下大部分是本人参考各种资料{官方文档、书籍}对知识的汇总和整理,其中有理解错误的地方请大神留言和指正,嘿嘿~~

1.概述

参考文档:https://projectcalico.docs.tigera.io/

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

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等。更多了解BIRD可参考:https://bird.network.cz/。在Calico中,BIRD是一个BGP客户端,用于使用BGP协议广播给其他主机动态的学习路由规则。

  • 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个。

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"。三层虚接口通常负责数据包的封装和解封装工作。

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个。

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接口。

参考文档: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 <<EOF
{
  "registry-mirrors": [
        "https://7mimmp7p.mirror.aliyuncs.com",
        "https://registry.docker-cn.com",
        "http://hub-mirror.c.163.com",
        "https://docker.mirrors.ustc.edu.cn"
        ],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}
EOF

重启docker服务即可:

[root@localhost ~]# sudo systemctl daemon-reload
[root@localhost ~]# sudo systemctl restart docker

2、配置NetworkManager

如果主机系统使用NetworkManager来管理网络的话,则需要配置NetworkManager,以允许Calico管理接口。

NetworkManger操作默认网络命名空间接口的路由表,这可能会干扰Calico代理正确路由的能力。

在所有主机上操作:

[root@k8s-master01 ~]# cat > /etc/NetworkManager/conf.d/calico.conf <<EOF
[keyfile]
unmanaged-devices=interface-name:cali*;interface-name:tunl*;interface-name:vxlan.calico;interface-name:wireguard.cali
EOF

3、下载calico.yaml

[root@k8s-master01 ~]# wget https://docs.projectcalico.org/v3.23/manifests/calico.yaml --no-check-certificate

4、修改calico.yaml

由于默认的Calico清单文件中所使用的镜像来源于docker.io国外镜像源,上面我们配置了Docker镜像加速,应删除docker.io前缀以使镜像从国内镜像加速站点下载。

[root@k8s-master01 ~]# cat calico.yaml |grep 'image:'
          image: docker.io/calico/cni:v3.23.0
          image: docker.io/calico/cni:v3.23.0
          image: docker.io/calico/node:v3.23.0
          image: docker.io/calico/kube-controllers:v3.23.0
[root@k8s-master01 ~]# sed -i 's#docker.io/##g' calico.yaml
[root@k8s-master01 ~]# cat calico.yaml |grep 'image:'
          image: calico/cni:v3.23.0
          image: calico/cni:v3.23.0
          image: calico/node:v3.23.0
          image: calico/kube-controllers:v3.23.0

5、应用calico.yaml

[root@k8s-master01 ~]# kubectl apply -f calico.yaml

Pod-Calico在"kube-system"名称空间下创建并运行起来:

[root@k8s-master01 ~]# kubectl get pod -n kube-system |grep calico
calico-kube-controllers-77d9858799-c267f   1/1     Running   0              92s
calico-node-6jw5q                          1/1     Running   0              92s
calico-node-krrn6                          1/1     Running   0              92s
calico-node-mgk2g                          1/1     Running   0              92s
calico-node-wr2pv                          1/1     Running   0              92s

这种是官方文档最新指导的安装方式。

Tigera Calico Operator通常会安装最新版本的Calico版本,并使用最新的功能。

1、配置NetworkManager

如果主机系统使用NetworkManager来管理网络的话,则需要配置NetworkManager,以允许Calico管理接口。

NetworkManger操作默认网络命名空间接口的路由表,这可能会干扰Calico代理正确路由的能力。

在所有主机上操作:

[root@k8s-master01 ~]# cat > /etc/NetworkManager/conf.d/calico.conf <<EOF
[keyfile]
unmanaged-devices=interface-name:cali*;interface-name:tunl*;interface-name:vxlan.calico;interface-name:wireguard.cali
EOF

2、使用tigera-operator.yaml清单文件安装Tigera Calico operator

参考文档:https://github.com/tigera/operator

tigera-operator.yaml清单文件用于安装Tigera Calico operator。

operator的镜像来源于quay.io。

[root@k8s-master01 ~]# wget https://projectcalico.docs.tigera.io/manifests/tigera-operator.yaml -O calico-tigera-operator.yaml --no-check-certificate
[root@k8s-master01 ~]# cat calico-tigera-operator.yaml |grep 'image:'
          image: quay.io/tigera/operator:v1.27.0
[root@k8s-master01 ~]# kubectl apply -f calico-tigera-operator.yaml
[root@k8s-master01 ~]# kubectl get pod -n tigera-operator -o wide
NAME                               READY   STATUS    RESTARTS   AGE     IP                NODE         NOMINATED NODE   READINESS GATES
tigera-operator-566769dc67-mrnhs   1/1     Running   0          5m39s   192.168.124.132   k8s-node01   <none>           <none>

3、下载并配置custom-resources.yaml清单文件

custom-resources.yaml用于自定义通过Tigera Calico operator安装和配置Calico,它会创建由operator实现的Installation资源对象。

在自定义Calico之前可以通过"https://projectcalico.docs.tigera.io/reference/installation/api#operator.tigera.io/v1.Installation"先了解安装配置。

注:这边需要修改一下Pod分配子网范围(CIDR),该地址需要与kubeadm初始化集群时的"podSubnet"字段或"--pod-network-cidr"参数中填写的值相同。

[root@k8s-master01 ~]# wget https://projectcalico.docs.tigera.io/manifests/custom-resources.yaml -O calico-custom-resources.yaml --no-check-certificate
[root@k8s-master01 ~]# vim calico-custom-resources.yaml
apiVersion: operator.tigera.io/v1
kind: Installation
metadata:
  name: default
spec:
  # Configures Calico networking.
  calicoNetwork:
    # Note: The ipPools section cannot be modified post-install.
    ipPools:
    - blockSize: 26
      cidr: 10.244.0.0/16
      encapsulation: VXLANCrossSubnet
      natOutgoing: Enabled
      nodeSelector: all()

4、应用custom-resources.yaml清单文件

[root@k8s-master01 ~]# kubectl apply -f calico-custom-resources.yaml

5、查看Calico是否运行

Tigera Calico Operator会自动创建一个名叫"calico-system"的名称空间来运行Calico。

[root@k8s-master01 ~]# kubectl get namespace
NAME              STATUS   AGE
calico-system     Active   3m10s
default           Active   5m55s
kube-node-lease   Active   5m57s
kube-public       Active   5m57s
kube-system       Active   5m57s
tigera-operator   Active   3m20s
[root@k8s-master01 ~]# kubectl get pod -n calico-system
NAME                                      READY   STATUS                  RESTARTS   AGE
calico-kube-controllers-7dfc6fb85-ktww2   0/1     Pending                 0          8m33s
calico-node-2t4dp                         0/1     Init:ImagePullBackOff   0          8m34s
calico-node-mmflx                         0/1     Init:ImagePullBackOff   0          8m34s
calico-node-r94tt                         0/1     Init:ImagePullBackOff   0          8m34s
calico-node-w7plh                         0/1     Init:ImagePullBackOff   0          7m36s
calico-typha-5fb57458cc-g89qp             0/1     ImagePullBackOff        0          8m34s
calico-typha-5fb57458cc-t5xcm             0/1     ImagePullBackOff        0          8m28s
[root@k8s-master01 ~]# kubectl describe pod calico-kube-controllers-7dfc6fb85-ktww2 -n calico-system
  Normal   BackOff    69s (x2 over 3m41s)    kubelet            Back-off pulling image "docker.io/calico/pod2daemon-flexvol:v3.23.0"
  Warning  Failed     69s (x2 over 3m41s)    kubelet            Error: ImagePullBackOff

可以看到所有Calico相关的Pod由于在国内环境下都无法正常下载由docker.io提供的镜像:

[root@k8s-master01 ~]# kubectl describe pod -n calico-system |grep 'Events' -A 10 |grep -Eo '"docker.io/calico/.*"' |sort |uniq
"docker.io/calico/cni:v3.23.0"
"docker.io/calico/kube-controllers:v3.23.0"
"docker.io/calico/node:v3.23.0"
"docker.io/calico/pod2daemon-flexvol:v3.23.0"
"docker.io/calico/typha:v3.23.0"

尝试手动从quay.io下载镜像。quay.io是一个公共镜像仓库。

所有主机上操作:

[root@k8s-master01 ~]# docker pull quay.io/calico/cni:v3.23.0
[root@k8s-master01 ~]# docker pull quay.io/calico/kube-controllers:v3.23.0
[root@k8s-master01 ~]# docker pull quay.io/calico/node:v3.23.0
[root@k8s-master01 ~]# docker pull quay.io/calico/pod2daemon-flexvol:v3.23.0
[root@k8s-master01 ~]# docker pull quay.io/calico/typha:v3.23.0

这个时候发现Calico相关Pod都已正常运行了:

[root@k8s-master01 ~]# kubectl get pod -n calico-system
NAME                                      READY   STATUS    RESTARTS      AGE
calico-kube-controllers-7dfc6fb85-vbn6q   1/1     Running   0             64m
calico-node-29h89                         1/1     Running   0             64m
calico-node-9c54r                         1/1     Running   1 (10m ago)   64m
calico-node-ntzvt                         1/1     Running   0             64m
calico-node-s5bz9                         1/1     Running   0             64m
calico-typha-5dd57768f4-79clk             1/1     Running   1 (10m ago)   27m
calico-typha-5dd57768f4-dk9ph             1/1     Running   0             64m

3.Calico清单详解-calico.yaml(使用calico.yaml清单文件安装Calico安装方式必读)

参考文档:https://docs.projectcalico.org/archive/v3.14/getting-started/kubernetes/installation/config-options#other-configuration-options

calico.yaml清单文件主要用于运行calico-node和calico-kube-controllers服务,其清单安装以下Kubernetes资源:

  • 使用DaemonSet在每个主机上安装calico/node容器;
  • 使用DaemonSet在每个主机上安装Calico CNI二进制文件和网络配置;
  • 使用Deployment运行calico/kube-controller;
  • Secert/calico-etcd-secrets提供可选的Calico连接到etcd的TLS密钥信息;
  • ConfigMap/calico-config提供安装Calico时的配置参数。

在calico.yaml清单文件中,Calico默认的工作模式是IPIP。

在安装Calico之前配置Calico通常有以下项:

要更改用于Pod的默认IP范围,请修改calico.yaml清单文件中"CALICO_IPV4POOL_CIDR"部分。

kind: DaemonSet
apiVersion: apps/v1
metadata:
  name: calico-node
  namespace: kube-system
  labels:
    k8s-app: calico-node
spec:
  template:
    spec:
      containers:
        - name: calico-node
          image: calico/node:v3.14.2
          env:
            ...
            # - name: CALICO_IPV4POOL_CIDR
            #    value: "192.168.0.0/16"
            ...

CALICO_IPV4POOL_CIDR

设置PodIP范围。

此项用于设置安装Calico时要创建的默认IPv4池,PodIP将从该范围中选择。

Calico安装完成后修改此值将再无效。

默认情况下calico.yaml中"CALICO_IPV4POOL_CIDR"是注释的,如果kube-controller-manager的"--cluster-cidr"不存在任何值的话,则通常取默认值"192.168.0.0/16,172.16.0.0/16,..,172.31.0.0/16"。

当使用kubeadm时,PodIP的范围应该与kubeadm init的清单文件中的"podSubnet"字段或者"--pod-network-cidr"选项填写的值相同。

默认情况下,清单启用跨子网所使用的封装协议是IPIP。

当集群的节点都处于同一个2层网络中时,我们期望修改Calico的工作模式为BGP或其他时,可以设置"CALICO_IPV4POOL_IPIP"的"value: Never"以禁用IPIP。默认IPIP是启用的"value: Always"。

kind: DaemonSet
apiVersion: apps/v1
metadata:
  name: calico-node
  namespace: kube-system
  labels:
    k8s-app: calico-node
spec:
  template:
    spec:
      containers:
        - name: calico-node
          image: calico/node:v3.14.2
          env:
            ...
            # Enable IPIP
            - name: CALICO_IPV4POOL_IPIP
              value: "Always"
            ...

CALICO_IPV4POOL_IPIP

设置Calico覆盖网络IPV4池所要使用的封装协议为IPIP。

可设置的值:

Always,永久启用。

CrossSubnet,当物理主机是跨子网通信的话才启用,如果物理主机在同一2层网络中则使用BGP动态路由通信方式。

Never,从不启用,即禁用。

如果该项的值设置为"Never"以外的值,则不应设置"CALICO_IPV4POOL_VXLAN"。

Calico覆盖网络支持IPIP、VXLAN两种协议,仅能启用其中一种。

VXLAN协议禁止启用由"CALICO_IPV4POOL_VXLAN"项控制。

默认情况下,Calico清单启用IPIP封装。如果你期望Calico使用VXLAN封装模式,则需要在安装时候做以下操作:

1、将"CALICO_IPV4POOL_IPIP "设置为"Never",将"CALICO_IPV4POOL_VXLAN"设置为"Always".

kind: DaemonSet
apiVersion: apps/v1
metadata:
  name: calico-node
  namespace: kube-system
  labels:
    k8s-app: calico-node
spec:
  template:
    spec:
      containers:
        - name: calico-node
          image: calico/node:v3.14.2
          env:
            ...
            # Enable IPIP
            - name: CALICO_IPV4POOL_IPIP
              value: "Never"
            - name: CALICO_IPV4POOL_VXLAN
              value: "Always"
            ...

2、如果你只想集群仅使用基于VXLAN协议的覆盖网络模式,用不到BGP动态路由模式的话,即为了节省一点资源,可以选择完全禁用Calico基于BGP的网络:

  • 将"calico_backend: "bird""修改为"calico_backend: "vxlan"",这将禁用BIRD。

  • 从calico/node的readiness/liveness检查中去掉"- -bird-ready"和"- -bird-live"。

          livenessProbe:
            exec:
              command:
              - /bin/calico-node
              - -felix-live
             # - -bird-live
          readinessProbe:
            exec:
              command:
              - /bin/calico-node
              # - -bird-ready
              - -felix-ready

CALICO_IPV4POOL_VXLAN

设置Calico覆盖网络IPV4池所要使用的封装协议为VXLAN。

可设置的值:

  • Always,永久启用。

  • CrossSubnet,当物理主机是跨子网通信的话才启用,如果物理主机在同一2层网络中则使用BGP动态路由通信方式。

  • Never,从不启用,即禁用。

    如果该项的值设置为"Never"以外的值,则不应设置"CALICO_IPV4POOL_VXLAN"。

    Calico覆盖网络支持IPIP、VXLAN两种协议,仅能启用其中一种。

    VXLAN协议禁止启用由"CALICO_IPV4POOL_VXLAN"项控制。

在清单文件的开始有ConfigMap描述Calico的配置内容,其重要的配置项解读如下:

kind: ConfigMap
apiVersion: v1
metadata:
  name: calico-config
  namespace: kube-system
data:
  typha_service_name: "none"
  calico_backend: "bird"
  veth_mtu: "1440"
  cni_network_config: |-
    {
      "name": "k8s-pod-network",
      "cniVersion": "0.3.1",
      "plugins": [
        {
          "type": "calico",
          "log_level": "info",
          "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}
        }
      ]
    }

typha_service_name: "none"

Typha是Calico的一个扩展组件,用于Calico通过Typha直接与Etcd通信,而不是通过kube-apiserver。通常当K8S的规模超过50个节点的时候推荐启用它,以降低kube-apiserver的负载。

支持值:

  • none,关闭Typha功能。
  • calico_typha,启用Typha功能。

calico_backend: "bird"

设置Calico使用的后端机制。支持值:

bird,开启BIRD功能,根据Calico-Node的配置来决定主机的网络实现是采用BGP路由模式还是IPIP、VXLAN覆盖网络模式。

vxlan,纯VXLAN模式,仅能够使用VXLAN协议的覆盖网络模式。

veth_mtu: "0"

设置虚拟接口"calicoxxxxx"的MTU值,默认情况下MTU是自动检测的,不需要显示的设置此字段。

可以通过提供一个非零值来设置它。

MTU,Maximum Transmission Unit,最大传输单元,网络设备一次发送数据包大小,单位为Byte,MTU值约小则传输速率约高,此值应由系统设置的最合理的值,通常不需要我们手动设置,最大值为1500。

cni_network_config:

在每个节点上都要安装的CNI网络插件配置。保持默认就好。

4.Calico清单详解-custom-resources.yaml(使用Tigera Calico Operator安装Calico安装方式必读)

custom-resources.yaml清单文件通过Tigera Calico Operator安装Calico的自定义清单文件。

在安装Calico之前,我们可以通过修改该清单的内容自定义配置Calico。

参考文档:https://projectcalico.docs.tigera.io/reference/installation/api

# This section includes base Calico installation configuration.
# For more information, see: https://projectcalico.docs.tigera.io/v3.23/reference/installation/api#operator.tigera.io/v1.Installation
apiVersion: operator.tigera.io/v1
kind: Installation
metadata:
  name: default
spec:
  # Configures Calico networking.
  calicoNetwork:
    # Note: The ipPools section cannot be modified post-install.
    ipPools:
    - blockSize: 26
      cidr: 10.244.0.0/16
      encapsulation: VXLANCrossSubnet
      natOutgoing: Enabled
      nodeSelector: all()

---

# This section configures the Calico API server.
# For more information, see: https://projectcalico.docs.tigera.io/v3.23/reference/installation/api#operator.tigera.io/v1.APIServer
apiVersion: operator.tigera.io/v1
kind: APIServer
metadata:
  name: default
spec: {}

spec.calicoNetwork

配置Calico网络。

spec.calicoNetwork.bgp

开启或禁用BGP路由功能。支持值:Enabled, Disabled。

spec.calicoNetwork.ipPools

IPPool,为由节点筛选器指定节点上创建Pod分配的单个或多个地址池,以及要使用的Pod网络的实现方法。

spec.calicoNetwork.ipPools.blockSize(int32)

块大小,子网划分技术,指从CIDR(如:10.244.0.0/16)里面为每个节点拆分一个独立的子网块范围大小(如:10.244.32.128/26)。默认IPV4=26,IPV6=122。二进制掩码26转换成十进制掩码即=255.255.255.192,即每个节点的子网可以有64个IP地址,减去广播地址和网络地址,可为Pod分配的有效IP地址有62个。

spec.calicoNetwork.ipPools.cidr(string)

Pod网络IP范围。

spec.calicoNetwork.ipPools.encapsulation

设置Pod网络要使用的封装协议类型,支持:

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

spec.calicoNetwork.ipPools.natOutgoing

NAT传出,对传出的流量启用或禁用NAT功能。支持值:Enabled, Disabled。

spec.calicoNetwork.ipPools.nodeSelector(string)

节点选择器,使用它选择该IPPool池会影响那些节点的Pod。默认值为"all()",保持默认就好。

5.完全卸载Calico网络插件

1、删除安装清单中的所有资源对象

任一台Master上操作:

[root@k8s-master01 ~]# kubectl delete -f calico.yaml

2、删除tunl0虚拟网卡

如果使用了IPIP覆盖网络模式,则Calico会在每台主机上创建一块名叫tunl0的虚拟网卡设备。

在所有主机上操作:

[root@k8s-master01 ~]# modprobe -r ipip

3、删除Calico相关CNI配置文件

在所有主机上操作:

[root@k8s-master01 ~]# rm -rf /var/lib/cni/ && rm -rf /etc/cni/net.d/*

4、重启kubelet服务

在所有主机上操作:

[root@k8s-master01 ~]# systemctl restart kubelet

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章