K8s的Service资源是一种为一组功能相同的Pod提供统一不变的流量入口的资源。这里介绍其中的LoadBalance Service
概要
LoadBalance Service视作为对NodePort Service的拓展。在大多数K8s云提供商的环境中,K8s集群可以通过负载均衡器使得LoadBalance Service拥有一个公网IP。以便真正地对外暴露服务。但如果K8s在不支持LoadBalance Service的环境中运行,则不会调配负载均衡器。此时该服务将会表现的像是一个NodePort Service,因为LoadBalance Service是对NodePort Service的拓展。由于这里我们是通过Kind在本地搭建的K8s集群,故可以通过Metallb使得LoadBalance Service被分配一个外网IP
部署Metallb
1. 下载配置文件
通过下述链接分别下载Metallb命名空间、清单的YAML配置文件。保存到本地后,分别命名为01-metallb-namespace.yaml、02-metallb-manifest.yaml
1 | # 配置文件1: Metallb的命名空间 |
2. 应用配置文件
通过kubectl apply命令依次应用上述两个配置文件
1 | # 应用Metallb的命名空间 |
然后等待Metallb Pod的状态全部为 Running,如下所示
3. 配置负载均衡器的IP地址池
通过执行下述命令查看Docker中Kind网络的子网信息
1 | # 查看Docker中Kind网络信息 |
不能看出,在当前环境下,Docker中kind网络的子网地址为172.18.0.0/16
那么我们只需保证负载均衡器的IP地址池中的IP,全部在该网段下即可。故我们可以通过创建Configmap将Metallb配置为使用172.18.255.200~172.18.255.250范围的IP。配置文件03-metallb-configmap.yaml的完整内容如下所示
1 | # 设置负载均衡器的IP地址池 |
同理,通过kubectl apply命令应用该配置文件即可
1 | # 应用Metallb的Configmap |
效果如下所示
部署 LoadBalance Service
配置文件如下所示
1 | # API组、版本 |
效果如下所示,该服务的EXTERNAL-IP列显示已经被分配了一个外网IP
现在我们进行验证,先通过服务的集群IP、端口访问。效果如下所示
再通过集群节点IP、服务在节点上打开的端口来访问服务。效果如下所示
最后再通过服务的外网IP、端口来访问服务。效果如下所示
参考文献
- Kubernetes in Action中文版 Marko Luksa著
- 深入剖析Kubernetes 张磊著