在k0s上安装MetalLB负载平衡器。k0s没有内置负载均衡器,但很容易部署MetalLB,如本文档所示。
1 . 您需要为Kubernetes提供负载均衡器(实现)。
2 . 负载均衡器可以由云提供商(阿里云,腾讯云)作为外部服务来实现(需要额外费用)。
这也可以通过MetalLB在Kubernetes集群(纯软件解决方案)内部实现。
MetalLB实现了LoadBalancer类型的Kubernetes服务。当请求LoadBalancer服务时,MetalLB会从配置的范围中分配一个IP地址,并使网络知道该IP“存在”于集群中。
默认情况下,k0s与Kube Router CNI一起运行,只要不使用MetalLB的BGP模式,它就与MetalLB兼容。
apiVersion: k0s.k0sproject.io/v1beta1
kind: ClusterConfig
metadata:
name: k0s
spec:
network:
kubeProxy:
mode: ipvs
ipvs:
strictARP: true
节点之间必须允许端口7946(TCP和UDP)。此外,在安装MetalLB之前,请确保节点上的端口7946上没有运行其他软件,例如docker守护进程。
1 . 使用官方Helm chart和k0s Helm扩展管理器安装MetalLB:
https://docs.k0sproject.io/stable/helm-charts/
apiVersion: k0s.k0sproject.io/v1beta1
kind: ClusterConfig
metadata:
name: k0s
spec:
extensions:
helm:
repositories:
- name: metallb
url: https://metallb.github.io/metallb
charts:
- name: metallb
chartname: metallb/metallb
namespace: metallb
2 . 为MetalLB创建ConfigMap
接下来,您需要创建ConfigMap,其中包括负载平衡器的IP地址范围。IP池必须专用于MetalLB的使用。例如,您不能重用Kubernetes节点IP或其他服务控制的IP。但是,您可以使用私有IP地址,例如: 192.168.1.180-192.168.1.199,但如果您需要外部访问,则需要处理来自外部网络的路由。在这个例子中,我们不需要它。
创建一个YAML文件,并部署它:
kubectl apply -f metallb-12-tool.YAML
---
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: first-pool
namespace: metallb-system
spec:
addresses:
- <ip-address-range-start>-<ip-address-range-stop>
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: example
namespace: metallb-system
3 . 使用负载均衡部署测试网站(web服务器)
apiVersion: v1
kind: Namespace
metadata:
name: web
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-server
namespace: web
spec:
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: httpd
image: httpd:2.4.53-alpine
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: web-server-service
namespace: web
spec:
selector:
app: web
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
4 . 检查您的负载平衡器
运行以下命令以查看具有外部ip和端口的LoadBalancer。
kubectl get service -n web
5 . 访问示例应用程序
如果在ConfigMap中为MetalLB使用了私有IP地址(在步骤2中),则应从本地网络运行以下命令。使用上一步中的IP地址。
curl <EXTERNAL-IP>
如果你成功了,你应该看到<html><body><h1>It works!</h1></body></html>。
查看官方MetalLB文档。
https://metallb.universe.tf/installation/
使用云提供商获取负载均衡器
https://docs.k0sproject.io/stable/cloud-providers/