当前位置: 首页 > article >正文

Cilium + ebpf 系列文章- (六)Cilium-BGP与分发-EXTERNAL-IP

一、首先你安装的Cilium需要支持BGP 

cilium install \
    --version v1.16.1 \
    --set ipam.mode=kubernetes \
    --set routingMode=native \
    --set ipv4NativeRoutingCIDR="10.0.0.0/8" \
    --set bgpControlPlane.enabled=true \
    --set k8s.requireIPv4PodCIDR=true

这个命令用于安装 Cilium,并配置一些特定的参数。以下是每个参数的解释:

  1. cilium install \:这是安装 Cilium 的基本命令。
  2. --version v1.16.1 \:指定要安装的 Cilium 版本为 v1.16.1。
  3. --set ipam.mode=kubernetes \:设置 IP 地址管理(IPAM)模式为 Kubernetes,这意味着 Cilium 将使用 Kubernetes 的 IPAM 机制来分配 IP 地址。
  4. --set routingMode=native \:这意味着 Cilium 将使用主机的原生路由功能来处理网络流量,而不是使用隧道模式。
  5. --set ipv4NativeRoutingCIDR="10.0.0.0/8" \:设置原生 IPv4 路由的 CIDR 范围为 10.0.0.0/8。
  6. --set bgpControlPlane.enabled=true \:启用 BGP 控制平面。
  7. --set k8s.requireIPv4PodCIDR=true:要求 Kubernetes 使用 IPv4 Pod CIDR。

这个命令通过指定这些参数来定制 Cilium 的安装和配置,以满足特定的网络需求。

 验证安装:

cilium status --wait

cilium config view | grep enable-bgp

二、使用下面3个CRD资源对象

  随着Cilium 1.16.0中引入的BGP v2控制平面,对等连接策略可以使用三个Kubernetes crd的组合来配置: 
 
CiliumBGPClusterConfig设置对等连接端点,可以引用一个或多个CiliumBGPPeerConfig资源(使用资源名) 
CiliumBGPPeerConfig配置对等连接的行为,可以引用一个或多个CiliumBGPAdvertisement资源(使用选择器) 
ciiliumbgpadvertisement通过BGP发布的cidr。

简单来说:

Ciiliumbgpadvertisement 来管理要发布哪些IP地址。可以是pod也可以是svc的外部地址。

CiliumBGPPeerConfig 这个主要是管理建立邻居的特殊参数。(下一篇有额外解释)

CiliumBGPClusterConfig 这个是配置对端的AS号以及对端建立邻居的IP地址。并且只会在匹配了相应标签的node节点上建立BGP虚拟控制面。

root@server:~# yq $HOME/bgp/*.yaml
---
apiVersion: "cilium.io/v2alpha1"
kind: CiliumBGPAdvertisement
metadata:
  name: services
  labels:
    advertise: generic
spec:
  advertisements:
    - advertisementType: "PodCIDR"
  # - advertisementType: "Service"
  #   service:
  #     addresses:
  #       - LoadBalancerIP
  #   selector:
  #     matchLabels:
  #       color: yellow
  #     matchExpressions:
  #       - {key: io.kubernetes.service.namespace, operator: In, values: ["tenant-c"]}

---
apiVersion: "cilium.io/v2alpha1"
kind: CiliumBGPClusterConfig
metadata:
  name: tor
spec:
  nodeSelector:
    matchLabels:
      kubernetes.io/hostname: clab-bgp-cplane-devel-control-plane
  bgpInstances:
    - name: "instance-65001"
      localASN: 65001
      peers:
        - name: "peer-65000-tor"
          peerASN: 65000
          peerAddress: "172.0.0.1"
          peerConfigRef:
            name: "peer-config-generic"
---
apiVersion: "cilium.io/v2alpha1"
kind: CiliumBGPPeerConfig
metadata:
  name: peer-config-generic
spec:
  families:
    - afi: ipv4
      safi: unicast
      advertisements:
        matchLabels:
          advertise: "generic"

三、分发-EXTERNAL-IP

        1、可以使用CiliumLoadBalancerIPPool来分发LoadBalancer类型Service的IP地址。

root@server:~# yq pool.yaml
# No selector, match all
apiVersion: "cilium.io/v2alpha1"
kind: CiliumLoadBalancerIPPool
metadata:
  name: "pool"
spec:
  blocks:
    - cidr: "20.0.10.0/24"

        *无规则 

root@server:~# yq pool-primary.yaml
# Expression selector
apiVersion: "cilium.io/v2alpha1"
kind: CiliumLoadBalancerIPPool
metadata:
  name: "pool-primary"
spec:
  blocks:
    - cidr: "60.0.10.0/24"
  serviceSelector:
    matchExpressions:
      - {key: color, operator: In, values: [yellow, red, blue]}

        *基于Service的标签匹配来分配

root@server:~# yq pool-yellow.yaml
# Namespace selector
apiVersion: "cilium.io/v2alpha1"
kind: CiliumLoadBalancerIPPool
metadata:
  name: "pool-yellow"
spec:
  blocks:
    - cidr: "50.0.10.0/24"
  serviceSelector:
    matchLabels:
      "io.kubernetes.service.namespace": "tenant-c"

        *基于命名空间来匹配

 

 

 


http://www.kler.cn/news/323016.html

相关文章:

  • vue3中< keep-alive >页面实现缓存及遇到的问题
  • 【深度学习】深度学习框架有哪些及其优劣势介绍
  • 【CSS】透明度 、过渡 、动画 、渐变
  • JAVAEE如何实现网页(jsp)间的数据传输?一文总结
  • 2024 icpc 第二场网络赛题解
  • vue-cli,element-plus,axios,proxy
  • 31 变量的访问方式(直接和间接),内存地址(32 位和 64 位),指针的概念与定义,取址与取值运算符( 与 *)
  • Spark Streaming 容错机制详解
  • 【Docker】如何让docker容器正常使用nvidia显卡
  • 处理execl表格的库----openpyxl
  • C++ 文件I/O流
  • 【SpringBoot详细教程】-03-整合Junit【持续更新】
  • 代码随想录Day 57|prim算法和kruskal算法精讲,题目:寻宝
  • 提升效率的秘密武器选择指南
  • PTH原理 补丁+工具
  • Java项目——苍穹外卖总结
  • Linux usb hub阅读
  • 【学习】电脑上有多个GPU,命令行指定GPU进行训练。
  • C语言习题~day33
  • 【Unity保龄球项目】的实现逻辑以及代码解释
  • Python Daphne库:ASGI服务的高效Web服务器
  • 使用FFmpeg压缩MP3格式音频
  • 利用模糊综合评价法进行数值评分计算——代码实现
  • 基于Java开发的(控制台)模拟的多用户多级目录的文件系统
  • Redis的主要特点及运用场景
  • 【Linux】ubuntu 16.04 搭建jdk 11 环境(亲测可用)
  • 数据结构:特殊矩阵 及其存储
  • 策略路由控制选路
  • apt update时出现证书相关问题,可以关闭apt验证
  • 【Redis 源码】3dict字典数据结构