千云物流 - 使用k8s负载均衡openelb

这篇具有很好参考价值的文章主要介绍了千云物流 - 使用k8s负载均衡openelb。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

openelb的介绍

具体根据官方文档进行安装官方文档,这里作为测试环境的安装使用.
OpenELB 是一个开源的云原生负载均衡器实现,可以在基于裸金属服务器、边缘以及虚拟化的 Kubernetes 环境中使用 LoadBalancer 类型的 Service 对外暴露服务。OpenELB 项目最初由 KubeSphere 社区 发起,目前已作为 CNCF 沙箱项目 加入 CNCF 基金会,由 OpenELB 开源社区维护与支持。
与MetalLB类似,OpenELB也拥有两种主要工作模式:Layer2模式和BGP模式。OpenELB的BGP模式目前暂不支持IPv6。

  • layer2 Mode
    千云物流 - 使用k8s负载均衡openelb,千云物流,kubernetes,负载均衡,linux
    千云物流 - 使用k8s负载均衡openelb,千云物流,kubernetes,负载均衡,linux

  • BGP Mode
    千云物流 - 使用k8s负载均衡openelb,千云物流,kubernetes,负载均衡,linux

准备k8s的环境

千云物流测试环境部署使用openelb部署.

所需要的软件&版本 对应依赖软件版本
linux [CentOS] 7.9.2009
kubernetes v1.22.12
docker [20.10.8] 20.10.8
openelb kubesphere/openelb:v0.5.1

准备Layer2 Mode配置

  • 配置ARP参数
    部署Layer2模式需要把k8s集群中的ipvs配置打开strictARP,

strict ARP configure arp_ignore and arp_announce to avoid answering ARP queries from kube-ipvs0 interface

# 查看kube-proxy中的strictARP配置
$ kubectl get configmap -n kube-system kube-proxy -o yaml | grep strictARP
#strictARP: false

# 手动修改strictARP配置为true
$ kubectl edit configmap -n kube-system kube-proxy
configmap/kube-proxy edited

# 使用命令直接修改并对比不同
$ kubectl get configmap kube-proxy -n kube-system -o yaml | sed -e "s/strictARP: false/strictARP: true/" | kubectl diff -f - -n kube-system

# 确认无误后使用命令直接修改并生效
$ kubectl get configmap kube-proxy -n kube-system -o yaml | sed -e "s/strictARP: false/strictARP: true/" | kubectl apply -f - -n kube-system

# 重启kube-proxy确保配置生效
$ kubectl rollout restart ds kube-proxy -n kube-system

# 确认配置生效
$ kubectl get configmap -n kube-system kube-proxy -o yaml | grep strictARP
      strictARP: true

开启之后k8s集群中的kube-proxy会停止响应kube-ipvs0网卡之外的其他网卡的arp请求,而由MetalLB接手处理。
strict ARP开启之后相当于把将arp_ignore设置为1;并将arp_announce设置为2启用严格的ARP,这个原理和LVS中的DR模式对RS的配置一样,可以参考之前的文章中的解释。

网卡配置

千云物流 - 使用k8s负载均衡openelb,千云物流,kubernetes,负载均衡,linux

#多个网卡,需要指定master节点IP,一个网卡不需要
# kubectl annotate nodes k8s-master01 layer2.openelb.kubesphere.io/v1alpha1="masterip"

创建EIP

接下来我们需要配置loadbalancerIP所在的网段资源,这里我们创建一个Eip对象来进行定义,后面对IP段的管理也是在这里进行。

  • 部署eip
apiVersion: network.kubesphere.io/v1alpha2
kind: Eip
metadata:
  # Eip 对象的名称。
  name: layer2-eip
spec:
  # Eip 对象的地址池
  address: 10.0.0.122-10.0.0.123
  # openELB的运行模式,默认为bgp
  protocol: layer2
  # OpenELB 在其上侦听 ARP/NDP 请求的网卡。该字段仅在protocol设置为时有效layer2。
  interface: ens160
  # 指定是否禁用 Eip 对象
  # false表示可以继续分配
  # true表示不再继续分配
  disable: false
