要在 Kubespray 中启用 MetalLB,您需要执行以下步骤:
下载和安装 MetalLB 控制器。请按照官方文档中的说明进行操作。
创建一个 Kubernetes Secret 对象,以存储 MetalLB 的配置信息。您可以使用以下命令生成一个随机字符串并将其保存到文件中:
$ openssl rand -base64 128 > metallb-secret.txt
然后,使用 kubectl
命令将该文件转换为 Kubernetes Secret 对象,并将其保存到 metallb-system
命名空间中:
$ kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey="$(cat metallb-secret.txt)"
- 配置 MetalLB 控制器。创建一个 YAML 文件(例如
metallb-config.yaml
),其中包含您想要分配给 LoadBalancer 类型服务的 IP 地址范围。例如,以下配置将分配从192.168.0.100
到192.168.0.120
的 IP 地址:
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 192.168.0.100-192.168.0.120
然后,使用 kubectl apply
命令应用该配置:
$ kubectl apply -f metallb-config.yaml
- 将 MetalLB 添加到 Kubespray 集群中。在 Kubespray 部署期间,使用
inventory/sample/group_vars/loadbalancer.yml
文件指定 MetalLB 的配置信息。例如:
metallb_enabled: true
metallb_version: v0.10.2
metallb_secret_key: "secretkey"
metallb_ip_range:
- "192.168.0.100-192.168.0.120"
请注意,在此示例中,metallb_secret_key
变量应设置为您在第二步中创建的 Kubernetes Secret 对象的名称。
- 执行 Kubespray 部署。运行以下命令以执行 Kubespray 部署:
$ ansible-playbook -i inventory/mycluster/hosts.ini --become --become-user=root cluster.yml
- 测试 MetalLB 是否正常工作。在 Kubespray 部署成功后,您可以通过部署一个 LoadBalancer 类型服务来测试 MetalLB 是否正常工作。例如,使用以下 YAML 文件创建一个名为
nginx-lb
的 Nginx Deployment 和 Service:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx-lb
replicas: 1
template:
metadata:
labels:
app: nginx-lb
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
type: LoadBalancer
selector:
app=nginx-lb
ports:
- port :80
targetPort :80
protocol :TCP
然后,使用 kubectl
命令部署该服务:
$ kubectl apply -f nginx-lb.yaml
运行以下命令以获取新创建的 Service 的状态:
$ kubectl get service nginx-service
您应该会看到一个类似于以下输出的内容:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-service LoadBalancer 10.0.30.148 192.168.0.100 80:31716/TCP 31s
其中 EXTERNAL-IP
字段显示了由 MetalLB 分配给 Nginx Service 的 IP 地址。
如果一切正常,您现在可以使用此 IP 地址访问 Nginx Service。