mac+kind+ MetalLB实现集群load balance功能
使用kind安装k8s集群时,默认不提供load balance能力的。对于需要该能力的,kind官方给出了方案:使用metalLb。安装guo che
使用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进行测试即可。
更多推荐
所有评论(0)