status:
  # 指定 Eip 对象中的IP地址是否已用完。
  occupied: false
  # 指定 Eip 对象中有多少个 IP 地址已分配给服务。
  # 直接留空,系统会自动生成
  usage:
  # Eip 对象中的 IP 地址总数。
  poolSize: 2
  # 指定使用的 IP 地址和使用 IP 地址的服务。服务以Namespace/Service name格式显示(例如,default/test-svc)。
  # 直接留空,系统会自动生成
  used:
  # Eip 对象中的第一个 IP 地址。
  firstIP: 10.0.0.122
  # Eip 对象中的最后一个 IP 地址。
  lastIP: 10.0.0.123
  ready: true
  # 指定IP协议栈是否为 IPv4。目前,OpenELB 仅支持 IPv4,其值只能是true.
  v4: true
  • 检查eip状态
 kubectl apply -f openelb/openelb-eip.yaml
 #部署完成后检查eip的状态
 kubectl get eip

部署openelb

这里我们还是使用yaml进行部署,官方把所有部署的资源整合到了一个文件中,我们还是老规矩先下载到本地再进行部署文章来源地址https://www.toymoban.com/news/detail-755937.html

apiVersion: v1
kind: Namespace
metadata:
  name: openelb-system
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.4.0
  creationTimestamp: null
  name: bgpconfs.network.kubesphere.io
spec:
  group: network.kubesphere.io
  names:
    kind: BgpConf
    listKind: BgpConfList
    plural: bgpconfs
    singular: bgpconf
  scope: Cluster
  versions:
    - name: v1alpha1
      schema:
        openAPIV3Schema:
          description: BgpConf is the Schema for the bgpconfs API
          properties:
            apiVersion:
              description: 'APIVersion defines the versioned schema of this representation
              of an object. Servers should convert recognized schemas to the latest
              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
              type: string
            kind:
              description: 'Kind is a string value representing the REST resource this
              object represents. Servers may infer this from the endpoint the client
              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
              type: string
            metadata:
              type: object
            spec:
              description: struct for container bgp:config. Configuration parameters
                relating to the global BGP router.
              properties:
                as:
                  description: original -> bgp:as bgp:as's original type is inet:as-number.
                    Local autonomous system number of the router.  Uses the 32-bit as-number
                    type from the model in RFC 6991.
                  format: int32
                  type: integer
                port:
                  description: original -> gobgp:port
                  format: int32
                  maximum: 65535
                  minimum: 1
                  type: integer
                routerID:
                  description: original -> bgp:router-id bgp:router-id's original type
                    is inet:ipv4-address. Router id of the router, expressed as an 32-bit
                    value, IPv4 address.
                  pattern: ^([0-9]{
   1,3}\.){
   3}[0-9]{
   1,3}$
                  type: string
              required:
                - as
                - port
                - routerID
              type: object
            status:
              description: BgpConfStatus defines the observed state of BgpConf
              type: object
          type: object
      served: true
      storage: false
    - name: v1alpha2
      schema:
        openAPIV3Schema:
          description: BgpConf is the Schema for the bgpconfs API
          properties:
            apiVersion:
              description: 'APIVersion defines the versioned schema of this representation
              of an object. Servers should convert recognized schemas to the latest
              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
              type: string
            kind:
              description: 'Kind is a string value representing the REST resource this
              object represents. Servers may infer this from the endpoint the client
              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
              type: string
            metadata:
              type: object
            spec:
              description: Configuration parameters relating to the global BGP router.
              properties:
                as:
                  format: int32
                  type: integer
                asPerRack:
                  additionalProperties:
                    format: int32
                    type: integer
                  type: object
                families:
                  items:
                    format: int32
                    type: integer
                  type: array
                gracefulRestart:
                  properties:
                    deferralTime:
                      format: int32
                      type: integer
                    enabled:
                      type: boolean
                    helperOnly:
                      type: boolean
                    localRestarting:
                      type: boolean
                    longlivedEnabled:
                      type: boolean
                    mode:
                      type: string
                    notificationEnabled:
                      type: boolean
                    peerRestartTime:
                      format: int32
                      type: integer
                    peerRestarting:
                      type: boolean
                    restartTime:
                      format: int32
                      type: integer
                    staleRoutesTime:
                      format: int32
                      type: integer
                  type: object
                listenAddresses:
                  items:
                    type: string
                  type: array
                listenPort:
                  format: int32
                  type: integer
                policy:
                  type: string
                routerId:
                  type: string
                useMultiplePaths:
                  type: boolean
              type: object
            status:
              description: BgpConfStatus defines the observed state of BgpConf
              properties:
                nodesConfStatus:
                  additionalProperties:
                    properties:
                      as:
                        format: int32
                        type: integer
                      routerId:
                        type: string
                    type: object
                  type: object
              type: object
          type: object
      served: true
      storage: true
      subresources:
        status: {
   }
