在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
执行以下命令,查看命名空间下所有的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的运行时间。
执行以下命令,查看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
执行以下命令,查看需要添加负载均衡的应用的详情。
% 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**** ...
定义Service的YAML。
根据上面示例中Pod Template的Labels,设置Service的selector如下。
spec: seletor: abc: foo1 app: nginx
按需选择以下方式,继续定义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
执行以下命令,为应用创建Service。
% s saectl apply -f nginx-svc.yaml
预期输出。
service/nginx-svc created
执行以下命令,查看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)