calico文档学习

1、calico概念

Every pod get its own IP address.每个POD都有自己的IP

Pods on any node can communicate with all pods on all other nodes without NAT.任意节点上的POD互相通信不用NAT

  查看calico版本

root@clusterb-master1:/# kubectl exec -it -n tigera-operator deployment/tigera-operator -- operator --version
Operator: v1.25.3
Calico: v3.22.1
Enterprise: v3.12.0

列出可用资源

root@master:/# kubectl get crd | grep projectcalico.org
bgpconfigurations.crd.projectcalico.org               2026-04-30T08:37:43Z
bgppeers.crd.projectcalico.org                        2026-04-30T08:37:43Z
blockaffinities.crd.projectcalico.org                 2026-04-30T08:37:43Z
caliconodestatuses.crd.projectcalico.org              2026-04-30T08:37:43Z
clusterinformations.crd.projectcalico.org             2026-04-30T08:37:43Z
felixconfigurations.crd.projectcalico.org             2026-04-30T08:37:43Z
globalnetworkpolicies.crd.projectcalico.org           2026-04-30T08:37:43Z
globalnetworksets.crd.projectcalico.org               2026-04-30T08:37:43Z
hostendpoints.crd.projectcalico.org                   2026-04-30T08:37:43Z
ipamblocks.crd.projectcalico.org                      2026-04-30T08:37:43Z
ipamconfigs.crd.projectcalico.org                     2026-04-30T08:37:43Z
ipamhandles.crd.projectcalico.org                     2026-04-30T08:37:43Z
ippools.crd.projectcalico.org                         2026-04-30T08:37:43Z
ipreservations.crd.projectcalico.org                  2026-04-30T08:37:43Z
kubecontrollersconfigurations.crd.projectcalico.org   2026-04-30T08:37:44Z
networkpolicies.crd.projectcalico.org                 2026-04-30T08:37:44Z
networksets.crd.projectcalico.org                     2026-04-30T08:37:44Z

 

2、Configure a global BGP peer

    配置所有NODE BGP PEER 192.20.30.40 AS 64567 

方法一:全局配置(所有节点)
apiVersion: projectcalico.org/v3
kind: BGPPeer
metadata:
  name: my-global-peer
spec:
  peerIP: 192.20.30.40
  asNumber: 64567

方法二:特定节点(根据标签选择)
apiVersion: projectcalico.org/v3
kind: BGPPeer
metadata:
  name: rack1-tor
spec:
  peerIP: 192.20.30.40
  asNumber: 64567
  nodeSelector: rack == 'rack-1'

  检查命令:

#calicoctl apply -f bgprr.yaml
#calicoctl delete -f bgprr.yaml 
#calicoctl get bgppeers -o yaml

root@clusterb-node1:~# calicoctl get bgppeers -o yaml
apiVersion: projectcalico.org/v3
items:
- apiVersion: projectcalico.org/v3
kind: BGPPeer
metadata:
creationTimestamp: "2026-07-01T03:28:18Z"
name: peer-with-route-reflectors
resourceVersion: "150925"
uid: 419d1760-cd32-435a-a348-62919b06ff4c
spec:
asNumber: 64512
nodeSelector: all()
peerIP: 10.10.1.254
kind: BGPPeerList
metadata:
resourceVersion: "173611"

3、配置节点成为BGP RR

kubectl API方式
  kubectl annotate node my-node projectcalico.org/RouteReflectorClusterID=244.0.0.1
ETCD方式
  calicoctl patch node my-node -p '{"spec": {"bgp": {"routeReflectorClusterID": "244.0.0.1"}}}'
为RR节点打上标签
kubectl label node my-node route-reflector=true
 
kind: BGPPeer
apiVersion: projectcalico.org/v3
metadata:
  name: peer-with-route-reflectors
spec:
  nodeSelector: all()
  peerSelector: route-reflector == 'true' 

4、禁用默认的full mesh,如果没有bgpconfiguration,需要手动创建

 calicoctl patch bgpconfiguration default -p '{"spec": {"nodeToNodeMeshEnabled": false}}'

#bgpconfiguration.yaml
apiVersion: projectcalico.org/v3
kind: BGPConfiguration
metadata:
  name: default
spec:
  logSeverityScreen: Info
  nodeToNodeMeshEnabled: true
  
