calico

更新时间: 2023-07-31 16:30:35

Calico是目前开源的最成熟的纯三层网络框架之一, 是一种广泛采用、久经考验的开源网络和网络安全解决方案,适用于 Kubernetes、虚拟机和裸机工作负载。 Calico 为云原生应用提供两大服务:工作负载之间的网络连接和工作负载之间的网络安全策略。

核心概念

Calico提供Overlay和Underlay两种网络方案,ADP团队根据自身业务特点选取Overlay方案,提供两种模式:

  • Calico IPIP

  • Calico VXLAN

IPIP模式:打开DaemonSetcalico-node中环境变量字段CALICO_IPV4POOL_IPIP

- name: CALICO_IPV4POOL_IPIP
  value: Always

VXLAN模式:

  1. DaemonSetcalico-node中环境变量字段CALICO_IPV4POOL_IPIP

- name: CALICO_IPV4POOL_IPIP
  value: Never
- name: CALICO_IPV4POOL_VXLAN
  value: Always
  1. DaemonSetcalico-node中探针字段,注释-bird-live字段

livenessProbe:
  exec:
    command:
    - /bin/calico-node
    - -felix-live
    # - -bird-live
readinessProbe:
  exec:
    command:
    - /bin/calico-node
    # - -bird-ready
    - -felix-ready
  1. 保证ConfigMapcalico-config中的calico_backend: "vxlan"

运维能力

指定网卡

ADP团队部署的Calico是根据宿主机默认路由来选择的网卡

也可以通过手动修改calico-nodeDaemonSet,修改字段IP_AUTODETECTION_METHOD

- name: IP_AUTODETECTION_METHOD
  value: can-reach=8.8.8.8     # 修改为"interface=eth0"

修改IP池

Calico 有两种数据存储驱动程序可供选择

  • etcd

    - 用于直接连接到 etcd 集群

  • kubernetes

    - 用于连接到 Kubernetes APIServer

ADP团队选取的驱动为kubernetes模式,所以可以通过kubectl edit ippool <Name>来对Calico IP池进行操作

创建IP池

编辑并生成一个ippool1.yaml文件,例如:

apiVersion: crd.projectcalico.org/v1
kind: IPPool
metadata:
  name: ippool1
spec:
  blockSize: 28
  cidr: 100.65.0.0/26
  ipipMode: Always
  natOutgoing: true
  nodeSelector: all()
  vxlanMode: Never

字段说明:

  • blockSize:calico默认会给cidr网段分块,所以blockSize要小于cidr

  • cidr:IP网段,不能跟默认IP池网段重叠

  • ipipMode:Always表示开启IPIP模式

  • natOutgoing:true表示需要通过NAT方式出网

通过kubectl apply -f ippool1.yaml部署ippool1

固定IP地址

单个Pod固定IP地址

在Pod template中metadata.annotations字段,增加cni.projectcalico.org/ipAddrs,例如

metadata:
  annotations:
    "cni.projectcalico.org/ipAddrs": "[\"100.64.1.1\"]" #当然也可以固定多个

多个Pod固定IP池

在Pod template中metadata.annotations字段,增加cni.projectcalico.org/ipv4pools,例如

metadata:
  annotations:
    "cni.projectcalico.org/ipv4pools": "[\"ippool1\"]" #当然也可以固定多个

阿里云首页 云原生应用交付平台 相关技术圈