V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sinycn1
V2EX  ?  Kubernetes

咨询 cilium loadbalancer 问题

  •  
  •   sinycn1 · 15 天前 · 539 次点击

    腾讯云最新优惠活动来了:云产品限时1折,云服务器低至88元/年 ,点击这里立即抢购:9i0i.cn/qcloud,更有2860元代金券免费领取,付款直接抵现金用,点击这里立即领取:9i0i.cn/qcloudquan

    (福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

    我在本地有 4 台机器 其中 1 master 3 node 利用 kubeadm 搭建 k8s1.29 版本的集群,并按照官方教程安装了 cilium CNI , 官方有提到可以使用 cilium 作为 loadbalancer 我就采用了 BGP 方式设置

    apiVersion: "cilium.io/v2alpha1"
    kind: CiliumLoadBalancerIPPool
    metadata:
      name: "pool"
    spec:
      cidrs:
        - cidr: "10.X.X.0/24"
    ---
    	
    apiVersion: "cilium.io/v2alpha1"
    kind: CiliumBGPPeeringPolicy
    metadata:
     name: 01-bgp-peering-policy
    spec:
     virtualRouters:
     - localASN: 64512
       exportPodCIDR: false
       neighbors:
        - peerAddress: '10.X.X.1/32'
          peerASN: 64512
    

    然后部署了一个 nginx 的 svc

    kind: Pod
    metadata:
      name: nginx
      labels:
        app.kubernetes.io/name: proxy
    spec:
      containers:
      - name: nginx
        image: nginx:stable
        ports:
          - containerPort: 80
            name: http-web-svc
    
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-service
    spec:
      type: LoadBalancer
      selector:
        app.kubernetes.io/name: proxy
      ports:
      - name: name-of-service-port
        protocol: TCP
        port: 80
        targetPort: http-web-svc
    
    

    k get svc 的结果 nginx-service LoadBalancer 172.16.7.185 10.X.X.2 80:31206/TCP 2d22h

    已知从 10.X.X.30 10.X.X.31 10.X.X.32 10.X.X.33 (1 master 3 node) 执行 curl http://10.X.X.2

    但是从其他机器上就不法访问 arp -a 显示 ? (10.X.X.2) at <incomplete> on eno1

    各位大神可有解决思路,小弟万分感谢

    5 条回复  ?  2024-05-07 22:50:33 +08:00
    DAPTX4869
        1
    DAPTX4869  
       15 天前
    其它机器要访问的是 31206 端口?
    pubby
        2
    pubby  
       15 天前
    其他机器是指 k8s 节点以外的机器吗?


    对你的网络地址划分不太清楚,尤其这 2 个地方不太理解:

    cidr: "10.X.X.0/24" 这里是用于分配 service external-ip 的,不要和你 node 地址段重合
    peerAddress: '10.X.X.1/32' 这里应该是一个 k8s 集群外的一个 bgp 路由 ip

    没用过 cilium,我们是用 clico 的,集群外面用 bird 部署了 bgp 路由作为 peer ,这样外面就能直连 service external-ip 了
    sinycn1
        3
    sinycn1  
    OP
       1 天前
    @pubby 感谢你的回复,目前问题还没有解决,所以我继续回帖
    1.cidr: "10.X.X.0/24" 这里是用于分配 service external-ip 的,不要和你 node 地址段重合
    之前确实是使用了同一网段,现在拆分为 10.206.20.0/22 ( node 使用)和 10.206.24.0/22 (external-ip)
    peerAddress: '10.206.20.1/32' 这里应该是一个 k8s 集群外的一个 bgp 路由 ip --- 是这样设定的

    目前还是没有成功的发布路由 有更新的话我再来回帖
    ```
    cilium bgp routes
    (Defaulting to `available ipv4 unicast` routes, please see help for more options)

    Node VRouter Prefix NextHop Age Attrs
    ```
    pubby
        4
    pubby  
       20 小时 50 分钟前
    你先看一下 external-ip 分配了没有

    然后集群外部需要有个 bgp peer 服务,可以用 bird 部署一个。(举例:192.168.3.100 )

    在外部主路由器上配个路由规则,目标 external-ip 段 走 bgp peer


    外部 bgp 服务配置, :

    ```code
    [root@centos8-bgp-gw ~]# cat /etc/bird.conf
    router id 192.168.3.100;

    log syslog all;

    protocol kernel {
    scan time 10;
    ipv4 {
    #import none;
    export all; # insert routes into the kernel routing table
    };
    merge paths on; # Allow export multipath routes (ECMP)
    graceful restart;
    }

    protocol device {
    scan time 60;
    }


    # Template example. Using templates to define IBGP route reflector clients.
    template bgp k8s_nodes {
    local 192.168.3.100 as 63400;
    neighbor as 63400;

    direct;
    ipv4 {
    import all;
    export none;
    };
    }

    # for vm-k8s-master
    protocol bgp vm_k8s_master from k8s_nodes {
    neighbor 192.168.3.105;
    }
    # for vm1-node1
    protocol bgp vm1_node1 from k8s_nodes {
    neighbor 192.168.4.121;
    }
    # for vm2-node4
    protocol bgp vm2_node4 from k8s_nodes {
    neighbor 192.168.4.104;
    }
    # for vm2-node5
    protocol bgp vm2_node5 from k8s_nodes {
    neighbor 192.168.4.105;
    }
    ```

    然后 bgp peer 上用 ip r 看一下那些 external-ip 的路由有没有自动生成
    sinycn1
        5
    sinycn1  
    OP
       10 小时 16 分钟前
    @pubby 感谢你的 update ,后来问题解决了,我使用 vyos+cilium bgp 实现了 bgp 路由动态发布,主要是需要变更 cilium 的配置,相关信息可以参考这个 issue(自己提交自己解决)
    https://github.com/cilium/cilium/issues/32375
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4888 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 01:06 · PVG 09:06 · LAX 18:06 · JFK 21:06
    Developed with CodeLauncher
    ? Do have faith in what you're doing.


    http://www.vxiaotou.com