status:
  acceptedNames:
    kind: ""
    plural: ""
  conditions: []
  storedVersions: []
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.4.0
  creationTimestamp: null
  name: bgppeers.network.kubesphere.io
spec:
  group: network.kubesphere.io
  names:
    kind: BgpPeer
    listKind: BgpPeerList
    plural: bgppeers
    singular: bgppeer
  scope: Cluster
  versions:
    - name: v1alpha1
      schema:
        openAPIV3Schema:
          description: BgpPeer is the Schema for the bgppeers API
          properties:
            apiVersion:
              description: 'APIVersion defines the versioned schema of this representation
              of an object. Servers should convert recognized schemas to the latest
              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
              type: string
            kind:
              description: 'Kind is a string value representing the REST resource this
              object represents. Servers may infer this from the endpoint the client
              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
              type: string
            metadata:
              type: object
            spec:
              properties:
                addPaths:
                  description: original -> bgp:add-paths Parameters relating to the
                    advertisement and receipt of multiple paths for a single NLRI (add-paths).
                  properties:
                    sendMax:
                      description: original -> bgp:send-max The maximum number of paths
                        to advertise to neighbors for a single NLRI.
                      type: integer
                  type: object
                config:
                  description: original -> bgp:neighbor-address original -> bgp

到了这里,关于千云物流 - 使用k8s负载均衡openelb的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • K8s 部署 CNI 网络组件+k8s 多master集群部署+负载均衡

    ------------------------------ 部署 CNI 网络组件 ------------------------------ ---------- 部署 flannel ---------- K8S 中 Pod 网络通信: ●Pod 内容器与容器之间的通信 在同一个 Pod 内的容器(Pod 内的容器是不会跨宿主机的)共享同一个网络命名空间,相当于它们在同一台机器上一样,可以用 lo

    2024年02月08日
    浏览(48)
  • 【云原生】k8s Service 实现服务发现和负载均衡

    在容器编排系统中,如 Kubernetes,Pod 是最小的部署单元。而一组 Pod 通常对外提供某种服务。在 Kubernetes 中,Service 就是用来对外暴露一组 Pod 的服务的资源对象。Service 可以通过 IP 地址和端口号访问,从而对外提供服务。 Service 是 Kubernetes 中一个非常重要的概念,它可以将一

    2023年04月16日
    浏览(44)
  • k8s之service五种负载均衡byte的区别

    在 k8s 中, service 是一个固定接入层,客户端可以通过访问 service 的 ip 和端口访问到 service 关联的后端pod,这个 service 工作依赖于在 kubernetes 集群之上部署的一个附件,就是kubernetes 的 dns 服务 (不同 kubernetes 版本的 dns 默认使用的也是不一样的,1.11 之前的版本使用的是 ku

    2024年02月05日
    浏览(46)
  • K8s:部署 CNI 网络组件+k8s 多master集群部署+负载均衡及Dashboard k8s仪表盘图像化展示

    目录 1 部署 CNI 网络组件 1.1 部署 flannel 1.2 部署 Calico 1.3 部署 CoreDNS 2 负载均衡部署 3 部署 Dashboard K8S 中 Pod 网络通信: ●Pod 内容器与容器之间的通信 在同一个 Pod 内的容器(Pod 内的容器是不会跨宿主机的)共享同一个网络命令空间,相当于它们在同一台机器上一样,可以用

    2024年02月05日
    浏览(47)
  • 【 云原生 | K8S 】部署 CNI 网络组件+k8s 多master集群部署+负载均衡及Dashboard k8s仪表盘图像化展示管理

    目录 1 部署 CNI 网络组件 1.1 部署 flannel 1.2 部署 Calico 1.3 部署 CoreDNS 2 负载均衡部署 3 部署 Dashboard K8S 中 Pod 网络通信: ●Pod 内容器与容器之间的通信 在同一个 Pod 内的容器(Pod 内的容器是不会跨宿主机的)共享同一个网络命令空间,相当于它们在同一台机器上一样,可以用

    2024年01月22日
    浏览(55)
  • Kubernetes(K8s)从入门到精通系列之十三:软件负载平衡选项

    当设置具有多个控制平面的集群时,可以通过将 API Server 实例置于负载均衡器后面并在运行 kubeadm init 以便新集群使用它时使用 --control-plane-endpoint 选项来实现更高的可用性。 当然,负载均衡器本身也应该具有高可用性。这通常是通过向负载均衡器添加冗余来实现的。为此,

    2024年02月14日
    浏览(50)
  • RockyLinux9.2安装k8s 1.27+calico+BGP+OpenELB

    本文在rockylinux 9.2 中使用kubeadm部署 Kubernetes 1.27 、 containerd 、 calico 、 BGP 等; 使用 OpenELB 作为 LoadBalancer ; 使用 BIRD 模拟物理路由器; 使用 kube-vip 实现 control-plane 高可用; 本文所有k8s相关组件都固定版本安装,避免因版本更新导致各种问题;如 kubelet-1.27.2 、 kubeadm-1.27.2 、 kub

    2024年02月15日
    浏览(43)
  • 基于grpc-java开发的普通工程在k8s内部署多实例,如何实现客户端流量的负载均衡

    本文主要讨论通过grpc-java开发的普通的java grpc工程,以多实例的方式部署在容器编排平台kubernetes(以下简称k8s)上,如何能够实现让同样部署在k8s 集群内的客户端请求流量均衡的分发到多个grpc应用部署实例上去。 grpc服务端程序在k8s内部署的多个实例通过headless service暴露服

    2024年01月17日
    浏览(51)
  • 云原生 黑马Kubernetes教程(K8S教程)笔记——第一章 kubernetes介绍——Master集群控制节点、Node工作负载节点、Pod控制单元

    参考文章:kubernetes介绍 本章节主要介绍应用程序在服务器上部署方式演变以及kubernetes的概念、组件和工作原理。 在部署应用程序的方式上,主要经历了三个时代: 传统部署:互联网早期,会直接将应用程序部署在物理机上 优点:简单,不需要其它技术的参与 缺点:不能为

    2024年02月04日
    浏览(57)
  • 负载均衡器 OpenELB ARP 欺骗技术解析

    作者:大飞哥,视源电子运维工程师,KubeSphere 用户委员会广州站站长,KubeSphere Ambassador。 K8S 对集群外暴露服务有三种方式:NodePort,Ingress 和 Loadbalancer。NodePort 用于暴露 TCP 服务(4 层),但限于对集群节点主机端口的占用,不适合大规模使用;Ingress 用于暴露 HTTP 服务(7 层),

    2024年02月01日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包