在Kubernetes上安装MetalLB和Nginx Ingress
2025/3/7大约 3 分钟
在Kubernetes上安装MetalLB和Nginx Ingress
为什么需要MetalLB和Ingress
在Kubernetes集群中,尤其是裸机(Bare Metal)环境下,存在两个常见的网络访问挑战:
- LoadBalancer类型服务的实现:Kubernetes没有为裸机集群提供网络负载均衡器(LoadBalancer类型的服务)的内置实现
- 服务暴露管理:当有多个服务需要被集群外部访问时,为每个服务单独暴露端口既不安全也不便于管理
这就是MetalLB和Ingress出现的原因 - MetalLB为裸机集群提供LoadBalancer能力,而Ingress则提供了统一的入口管理和路由功能。
网络规划准备
在开始安装前,需要进行简单的网络规划:
- 确定Kubernetes集群使用的网段(例如:172.18.0.0/16)
- 为MetalLB分配一段虚拟IP地址范围,用于LoadBalancer类型的服务(例如:172.18.8.83-172.18.8.89)
安装MetalLB
步骤1:部署MetalLB组件
使用官方提供的YAML文件直接安装MetalLB:
# 使用最新版本的MetalLB
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/main/config/manifests/metallb-native.yaml
# 或者使用指定版本(如v0.9.5)
# kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.5/manifests/namespace.yaml
# kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.5/manifests/metallb.yaml步骤2:配置Kube-Proxy
修改kube-proxy配置,添加strictARP: true设置:
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: "ipvs"
ipvs:
strictARP: true步骤3:验证MetalLB安装
等待MetalLB Pod运行,并验证安装状态:
kubectl get pods -n metallb-system
kubectl get l2advertisements.metallb.io -o wide -n metallb-system安装Nginx Ingress Controller
步骤1:选择适合的部署方式
对于裸机集群,我们可以使用以下命令安装Ingress Nginx Controller:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.2.0/deploy/static/provider/baremetal/deploy.yaml步骤2:处理镜像拉取问题
在国内环境中,可能会遇到无法拉取gcr.io镜像的问题。可以修改部署文件,将镜像替换为国内源:
原始镜像:
k8s.gcr.io/ingress-nginx/controller:v0.41.2@sha256:1f4f402b9c14f3ae92b11ada1dfe9893a88f0faeb0b2f4b903e2c67a0c3bf0de替换为国内镜像:
registry.cn-beijing.aliyuncs.com/lingshiedu/ingress-nginx-controller步骤3:创建Ingress Controller
使用修改后的YAML文件创建Ingress Controller:
kubectl create -f ingress-nginx-controller.yaml步骤4:配置Service类型
在裸机集群中使用Ingress Nginx,通常有三种模式:
- LoadBalancer模式:将ingress-nginx-controller的Service类型设置为LoadBalancer
type: LoadBalancer- NodePort模式:通过NodePort暴露服务
- HostNetwork模式:直接使用主机网络
在裸机环境中使用LoadBalancer类型服务
安装完MetalLB和Ingress后,就可以在裸机集群中使用LoadBalancer类型的服务了。MetalLB会自动为这类服务分配之前规划的虚拟IP地址范围内的IP。
部署示例应用程序
安装完成后,可以部署一个简单的Nginx应用程序来测试:
- 部署Nginx应用
- 创建对应的Service(类型为ClusterIP)
- 创建Ingress资源,配置域名和路径规则
总结
在Kubernetes裸机环境中,MetalLB和Ingress Nginx是一对强大的组合,它们解决了裸机集群中负载均衡和服务暴露的关键问题。通过上述步骤,您可以在自己的Kubernetes集群中成功安装和配置这两个组件,为您的应用程序提供稳定、可靠的外部访问能力。