部署 ALB

目录

ALB

ALB 是表示负载均衡器的自定义资源。alb-operator 默认嵌入在所有集群中,负责监听 ALB 资源的创建/更新/删除操作,并据此创建相应的 Deployment 和 Service。

对于每个 ALB,会有一个对应的 Deployment 监听所有附加到该 ALB 的 Frontends 和 Rules,并根据这些配置将请求路由到后端。

前提条件

负载均衡器 的高可用性需要 VIP。请参考 配置 VIP

配置 ALB

ALB 配置包含三部分。

# test-alb.yaml
apiVersion: crd.alauda.io/v2beta1
kind: ALB2
metadata:
  name: alb-demo
  namespace: cpaas-system
spec:
  address: 192.168.66.215
  config:
    vip:
      enableLbSvc: false
      lbSvcAnnotations: {}
    networkMode: host
    nodeSelector:
      cpu-model.node.kubevirt.io/Nehalem: "true"
    replicas: 1
    resources:
      alb:
        limits:
          cpu: 200m
          memory: 256Mi
        requests:
          cpu: 200m
          memory: 256Mi
      limits:
        cpu: 200m
        memory: 256Mi
      requests:
        cpu: 200m
        memory: 256Mi
    projects:
      - ALL_ALL
  type: nginx

资源配置

资源相关字段描述 alb 的部署配置。

字段类型描述
.spec.config.nodeSelectormap[string]stringalb 的节点选择器
.spec.config.replicasint,可选,默认 3alb 的副本数
.spec.config.resources.limitsk8s 容器资源,可选alb 中 nginx 容器的资源限制
.spec.config.resources.requestsk8s 容器资源,可选alb 中 nginx 容器的资源请求
.spec.config.resources.alb.limitsk8s 容器资源,可选alb 中 alb 容器的资源限制
.spec.config.resources.alb.requestsk8s 容器资源,可选alb 中 alb 容器的资源请求
.spec.config.antiAffinityKeystring,可选,默认 localk8s 反亲和性键

网络配置

网络字段描述如何访问 ALB。例如,在 host 模式下,alb 使用 hostnetwork,可以通过节点 IP 访问 ALB。

字段类型描述
.spec.config.networkModestring: hostcontainer,可选,默认 hostcontainer 模式下,operator 会创建一个 LoadBalancer Service,并使用其地址作为 ALB 地址。
.spec.addressstring,必填可以手动指定 alb 的地址
.spec.config.vip.enableLbSvcbool,可选container 模式下自动为 true。
.spec.config.vip.lbSvcAnnotationsmap[string]string,可选LoadBalancer Service 的额外注解。

项目配置

字段类型
.spec.config.projects[]string,必填
.spec.config.portProjectsstring,可选
.spec.config.enablePortProjectbool,可选

将 ALB 添加到项目意味着:

  1. 在 Web UI 中,只有该项目内的用户可以查找和配置此 ALB。
  2. 该 ALB 将处理属于该项目的 ingress 资源。请参考 ingress-sync
  3. 在 Web UI 中,项目 X 创建的规则不能在项目 Y 下被查找或配置。

如果启用端口项目并为项目分配端口范围,则意味着:

  1. 不能创建不属于该项目分配端口范围的端口。

调整配置

alb cr 中有一些全局配置可以调整。

ALB 操作

创建

使用 Web 控制台

Web UI 中暴露了一些常用配置。创建负载均衡器的步骤如下:

  1. 进入 Administrator

  2. 在左侧边栏点击 Network Management > Load Balancer

  3. 点击 Create Load Balancer

Web UI 中的每个输入项对应 CR 的一个字段:

参数描述
Assigned Address.spec.address
Allocated ByInstance 表示项目模式,可选择下方项目;port 表示端口项目模式,创建 alb 后可分配端口范围
使用 CLI
kubectl apply -f test-alb.yaml -n cpaas-system

更新

使用 Web 控制台
NOTE

更新负载均衡器会导致 3 到 5 分钟的服务中断,请选择合适的时间进行操作!

  1. 进入 Administrator

  2. 在左侧导航栏点击 Network Management > Load Balancer

  3. 点击 ⋮ > Update

  4. 根据需要更新网络和资源配置。

    • 请根据业务需求合理设置规格。也可参考相关文档 如何合理分配 CPU 和内存资源 进行指导。

    • 内部路由 仅支持从 Disabled 状态更新为 Enabled 状态。

  5. 点击 Update

