前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Metallb - 贫苦 K8S 用户的负载均衡支持

Metallb - 贫苦 K8S 用户的负载均衡支持

作者头像
崔秀龙
发布2019-07-23 11:25:01
4.2K0
发布2019-07-23 11:25:01
举报
文章被收录于专栏:伪架构师伪架构师

简介

在私有网络上运行 Kubernetes,和御三家相比,对 LoadBalancer 类型的服务的支持应该是众多表面差异中最醒目的一个了。类型为 LoadBalancer 的服务在 Kubernetes 中并没有直接支持,NodePort 和 ExternalIP 方案让很多私有云用户成为了 K8S 世界中的二等公民。接下来介绍的 Metallb,就给私有 Kubernetes 用户带来了一个方便、可用(而且不太成熟)的软件解决方案。

该项目发布于 2017 年底,当前处于 Beta 阶段。

Metallb 会在 Kubernetes 内运行,监控服务对象的变化,一旦察觉有新的 LoadBalancer 服务运行,并且没有可申请的负载均衡器之后,就会完成两部分的工作:

地址分配

用户需要在配置中提供一个地址池,Metallb 将会在其中选取地址分配给服务。

地址广播

根据不同配置,Metallb 会以二层(ARP/NDP)或者 BGP 的方式进行地址的广播。

支持范围

不支持 IPVS

网络插件

兼容性

Calico

部分支持(有附加文档)

Flannel

支持

Kube-router

不支持(正在跟进)

Romana

支持(有附加文档)

Weave Net

支持

一个小测试

安装

Metallb 支持 Helm 和 YAML 两种安装方法,这里我们使用第二种:

kubectl apply -f https://raw.githubusercontent.com/google/metallb/v0.7.1/manifests/metallb.yaml

很简单,Metallb 就会开始安装,会生成自己的命名空间以及 RBAC 配置。

代码语言:javascript
复制
$ kubectl get pods -n metallb-system
NAME                         READY     STATUS    RESTARTS   AGE
controller-b7896bf94-g449l   1/1       Running   0          51m
speaker-mt6kd                1/1       Running   0          51m
speaker-sqbn4                1/1       Running   0          51m

配置

接下来我们要生成一个 Configmap 文件,为 Metallb 设置网址范围以及协议相关的选择和配置,这里以一个简单的二层配置为例:

代码语言:javascript
复制
apiVersion: v1
kind: ConfigMap
metadata:
 namespace: metallb-system
 name: config
data:
 config: |
   address-pools:
   - name: my-ip-space
     protocol: layer2
     addresses:
     - 10.211.55.240/28

注意:这里的 IP 地址范围需要跟集群实际情况相对应。

使用 kubectl apply 命令应用之后,使用 kubectl logs -f [metallb-controller-pod] 会看到配置更新过程。

测试

创建一个 Nginx 的服务,服务类型为 LoadBalancer

代码语言:javascript
复制
apiVersion: apps/v1beta2
kind: Deployment
metadata:
 name: nginx
spec:
 selector:
   matchLabels:
     app: nginx
 template:
   metadata:
     labels:
       app: nginx
   spec:
     containers:
     - name: nginx
       image: nginx:1
       ports:
       - name: http
         containerPort: 80---
apiVersion: v1
kind: Service
metadata:
 name: nginx
spec:
 ports:
 - name: http
   port: 80
   protocol: TCP
   targetPort: 80
 selector:
   app: nginx
 type: LoadBalancer

服务创建运行之后,可以列出服务信息:

代码语言:javascript
复制
kubectl get svc
NAME       TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)         AGE
kube-dns   ClusterIP      10.96.0.10      <none>          53/UDP,53/TCP   7d
nginx      LoadBalancer   10.96.245.212   10.211.55.240   80:32207/TCP    54m

这里就发现,LoadBalancer 类型的服务,分配到了我们地址池中的第一个 IP。

curl http://10.211.55.240 验证,就会发现返回了 Nginx 的欢迎信息。

补充

除了这里提到的一点点简单配置之外,Metallb 的配置能力还是比较强大的,这点可以参考官网,其中谈及了不少较为务实的案例,另外还提到了部分 Issue 供用户参考。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-07-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 伪架构师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
    • 地址分配
      • 地址广播
      • 支持范围
      • 一个小测试
        • 安装
          • 配置
            • 测试
            • 补充
            相关产品与服务
            容器服务
            腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档