文档

使用YAML管理负载均衡CLB

更新时间:

Serverless 应用引擎 SAE(Serverless App Engine)上部署应用后,可以通过添加传统型负载均衡CLB(Classic Load Balancer)实现应用被公网访问,也可以添加私网CLB实现同VPC内所有应用间互相访问。本文介绍如何通过Kubernetes Service为SAE应用绑定和解绑CLB。

前提条件

  • 已在本地安装Serverless Devs工具
  • 已配置阿里云认证信息。

    使用Serverless Devs工具的config命令配置权限。更多信息,请参见Config命令

  • 已初始化工作区。
    使用Serverless Devs工具的init命令,把当前目录初始化为工作区。
    s init start-saectl -d ./
  • 已安装SAE插件。
    执行任意SAE插件的命令行,触发Serverless Devs工具安装SAE插件。
    s saectl get ns

背景信息

SAE目前支持查看、创建、更新和删除Loadbalancer类型的Service操作,也支持Service的核心参数,但仍然存在一些限制,例如参数兼容限制。具体参数是否兼容,请参见Service参数兼容表

查看已有Service

  1. 执行以下命令,查看命名空间下所有的Service。

    % s saectl get service -n test

    预期输出。

    NAME               TYPE           EXTERNAL-IP     PORT(S)   BOUND         AGE
    internet-sae-app   LoadBalancer   120.79.XX.XX    80/TCP    sae-app       6d20h
    create-by-yaml     LoadBalancer   10.255.XXX.XX   80/TCP    service-zip   24d

    查看Service,显示字段如下。

    • NAME:命名空间中Service的名称。

    • TYPE:Service的类型。

    • EXTERNAL-IP:负载均衡(私网或者公网)的IP地址。

    • PORT(S):端口映射信息。

    • BOUND:Service后端负载对应的应用名称。

    • AGE:Service的运行时间。

  2. 执行以下命令,查看Service的详情。

    % s saectl get svc/create-by-yaml -n test -oyaml

    预期输出。

    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        serverless.aliyun.com/loadbalancer-address-type: intranet
      creationTimestamp: "2022-12-03T04:59:40Z"
      name: create-by-yaml
      uid: 7831ad15-078f-46fd-91f9-d7c972d7****/intranet
    spec:
      ports:
      - name: port-80
        port: 80
        protocol: TCP
        targetPort: 80
      selector:
        appid: 7831ad15-078f-46fd-91f9-d7c972d7****
        sae.app: service-zip
        sae.appid: 7831ad15-078f-46fd-91f9-d7c972d7****
      type: LoadBalancer
    status:
      loadBalancer:
        ingress:
        - ip: 10.255.XXX.XX

    Service的注解中往往会含有额外信息,SAE支持的注解包括如下信息。

    • serverless.aliyun.com/loadbalancer-address-type:声明负载均衡的类型,intranet代表私网,internet代表公网。

    • serverless.aliyun.com/loadbalancer-id:负载均衡的实例ID。

创建Service

  1. 执行以下命令,查看需要添加负载均衡的应用的详情。

    % s saectl get deploy/nginx-deployment -n test -oyaml

    预期输出。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      ...
    spec:
      minReadySeconds: 10
      replicas: 2
      selector:
        matchLabels:
          app: nginx
          appid: f47d7d0a-efec-4484-bf3c-4d94dd29****
      template:
        metadata:
          creationTimestamp: null
          labels:
            abc: foo1
            app: nginx
            appid: f47d7d0a-efec-4484-bf3c-4d94dd29****
        ...
                                
  2. 定义Service的YAML。

    1. 根据上面示例中Pod Template的Labels,设置Service的selector如下。

      spec:
        seletor:
          abc: foo1
          app: nginx
    2. 按需选择以下方式,继续定义Service。

      • 方式一: 为应用创建新的负载均衡

        示例如下。

        apiVersion: v1
        kind: Service
        metadata:
          annotations:
            serverless.aliyun.com/loadbalancer-address-type: intranet
          name: nginx-svc
          namespace: test
        spec:
          ports:
          - name: port-80
            port: 80
            protocol: TCP
            targetPort: 80
          selector:
            abc: foo1
            app: nginx

        示例中serverless.aliyun.com/loadbalancer-address-type注解的值为intranet,说明会为应用创建私网类型的CLB。如果需要公网类型的CLB,需要将注解值改为internet

      • 方式二: 将应用绑定到已有的负载均衡上

        在方式一的Service定义中加上注解serverless.aliyun.com/loadbalancer-id: lb-xxxx,应用将复用已有的负载均衡。

        示例如下。

        apiVersion: v1
        kind: Service
        metadata:
          annotations:
            serverless.aliyun.com/loadbalancer-address-type: intranet
            serverless.aliyun.com/loadbalancer-id: lb-xxx
          name: nginx-svc
          namespace: test
        spec:
          ports:
          - name: port-80
            port: 80
            protocol: TCP
            targetPort: 80
          selector:
            abc: foo1
            app: nginx
  3. 执行以下命令,为应用创建Service。

    % s saectl apply -f nginx-svc.yaml

    预期输出。

    service/nginx-svc created
  4. 执行以下命令,查看Service状态。

    % s saectl get -f nginx-svc.yaml

    预期输出。

    NAME        TYPE           EXTERNAL-IP      PORT(S)   BOUND              AGE
    nginx-svc   LoadBalancer   10.255.XXX.XXX   80/TCP    nginx-deployment   35s

    BOUND为期望绑定CLB的应用名称时,说明负载均衡绑定完成。后续,您可以在内网环境中(本文示例绑定私网CLB)通过10.255.XXX.XXX:80访问名称为nginx-deployment的应用。

  • 本页导读 (1)
文档反馈