为私有Kubernetes集群创建LoadBalancer服务
MetalLB - 可以为私有 Kubernetes 集群提供LoadBalancer类型的负载均衡支持。
在Kubernetes集群中,可以使用Nodeport、Loadbalancer和Ingress三种方式老来暴露服务给外部访问(缺省情况下,内部Pod提供的服务是在相互隔离的子网中,只有同一个Pod内部的几个容器可以直接进行网络访问)。不过,目前只有Nodeport和Ingress在Kuberntes有内部实现,而要使用Loadbalancer,只能在GCP/AWS等云服务平台上使用。Nodeport和Ingress有一定的局限性,这 里介绍的MetalLB可以在私有的Kubernetes集群提供Loadbalancer至此,从而与云服务商的配置实现完全一致。
- 参考:
- 源码:https://github.com/google/metallb
- 文档:https://metallb.universe.tf/
- Nodeport、Loadbalancer和Ingress,https://my.oschina.net/u/2306127/blog/1647202
- 基于Kubernetes的服务网格系统
简介
在私有网络上运行 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 配置。
$ 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 设置网址范围以及协议相关的选择和配置,这里以一个简单的二层配置为例:
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
:
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
服务创建运行之后,可以列出服务信息:
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 供用户参考。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
Prometheus+Grafana实现SpringCloud服务监控
背景: 由于项目上使用spring cloud,需要对一些服务指标就需要进行监控,以便于时刻了解各服务的运行状态。经过搜索材料,发现大多方案直接推荐用微服务最佳实践者——Netflix开源的方案(Atlas+Grafana),试着跟着搜索到的一些资料,并进行了尝试,结果表明成功案例都是在SpringBoot1.x上的;在SpringBoot2.x上,尚无资料表示成功使用上Atlas这方案。 另外,在研究的过程中,发现SpringBoot2.x上已引入第三方实现的metrics Facade(micrometer.io,可以同日志的Facade框架Sl4j等同理解,并已覆盖Atlas、Datadog、Ganglia、Graphite、Influx、JMX、NewRelic、Prometheus、SignalFx、StatsD、Wavefront等业内主流的tsdb实现)。再者,项目最终需要应用kubernetes来进行容器编排,其官方推荐的容器监控服务,就是用Prometheus配上Grafana作为监 控展现;为了统一,就转身到Prometheus+Grafana这方案上来。 0. 环...
-
下一篇
Kubernate之安装-yellowcong
Kubernate安装的时候,需要先安装主节点,然后安装从节点,主节点中,需要注意配置文件的配置,而且ETCD最好做单独服务,让etcd先启动后,然后再启动kubernate的master和node子节点,Master节点 有apiServer ,Scheduler,Controller-manager,Node节点有:kubelet和proxy和flanned,flanned是用来管理docker容器网络的,而且需要结合etcd来使用。 kubernate容器的调度模型 服务配置 服务器 服务 master apiserver, controller-manager, scheduler node flannel, docker, kubelet, kube-proxy etcd etcd 在安装前,一定要先安装ETCD,然后是kubernetes-master,最后是kubernetes-node, 在子节点和从节点中,都需要安装flannel ,通过flannel对Kubernetes集群的网络进行管理 准备工作 a.关闭SELINUX 关闭SELINUX,可以解决程序安装然后 ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Windows10,CentOS7,CentOS8安装Nodejs环境
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Hadoop3单机部署,实现最简伪集群
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合Redis,开启缓存,提高访问速度
- MySQL8.0.19开启GTID主从同步CentOS8
- Docker使用Oracle官方镜像安装(12C,18C,19C)