手机版 欢迎访问it开发者社区(www.mfbz.cn)网站

当前位置: > 开发

mac+kind+ MetalLB实现集群load balance功能

时间:2021/6/8 22:07:03|来源:|点击: 次

使用kind安装k8s集群时,默认不提供load balance能力的。

对于需要该能力的,kind官方给出了方案:使用metalLb。

安装教程见链接:https://kind.sigs.k8s.io/docs/user/loadbalancer/

 

但该方案只适用于linux上的kind。对于mac,由于docker on mac是利用hyperkit进行虚拟化的。docker bridge网络的接口并不是可路由的接口,实际上会链接到一个socket。

hyperkit介绍:http://collabnix.com/how-docker-for-mac-works-under-the-hood/

这就导致mac上的网络和kind集群内是不互通的。因此如果在mac浏览器或者shell中,想去访问集群内service的lb地址,是不通的。

 

解决方案:

需要一种能在mac上访问docker0网桥的方法。

docker-tuntap-osx项目:https://github.com/AlmirKadric-Published/docker-tuntap-osx

该项目解决了这个问题。此 项目允许在主机和kind node之间创建桥接网络。随后,创建一个网关地址,然后可以使用该地址进行路由以命中 docker 网络内的集群服务。

但是有一些问题需要指出来:

1、每次机器重启,都需要重启该shim,并重启docker

 

解决步骤:

1、clone该项目到本地。

2、使用brew安装tuntap。

brew tap homebrew/cask

brew cask install tuntap

第二步可能会出现安装失败,如下所示:

这是因为mac没有授权:

打开系统偏好设置中的安全与隐私,里面会有个提示是否安装打开,点击确认,这里很快就会消失,如果没有,再执行这一步。

3、推出docker for mac

4、执行项目仓库中的 ./sbin/docker_tap_install.sh脚本。

5、docker启动完成后,可以grep看下网络接口,是否新增tap

6、有了该接口,可以运行项目中的up脚本,来启动tap接口。以便设置与docker网络相连。

cat ./sbin/docker_tap_up.sh

 #!/bin/bash

  set -o nounset
  set -o errexit

  # Local and host tap interfaces
  localTapInterface=tap1
  hostTapInterface=eth1

  # Local and host gateway addresses
  localGateway='10.0.75.1/30'
  hostGateway='10.0.75.2'
  hostNetmask='255.255.255.252'

  # Startup local and host tuntap interfaces
  sudo ifconfig $localTapInterface $localGateway up
  docker run --rm --privileged --net=host --pid=host alpine ifconfig $hostTapInterface $hostGateway netmask $hostNetmask up

注意,可能要根据自身的docker网络配置,更新脚本中的localGateway或者hostGateway。但一般而已,默认值即可。

7、执行该脚本(./sbin/docker_tap_up.sh)后,用IP a检查下该接口是否up了

 

8、部署kind集群,kind create cluster --name=cluster1

9、查看节点的网络,kubectl get node -o wide,可以看到节点是部署在172.18.xx.xx的网络上。

要在我们之前创建的tap接口上使用网关,需要在mac上,添加一条该网络的路由。该路由允许我们当访问172.18.xx.xx集群内网络时,流量会通过tap接口。

kind会创建一个名为kind的网络,使用docker network inspect kind,并查看subnet的字段。

subnet为172.18.0.0/16,使用该信息,可以在mac上创建静态路由如下:

sudo route -v add -net 172.18.0.1 -netmask 255.255.0.0 10.0.75.2

这条路由表示,所有目的地为172.18.0.1/16的数据包,都会经由10.0.75.2进行转发。而10.0.75.2正是tap接口的gateway。

 

10、设置好路由后,可以设置kind集群的metalLB了。

参考文档:https://kind.sigs.k8s.io/docs/user/loadbalancer/

11、部署deployment和lb类型的svc进行测试即可。

 

Copyright © 2002-2019 某某自媒体运营 版权所有