calico
Calico是目前开源的最成熟的纯三层网络框架之一, 是一种广泛采用、久经考验的开源网络和网络安全解决方案,适用于 Kubernetes、虚拟机和裸机工作负载。 Calico 为云原生应用提供两大服务:工作负载之间的网络连接和工作负载之间的网络安全策略。
核心概念
Calico提供Overlay和Underlay两种网络方案,ADP团队根据自身业务特点选取Overlay方案,提供两种模式:
Calico IPIP
Calico VXLAN
IPIP模式:打开DaemonSet
的calico-node
中环境变量字段CALICO_IPV4POOL_IPIP
- name: CALICO_IPV4POOL_IPIP
value: Always
VXLAN模式:
DaemonSet
的calico-node
中环境变量字段CALICO_IPV4POOL_IPIP
- name: CALICO_IPV4POOL_IPIP
value: Never
- name: CALICO_IPV4POOL_VXLAN
value: Always
DaemonSet
的calico-node
中探针字段,注释-bird-live
字段
livenessProbe:
exec:
command:
- /bin/calico-node
- -felix-live
# - -bird-live
readinessProbe:
exec:
command:
- /bin/calico-node
# - -bird-ready
- -felix-ready
保证
ConfigMap
的calico-config
中的calico_backend: "vxlan"
运维能力
指定网卡
ADP团队部署的Calico是根据宿主机默认路由来选择的网卡
也可以通过手动修改calico-node
的DaemonSet
,修改字段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\"]" #当然也可以固定多个