在Serverless应用引擎SAE(Serverless App Engine)上部署应用后,可以通过添加公网SLB(Server Load Balancer,负载均衡)实现应用被公网访问,也可以添加私网SLB实现同VPC内所有应用间互相访问。本文介绍如何通过Kubernetes Service为SAE应用绑定和解绑SLB。
前提条件
SAE支持以下两种命令行工具的使用方式,您可以选择其中任意一种方式。本文将以Kubectl Plugin作为默认命令行工具,介绍SAE命令行工具的使用方法。
方式一:Serverless Devs工具以及SAE插件
- 已在本地安装Serverless Devs工具。
- 已配置阿里云认证信息。
使用Serverless Devs工具的config命令配置权限。更多信息,请参见Config命令。
- 已初始化工作区。
使用Serverless Devs工具的 init命令,把当前目录初始化为工作区。
s init start-saectl -d ./
- 安装SAE插件
执行任意SAE插件的命令行,触发Serverless Devs工具安装SAE插件。
s saectl get ns
方式二:Kubectl以及SAE插件
- 已在本地安装Kubectl的SAE插件。
执行以下脚本,快速在本地安装SAE最新版本的Kubectl插件。
curl -fsSL https://sae-component-software.oss-cn-hangzhou.aliyuncs.com/kubectl_plugin/install.sh -o install-sae.sh sudo sh ./install-sae.sh
- 已配置阿里云认证信息。
以环境变量认证方式配置阿里云密钥:
export ALICLOUD_ACCESS_KEY="************" export ALICLOUD_SECRET_KEY="************" export ALICLOUD_REGION="cn-shenzhen"
背景信息
SAE目前支持查看、创建、更新和删除Loadbalancer类型的Service操作,也支持Service的核心参数,但仍然存在一些限制,例如参数兼容限制。具体参数是否兼容,请参见Service参数兼容表。
查看已有Service
- 执行以下命令,查看命名空间下所有的Service。
% kubectl sae 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的运行时间。
- 执行以下命令,查看Service的详情。
% kubectl sae 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
- 执行以下命令,查看需要添加负载均衡的应用的详情。
% kubectl sae 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**** ...
- 定义Service的YAML。
- 执行以下命令,为应用创建Service。
% kubectl sae apply -f nginx-svc.yaml
预期输出。service/nginx-svc created
- 执行以下命令,查看Service状态。
% kubectl sae 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为期望绑定SLB的应用名称时,说明负载均衡绑定完成。后续,您可以在内网环境中(本文示例绑定私网SLB)通过 10.255.XXX.XXX:80访问名称为nginx-deployment的应用。