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

1.概述

参考文档: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等。更多了解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个。

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

2.2.使用Tigera Calico Operator安装Calico

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

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通常有以下项:

3.1.配置PodIP范围(PodCIDR)

要更改用于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"选项填写的值相同。

3.2.配置IPIP(默认)

默认情况下,清单启用跨子网所使用的封装协议是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"项控制。

3.3.切换IPIP为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"项控制。

3.4.其他配置项

在清单文件的开始有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

Calico网络插件的更多相关文章

  1. Flannel和Calico网络插件工作流程对比

    Flannel和Calico网络插件对比   Calico简介 Calico是一个纯三层的网络插件,calico的bgp模式类似于flannel的host-gw Calico方便集成 OpenStac ...

  2. Flannel和Calico网络插件对比

    1.Kubernetes通信问题 1.容器间通信:即同一个Pod内多个容器间通信,通常使用loopback来实现. 2.Pod间通信:K8s要求,Pod和Pod之间通信必须使用Pod-IP 直接访问另 ...

  3. K8S Calico网络插件

    0.前言 参考文档:https://github.com/containernetworking/cni Pod网络插件,为了实现Pod网络而需要的插件.组件.由于Kubernetes通过开放的CNI ...

  4. k8s更换网络插件:从flannel更换成calico

    卸载flannel 查看已安装的flannel的信息 # 查看CNI插件,可以得知使用的是flannel # cat /etc/cni/net.d/10-flannel.conflist { &quo ...

  5. k8s西游记 - 切换网络插件IP池

    前言 最近在另一个k8s集群中,搭建了kong网关,在配置OIDC插件时,希望使用Memcahe代替Cookie来存储会话信息,于是把部署在同一局域网Memcahe的内网IP,比如:192.168.1 ...

  6. 19.网络插件calico

    19.网络插件calico 官网: https://docs.projectcalico.org/v3.8/introduction/ calico默认工作在192.168.0.0/16 的网络 ca ...

  7. 使用kubeadm安装kubernetes/部署前准备/flannel网络插件/镜像下载/

    本文内容参考<kuberneters进阶实战>/马哥的新书/推荐 部署前的准备 主机名称解析 分布式系统环境中的多主机通信通常基于主机名称进行,这在IP地址存在变化的可能性时为主机提供了固 ...

  8. k8s的flannel网络插件配置

    flannel的网络插件配置 Kubernetes网络通信需要解决以下问题:            (1)容器间通信:同一个Pod内的多个容器间的通信,lo            (2)Pod通信:P ...

  9. 容器网络插件那么多,博云为什么基于OVS深度自研?

    背景 从2015年开始,博云开始基于Kubernetes和容器帮助客户交付应用管理平台.在开始阶段,博云选择了业界使用度非常广泛且成熟稳定的calico作为默认的网络方案并在calico方面积累了大量 ...

随机推荐

  1. 走在 SVG + Low Poly 的路上

    随着 SVG 的发展,艺术家和设计师们把越来越多传统设计行业的东西引入了前端, low poly 就是其中之一.那 low poly 强大在哪呢,大家通过下面的图来感受一下. 恰巧我们产品 Logo ...

  2. 使用 jfinal + beetl + bootstrap 实现商城展示及管理系统

    使用 jfinal+beetl 在线商品展示系统 使用 git clone https://github.com/zhouchong741/jfinal-demo.git 使用 IntelliJ ID ...

  3. 安卓性能优化之计算apk启动时间

    之前有人在知乎提问:"怎么计算apk的启动时间?" : 利用Python或者直接用adb命令怎么计算apk的启动时间呢?就是计算从点击图标到apk完全启动所花费的时间.比如,对游戏 ...

  4. VUE-SSR原理和使用

    开篇N问 SSR解决了什么问题?SSR存在那些问题?SSR优点缺点是什么如何使用以及原理 自我总结了有如下优势 -  SSR利于seo优化,因为实现了在node中解析vue,将实例渲染成一个字符串直接 ...

  5. 基于express框架的留言板实现步骤

    这个留言板是基于express框架,和ejs模板引擎,首先需要在根目录安装express框架,然后安装ejs模块和body-parser(获取用户表单提交的数据):建立项目目录 message,然后依 ...

  6. (ICONIP2021)On the Unreasonable Effectiveness of Centroids in Image

    目录 摘要 1.引言 2.提出的方法 2.1 CentroidTripletloss 2.2 聚合表示 3.实验 3.1 数据集 3.2 应用细节 3.3 Fashion检索结果 3.4 行人再识别结 ...

  7. 火狐浏览器Hackbar安装破解

    1 下载 https://pan.baidu.com/s/18cKoJAam9by7AB168Im57g 64mt 下载后解压到一个固定文件夹下 2 安装 选择xpi进行安装 3 关闭插件更新 点击插 ...

  8. gin框架使用【5.表单参数】

    curl http://127.0.0.1:8080/users -X POST -d 'name=juanmaofeifei&age=10' package main import ( &q ...

  9. 【Azure API 管理】解决API Management添加AAD Group时遇见的 Failed to query Azure Active Directory graph due to error 错误

    问题描述 为APIM添加AAD Group时候,等待很长很长的时间,结果添加失败.错误消息为: Write Groups ValidationError :Failed to query Azure ...

  10. python基础练习题(题目 一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数)

    day12 --------------------------------------------------------------- 实例019:完数 题目 一个数如果恰好等于它的因子之和,这个 ...