【Calico系列】7 Calico ibgp 配置简述
2020-07-04 tech calico kubernetes 8 mins 2 图 2971 字
相关配置步骤在官网上都有,这里只做要点记录和一些上下文的解释。很好地运用calico和bgp还需要更多数据通信方面的知识积累。
本文记录从一个使用 calico 3.10作为网络插件的 kubernetes 1.17集群,将其配置成与柜顶交换机进行 ibgp 路由交换的过程。
这个架构有比较好的扩展性,后期可以扩展机柜间使用ebgp的方式互联(但需要实现规划好机柜间的网络规划、掩码之类的,这里涉及到每个机柜承载的机器数量)。
参考的文档如下:
目前规划的情报:
主机信息:
90.90.90.1-2
交换机信息:
网关 90.90.90.90/24
网络资源:90.90.0.0/16
IP段 | 用途 |
---|---|
90.90.90.0/24 | host IP,master vip:90.90.90.12 |
90.90.0.0/18 | pod ip段 |
90.90.64.0/18 | 除90.90.90.0/24以外暂不使用 |
90.90.128.0/18 | service ip段 |
90.90.192.0/18 | 暂不使用 |
-
查看集群calico状态
-
禁用默认的 BGP fullmesh,设置AS号
确认集群没有bgp配置信息,如果有,先备份出来。
$ calicoctl get bgpConfiguration NAME LOGSEVERITY MESHENABLED ASNUMBER
配置下面的bgp配置信息,停用 full-mesh 模式,增加serviceIP段声明
# 1.bgpconfig.yaml apiVersion: projectcalico.org/v3 kind: BGPConfiguration metadata: name: default spec: asNumber: 64512 logSeverityScreen: Info nodeToNodeMeshEnabled: false serviceClusterIPs: - cidr: 90.90.128.0/18
应用:
$ kubectl apply -f 1.bgpconfig.yaml Successfully applied 1 'BGPConfiguration' resource(s)
集群此时bgp网络不通,不同主机的pod互ping是不通的:
$ calicoctl node status Calico process is running. IPv4 BGP status No IPv4 peers found. IPv6 BGP status No IPv6 peers found.
-
配置BGP Global Peer
# global-peer apiVersion: projectcalico.org/v3 kind: BGPPeer metadata: name: bgppeer-global-router spec: peerIP: 90.90.90.90 asNumber: 64512
配置了global peer 网络就通了。如果你是多机柜的集群,由于默认的 node 配置里是没有 asn 号码的,另一个机柜中的网络也是不通的,所以,对于多机柜的集群,除了配置 Global Peer,还需要针对每个peer和node单独配置,自定义asn,自定义rr,修改掩码等。
先查询节点的名字:
calico get node -owide
再添加一个单独的 bgppeer 配置。比如这里我对 master002 做单独的配置。
# peer apiVersion: projectcalico.org/v3 kind: BGPPeer metadata: name: master002-peer spec: asNumber: 64512 node: master002 peerIP: 90.90.90.90 # node apiVersion: projectcalico.org/v3 kind: Node metadata: name: master002 spec: bgp: asNumber: 64512 ipv4Address: 90.90.90.2/24 orchRefs: - nodeName: master002 orchestrator: k8s
关于对node的操作,也可以参考官方的文档,更简单一些:
calicoctl patch node node-1 -p '{"spec": {"bgp": {“asNumber”: “64512”}}}'
最后的结果如下:
如此配置便完成了。
再跑一个nginx,试试calico的loadbalancer功能。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-test
spec:
selector:
matchLabels:
app: nginx-test
replicas: 2
template:
metadata:
labels:
app: nginx-test
spec:
containers:
- name: nginx
image: nginx:latest
resources:
requests:
cpu: 100m
memory: 100Mi
ports:
- containerPort: 80
restartPolicy: Always
---
kind: Service
apiVersion: v1
metadata:
labels:
app: nginx-test
name: nginx-loadbalancer-test
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 80
selector:
app: nginx-test
但网络运维这部分需要做的事情还远远不止,比如为节点打机柜和生产或测试标签、规划系统默认和ns的生产测试网段、配置ns网络准入、系统限制等,目前社区还没有给出具体的规范,由各厂家自己管理了。