🧀Service路由宣告
约 555 字大约 2 分钟
2025-08-18
Calico 可以通过 BGP (Border Gateway Protocol) 宣告 Kubernetes Service 的 ClusterIP 和 ExternalIP 到外部网络。以下是配置步骤和示例:
基本操作步骤
1. 启用 Service 路由宣告
- 修改 Calico 的 BGPConfiguration:
kubectl edit bgpconfiguration default添加或修改以下内容:
apiVersion: projectcalico.org/v3
kind: BGPConfiguration
metadata:
name: default
spec:
logSeverityScreen: Info
nodeToNodeMeshEnabled: true
serviceClusterIPs:
- cidr: 10.96.0.0/12 # 替换为你的 ClusterIP CIDR
serviceExternalIPs:
- cidr: 192.168.1.0/24 # 替换为你的 ExternalIP 范围
asNumber: 64512 # 你的 AS 号2. 配置 BGP 对等体(如果需要与外部路由器通信)
kubectl apply -f - <<EOF
apiVersion: projectcalico.org/v3
kind: BGPPeer
metadata:
name: my-external-router
spec:
peerIP: 192.168.1.1 # 外部路由器 IP
asNumber: 64513 # 外部路由器的 AS 号
EOF3. 验证配置
# 检查 BGP 对等体状态
calicoctl get bgppeer
# 检查节点 BGP 状态
calicoctl node status完整示例
场景:将特定 Service 的 ExternalIP 宣告到外部网络
- 创建测试 Service:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 9376
externalIPs:
- 192.168.1.100- 配置 Calico 宣告 ExternalIP:
kubectl apply -f - <<EOF
apiVersion: projectcalico.org/v3
kind: BGPConfiguration
metadata:
name: default
spec:
serviceExternalIPs:
- cidr: 192.168.1.0/24
EOF- 在外部路由器上验证:
show ip route 192.168.1.100应该能看到来自 Calico 节点的 BGP 路由。
高级配置
基于注解的精细控制
可以为特定 Service 添加注解来控制路由宣告:
apiVersion: v1
kind: Service
metadata:
name: my-service
annotations:
projectcalico.org/exportBgpServiceRoutes: "true" # 显式启用
# projectcalico.org/exportBgpServiceRoutes: "false" # 显式禁用
spec:
# ...使用 Calico 的 ServiceAdvertisement 资源(Calico v3.22+)
apiVersion: projectcalico.org/v3
kind: ServiceAdvertisement
metadata:
name: advertise-my-service
spec:
services: ["my-service"]
aggregation: /32
communities: ["64512:100"]注意事项
- 确保你的网络设备配置了正确的 BGP 对等体
- 大型集群中宣告大量 Service 可能会影响网络性能
- 在生产环境中建议使用路由聚合减少路由表大小
- 对于 LoadBalancer 类型的 Service,Calico 也可以与 MetalLB 集成
故障排查
检查 BGP 会话状态:
calicoctl node status检查宣告的路由:
calicoctl get serviceadvertisement查看 BIRD 配置(在 Calico 节点上):
birdc show protocols birdc show route
以上配置可以帮助你将 Kubernetes Service 的 IP 地址通过 BGP 宣告到外部网络,实现更灵活的网络集成。
更新日志
2025/8/18 08:50
查看所有更新日志
fb1f0-add service bgp于
