【kubernetes 】Helm 部署 MetalLB(LoadBalancer)

网友投稿 260 2022-09-11

【kubernetes 】Helm 部署 MetalLB(LoadBalancer)

基本介绍

MetalLB是使用标准路由协议的裸机​​Kubernetes​​集群的负载均衡器实现。

Kubernetes没有为裸机集群提供网络负载平衡器的实现(​​服务类型为LoadBalancer​​)。Kubernetes附带的Network LB的实现都是调用各种IaaS平台(GCP,AWS,Azure等)的粘合代码。如果您不在支持的IaaS平台(GCP,AWS,Azure等)上运行,则LoadBalancers在创建时将无限期保持“待处理”状态。

裸机集群运营商只剩下两个较小的工具,即“ NodePort”和“ externalIPs”服务,可将用户流量引入其集群。这两个选项在生产用途上都有很大的缺点,这使裸金属集群成为Kubernetes生态系统中的二等公民。

MetalLB旨在通过提供与标准网络设备集成的Network LB实现来解决这种不平衡问题,从而使裸机群集上的外部服务也尽可能“正常运行”。

条件

MetalLB需要以下功能才能运行:

1、一个​​Kubernetes​​集群,运行Kubernetes 1.13.0或更高版本,还没有网络负载平衡功能。

2、​​群集的网络配置​​可以与MetalLB共存。

3、MetalLB目前只支持IPv4地址。

根据操作模式,您可能需要一个或多个能够说​​BGP的​​路由器 。

Metallb基本原理

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

就会完成两部分的工作: 1.地址分配 用户需要在配置中提供一个地址池,Metallb 将会在其中选取地址分配给服务。 2.地址广播 根据不同配置,Metallb 会以二层(ARP/NDP)或者 BGP 的方式进行地址的广播。

基本原理图

部署

使用helm 进行部署 metallb

helm repo add metallb install metallb metallb/metallb

编辑配置文件指定地址段

vim  values.yaml

configInline:  # The address-pools section lists the IP addresses that MetalLB is  # allowed to allocate, along with settings for how to advertise  # those addresses over BGP once assigned. You can have as many  # address pools as you want.  address-pools:  - # A name for the address pool. Services can request allocation    # from a specific address pool using this name, by listing this    # name under the 'metallb.universe.tf/address-pool' annotation.    name: default    # Protocol can be used to select how the announcement is done.    # Supported values are bgp and layer2.    protocol: layer2    # A list of IP address ranges over which MetalLB has    # authority. You can list multiple ranges in a single pool, they    # will all share the same settings. Each range can be either a    # CIDR prefix, or an explicit start-end range of IPs.    addresses:    - 10.0.32.71-10.0.32.90

helm install metallb metallb/metallb -f values.yaml

service的yaml配置示例

配置自动生成地址

[centos@k8s-master ~]$ vim tutorial-2.yamlapiVersion: apps/v1beta2kind: Deploymentmetadata:  name: nginxspec:  selector:    matchLabels:      app: nginx  template:    metadata:      labels:        app: nginx    spec:      containers:      - name: nginx        image: nginx        ports:        - name:         containerPort: 80---apiVersion: v1kind: Servicemetadata:  name: nginxspec:  ports:  - name:   port: 80    protocol: TCP    targetPort: 80  selector:    app: nginx  type: LoadBalancer

配置指定IP地址:

apiVersion: v1kind: Servicemetadata:  name: nginx  annotations:    #metallb.universe.tf/address-pool: production-public-ips  #指定地址池    metallb.universe.tf/loadBalancerIPs: 10.0.32.75 #指定IP地址spec:  ports:  - port: 80    targetPort: 80  selector:    app: nginx  type: LoadBalancer

配置共享IP地址:

apiVersion: v1kind: Servicemetadata:  name: dns-service-tcp  namespace: default  annotations:    metallb.universe.tf/allow-shared-ip: "key-to-share-1.2.3.4"spec:  type: LoadBalancer  loadBalancerIP: 1.2.3.4  ports:    - name: dnstcp      protocol: TCP      port: 53      targetPort: 53  selector:    app: dns---apiVersion: v1kind: Servicemetadata:  name: dns-service-udp  namespace: default  annotations:    metallb.universe.tf/allow-shared-ip: "key-to-share-1.2.3.4"spec:  type: LoadBalancer  loadBalancerIP: 1.2.3.4  ports:    - name: dnsudp      protocol: UDP      port: 53      targetPort: 53  selector:    app: dns

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【kubernetes】Helm部署和使用
下一篇:春节营销带来增长动力,百威亚太一季度中国销量增长84.6%!
相关文章

 发表评论

暂时没有评论,来抢沙发吧~