查看配置:
  calicoctl get bgpconfiguration -o yaml

5、改变默认的AS号

改变所有NODE:
    calicoctl patch bgpconfiguration default -p '{"spec": {"asNumber": "64513"}}'
  改变特定NODE
    calicoctl patch node node-1 -p '{"spec": {"bgp": {"asNumber": "64514"}}}'
  查看AS号
 calicoctl get bgppeers -o yaml

  为不同的对等体设置本地AS号
  kubectl patch bgppeer [peer_name] -p '{"spec": {"localASNumber": 64577}}'

6、配置BGP过滤

过滤按顺序匹配,匹配到后按Action执行,如何时没有匹配到,默认为accept.过滤名称必须应用到BGPpeer资源。
kind: BGPFilter
apiVersion: projectcalico.org/v3
metadata:
  name: first-bgp-filter
spec:
  exportV4:
    - action: Accept
      matchOperator: In
      cidr: 77.0.0.0/16
      source: RemotePeers
  importV4:
    - action: Reject
      matchOperator: NotIn
      cidr: 44.0.0.0/16
  exportV6:
    - action: Reject
      interface: '*.calico'
  importV6:
    - action: Accept
      matchOperator: Equal
      cidr: 5000::0/64
---
kind: BGPFilter
apiVersion: projectcalico.org/v3
metadata:
  name: second-bgp-filter
spec:
  exportV4:
    - action: Accept
      matchOperator: In
      cidr: 77.0.0.0/16
      interface: '*.calico'
  importV4:
    - action: Reject
      matchOperator: NotIn
      cidr: 44.0.0.0/16
  exportV6:
    - action: Reject
      source: RemotePeers
  importV6:
    - action: Reject
---
kind: BGPPeer
apiVersion: projectcalico.org/v3
metadata:
  name: peer-with-filter
spec:
  peerSelector: has(filter-bgp)
  filters:
    - first-bgp-filter
    - second-bgp-filter

7、配置overlay network

overlay network有三种方试,ip-ip/vxlan/cross-network
  配置为VXLAN
apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
  name: ippool-vxlan-1
spec:
  cidr: 192.168.0.0/16
  vxlanMode: Always
  natOutgoing: true   
  
  配置为VXLAN-cross
  apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
  name: ippool-vxlan-cross-subnet-1
spec:
  cidr: 192.168.0.0/16
  vxlanMode: CrossSubnet
  natOutgoing: true
  
  配置为IP-ip-cross
  apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
  name: ippool-ipip-cross-subnet-1
spec:
  cidr: 192.168.0.0/16
  ipipMode: CrossSubnet
  natOutgoing: true
  
  配置为IP-ip
  apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
  name: ippool-ipip-1
spec:
  cidr: 192.168.0.0/16
  ipipMode: Always
  natOutgoing: true

8、通告Kubernetes service IP

查看BGPconfiguration
  1、calicoctl get bgpconfig default
  通告service cluster IP
  2、calicoctl patch bgpconfig default --patch \
   '{"spec": {"serviceExternalIPs": [{"cidr": "x.x.x.x"}, {"cidr": "y.y.y.y"}]}}'
   
  通告service external IP
  calicoctl patch bgpconfig default --patch \
   '{"spec": {"serviceExternalIPs": [{"cidr": "x.x.x.x"}, {"cidr": "y.y.y.y"}]}}'
   
  通告 service load balancer IP
  calicoctl patch bgpconfig default --patch '{"spec": {"serviceLoadBalancerIPs": [{"cidr": "x.x.x.x/16"}]}}'
  3、排出通告的NODE
  kubectl label node control-plane-01 node.kubernetes.io/exclude-from-external-load-balancers=true

9、配置MTU

查看MTU:ip link show

10、禁用/启用NAT

apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
  name: default-ipv4-ippool
spec:
  cidr: 192.168.0.0/16
  natOutgoing: true          

11、kube-proxy 使用IPVS

kube-proxy有三种方式:IPVS/iptables/namesapce

12、参考链接:

https://system51.github.io/2020/05/27/using-calico/
https://docs.tigera.io/calico/latest/about

 

posted @ 2026-07-01 15:09  hopeccie  阅读(6)  评论(0)    收藏  举报