ACK中通过Annotation配置负载均衡

ACK中通过Annotation配置负载均衡

默认使用share规格的负载均衡,阿里云已经停用了,导致控制器无法创建新的负载均衡,需要通过service的annotation指定规格 service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec: "slb.s1.small"

并且很多k8s service 的annotation不可用,比如指定使用已创建的负载均衡(推荐)service.beta.kubernetes.io/alicloud-loadbalancer-id:lb-xxxx

  • 创建一个私网类型的负载均衡
apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "intranet"
  name: nginx
  namespace: default
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    run: nginx
  type: LoadBalancer
  • 指定负载均衡规格
apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-instance-charge-type: "PayBySpec"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec: "slb.s1.small"
  name: nginx
  namespace: default
spec:
  ports:
  - port: 443
    protocol: TCP
    targetPort: 443
  selector:
    run: nginx
  type: LoadBalancer
  • 使用已有的负载均衡

    • 默认情况下,使用已有的负载均衡实例,不会覆盖监听,如要强制覆盖已有监听,请配置

      service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners 为 true。

      说明 复用已有的负载均衡默认不覆盖已有监听,因为以下两点原因:

      • 如果已有负载均衡的监听上绑定了业务,强制覆盖可能会引发业务中断。
      • 由于CCM目前支持的后端配置有限,无法处理一些复杂配置。如果有复杂的后端配置需求,可以在不覆盖监听的情况下,通过控制台自行配置监听。

      如存在以上两种情况不建议强制覆盖监听,如果已有负载均衡的监听端口不再使用,则可以强制覆盖。

    • 使用已有的负载均衡暂不支持添加额外标签(annotation: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-additional-resource-tags)。

    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: "${YOUR_LOADBALANCER_ID}"
      name: nginx
      namespace: default
    spec:
      ports:
      - port: 443
        protocol: TCP
        targetPort: 443
      selector:
        run: nginx
      type: LoadBalancer
  • 使用已有的负载均衡,并强制覆盖已有监听

    强制覆盖已有监听,如果监听端口冲突,则会删除已有监听。

    注意 复用已有SLB且设置forceoverridetrue时,请勿多个Service复用同一个SLB的同一个监听,否则会导致监听配置冲突。

    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: "${YOUR_LOADBALANCER_ID}"
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners: "true"
      name: nginx
      namespace: default
    spec:
      ports:
      - port: 443
        protocol: TCP
        targetPort: 443
      selector:
        run: nginx
      type: LoadBalancer
  • 创建负载均衡时,指定主备可用区

    • 某些region的负载均衡不支持主备可用区,例如ap-southeast-5。
    • 一旦创建,主备可用区不支持修改。
    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-master-zoneid: "ap-southeast-5a"
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-slave-zoneid: "ap-southeast-5a"
      name: nginx
      namespace: default
    spec:
      ports:
      - port: 80
        protocol: TCP
        targetPort: 80
      selector:
        run: nginx
      type: LoadBalancer
  • 创建按带宽付费的负载均衡

    • 仅支持公网类型的负载均衡实例。

      其他限制,请参见修改公网负载均衡实例的计费方式

    • 以下两项Annotation必选。

      此处提供的是示例值,请根据实际业务需要自行设置。

    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-charge-type: "paybybandwidth"
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-bandwidth: "2"
      name: nginx
      namespace: default
    spec:
      ports:
      - port: 443
        protocol: TCP
        targetPort: 443
      selector:
        run: nginx
      type: LoadBalancer

    说明 service.beta.kubernetes.io/alibaba-cloud-loadbalancer-bandwidth为带宽峰值。