删除

使用 Web 控制台
NOTE

删除负载均衡器后,相关端口和规则也会被删除且无法恢复。

  1. 进入 Administrator

  2. 在左侧导航栏点击 Network Management > Load Balancer

  3. 点击 ⋮ > Delete,并确认。

使用 CLI
kubectl delete alb2 alb-demo -n cpaas-system

监听端口(Frontend)

Frontend 是定义 ALB 监听端口和协议的自定义资源。 支持的协议:L7(http|https|grpc|grpcs)和 L4(tcp|udp)。 L4 代理直接使用 frontend 配置后端服务。 L7 代理使用 frontend 配置监听端口,使用 rule 配置后端服务。 如果需要添加 HTTPS 监听端口,还应联系管理员为当前项目分配 TLS 证书以实现加密。

前提条件

先创建一个 ALB。

配置 Frontend

# alb-frontend-demo.yaml
apiVersion: crd.alauda.io/v1
kind: Frontend
metadata:
  labels:
    alb2.cpaas.io/name: alb-demo
  name: alb-demo-00080
  namespace: cpaas-system
spec:
  port: 80
  protocol: http
  certificate_name: ""
  backendProtocol: "http"
  serviceGroup:
    session_affinity_policy: ""
    services:
      - name: hello-world
        namespace: default
        port: 80
        weight: 100
  1. alb 标签:必填,表示该 Frontend 所属的 ALB 实例。

  2. frontend 名称:格式为 $alb_name-$port

  3. port:监听的端口。

  4. protocol:该端口使用的协议。

    • L7 协议 https|http|grpcs|grpc 和 L4 协议 tcp|udp。
    • 选择 HTTPS 时必须添加证书;gRPC 协议添加证书为可选。
    • 选择 gRPC 协议时,后端协议默认为 gRPC,不支持会话保持。若为 gRPC 协议设置证书,负载均衡器会卸载 gRPC 证书并将未加密的 gRPC 流量转发至后端服务。
    • 如果使用 Google GKE 集群,同一 容器网络类型 的负载均衡器不能同时拥有 TCP 和 UDP 监听协议。
  5. certificate_name:用于 grpcs 和 https 协议的默认证书,格式为 $secret_ns/$secret_name

  6. backendProtocol:后端服务使用的协议。

  7. 默认 serviceGroup

    • L4 代理:必填。ALB 直接将流量转发到默认服务组。
    • L7 代理:可选。ALB 先匹配该 Frontend 上的 Rules;若无匹配,则回退到默认 serviceGroup
  8. session_affinity_policy

Frontend 操作

创建

使用 Web 控制台

  1. 进入 Container Platform

  2. 在左侧导航栏点击 Network > Load Balancing

  3. 点击负载均衡器名称进入详情页。

  4. 点击 Add Port

Web UI 中的每个输入项对应 CR 的字段:

参数描述
Session Affinity.spec.serviceGroup.session_affinity_policy
使用 CLI
kubectl apply -f alb-frontend-demo.yaml -n cpaas-system

后续操作

对于 HTTP、gRPC 和 HTTPS 端口的流量,除了默认的内部路由组外,还可以设置更多多样化的后端服务匹配 规则。负载均衡器会先根据设置的规则匹配对应的后端服务;若规则匹配失败,则匹配上述内部路由组对应的后端服务。

相关操作

可以点击列表页右侧的 ⋮ 图标,或详情页右上角的 Actions,根据需要更新默认路由或删除监听端口。

NOTE

如果负载均衡器的资源分配方式为 Port,只有管理员可以在 Administrator 视图中删除相关监听端口。

日志与监控

结合日志和监控数据,可以快速定位和解决负载均衡器问题。

查看日志

  1. 进入 Administrator

  2. 在左侧导航栏点击 Network Management > Load Balancer

  3. 点击 负载均衡器名称

  4. Logs 标签页,从容器视角查看负载均衡器运行日志。

监控指标

NOTE

负载均衡器所在集群必须部署监控服务。

  1. 进入 Administrator

  2. 在左侧导航栏点击 Network Management > Load Balancer

  3. 点击 负载均衡器名称

  4. Monitoring 标签页,从节点视角查看负载均衡器的指标趋势信息。

    • 使用率:负载均衡器在当前节点的 CPU 和内存实时使用情况。

    • 吞吐量:负载均衡器实例的整体进出流量。

更多监控指标的详细信息请参考 ALB 监控