通过为应用绑定传统型负载均衡CLB,可以实现从公网或私网访问应用。应用绑定的CLB实例对应于Kubernetes的Service资源类型。本文介绍如何使用kubectl-sae工具管理应用的网络访问,并提供相关的K8s YAML配置文件示例。
前提条件
已安装kubectl-sae工具,并配置AccessKey ID、AccessKey Secret、应用部署地域,详见安装与配置kubectl-sae工具。
管理应用的网络访问
创建Service
编写配置文件
svc.yaml
。配置文件的示例如下,各配置项的详细信息请参考K8s YAML配置项说明。apiVersion: v1 kind: Service metadata: annotations: sae.aliyun.com/loadbalancer-address-type: internet # 公网或私网类型, internet表示公网类型,intranet表示私网类型。 sae.aliyun.com/loadbalancer-id: ${clb-id} # 如果是创建新的CLB,无需指定此配置项;如果是绑定已有CLB,请指定此配置项,并将${clb-id}替换为您的CLB ID sae.aliyun.com/loadbalancer-cert-ids: '{"port-443": "certId-1"}' # 证书配置, 为对应端口配置 HTTPS 协议时,必须配置对应的 HTTPS 证书 name: internet-test-app # 固定格式 ${公网或私网类型}-${应用名} spec: ports: - name: port-80 # 固定格式 port-${对外端口} port: 80 protocol: HTTP targetPort: 80 - name: port-443 port: 443 protocol: HTTPS targetPort: 443 selector: sae.aliyun.com/app-name: test-app # 应用名 type: LoadBalancer
在
svc.yaml
文件所在路径执行以下命令。kubectl-sae apply -f svc.yaml
查看Service列表
kubectl-sae get service -l sae.aliyun.com/app-name=${deployment-name} -n ${namespace}
# ${deployment-name}为应用的名称,如果不通过-l参数指定应用名称,则默认显示范围内所有应用绑定的CLB
# ${namespace}为命名空间ID,如果不通过-n参数指定命名空间,则默认使用default命名空间
输出结果的字段说明如下:
字段 | 说明 |
NAME | Service名称,格式为 对于 |
TYPE | Service的类型,LoadBalancer表示负载均衡。 |
EXTERNAL-IP | 应用的网络访问IP地址。 |
PORT(S) | 应用的网络访问端口。 |
BOUND | 应用名。 |
AGE | Service的存在时长。 |
查看Service详情
kubectl-sae工具支持使用get
或describe
命令查看Service详情。返回结果中包含Service的配置项,详情请参考K8s YAML配置项说明。
通过get命令查看Service详情
kubectl-sae get service ${service-name} -o {yaml | json} -n ${namespace}
# ${service-name}为service名称
# -o参数指定返回结果的格式
# ${namespace}为命名空间ID,如果不通过-n参数指定命名空间,则默认使用default命名空间
通过describe命令查看Service详情
kubectl-sae describe service ${service-name} -n ${namespace}
# ${service-name}为service名称
# ${namespace}为命名空间ID,如果不通过-n参数指定命名空间,则默认使用default命名空间
更新Service
kubectl-sae工具支持使用edit
或apply
命令更新Service。
通过edit命令在线编辑Service配置信息
执行以下命令,将会以YAML文件的形式打开指定Service的配置信息。
kubectl-sae edit service ${service-name} -n ${namespace} # ${service-name}为service名称 # ${namespace}为命名空间ID,如果不通过-n参数指定命名空间,则默认使用default命名空间
在打开的YAML文件中按需修改配置信息,保存并关闭文件,等待配置信息变更完成。
通过apply命令实现按照YAML配置文件更新Service
修改已有的Service的配置文件svc.yaml
。在配置文件所在路径执行以下命令,实现Service配置信息的变更。
kubectl-sae apply -f svc.yaml
删除Service
kubectl-sae delete service ${service-name} -n ${namespace}
# ${service-name}为service名称
# ${namespace}为命名空间ID,如果不通过-n参数指定命名空间,则默认使用default命名空间
K8s YAML配置项说明
应用绑定的CLB实例对应于Kubernetes的Service资源类型。相关K8s YAML配置项说明详见下表。
配置项 | 说明 |
metadata.name | Service名称,格式为 对于 更新时不支持此配置项。 |
metadata.namespace | Service所在的命名空间。 更新时不支持此配置项。 |
metadata.annotations: sae.aliyun.com/loadbalancer-address-type | 公网或私网类型,internet表示公网类型,intranet表示私网类型。 创建时必须指定此配置项。 更新时不支持此配置项。 |
metadata.annotations: sae.aliyun.com/loadbalancer-id | 应用绑定的CLB实例ID。 创建时此配置项为可选项。如果不指定,则SAE自动创建CLB实例并绑定到应用。 更新时不支持此配置项。 |
metadata.annotations: sae.aliyun.com/loadbalancer-cert-id | 当访问CLB的协议类型为HTTPS时,通过此配置项指定HTTPS 证书。 示例如下:
如果协议类型为HTTPS,创建时必须指定此配置项。 |
metadata.uid | 使用固定格式: 更新时不支持此配置项。 |
spec.ports[i].name | 使用固定格式: 创建时必须指定此配置项。 更新时不支持此配置项。 |
spec.ports[i].port | 网络访问端口。 创建时必须指定此配置项。 更新时不支持此配置项。 |
spec.ports[i].protocol | 网络访问的协议类型。取值如下:HTTP、HTTPS、TCP、UDP 创建时必须指定此配置项。 更新时不支持此配置项。 |
spec.ports[i].targetPort | 容器端口号。 创建时必须指定此配置项。 更新时不支持此配置项。 |
spec.selector | 使用固定格式如下:
创建时必须指定此配置项。 更新时不支持此配置项。 |
spec.type | 使用固定值 |
status.loadbalancer.ingress[i].ip | 网络访问IP地址。 创建时不支持此配置项。 更新时不支持此配置项。 |