使用kubectl-sae工具管理应用的网络访问Service

通过为应用绑定传统型负载均衡CLB,可以实现从公网或私网访问应用。应用绑定的CLB实例对应于Kubernetes的Service资源类型。本文介绍如何使用kubectl-sae工具管理应用的网络访问,并提供相关的K8s YAML配置文件示例。

前提条件

已安装kubectl-sae工具,并配置AccessKey ID、AccessKey Secret、应用部署地域,详见安装与配置kubectl-sae工具

管理应用的网络访问

创建Service

  1. 编写配置文件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
  2. 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名称,格式为${公网/私网类型}-${应用名}

对于${公网/私网类型},internet表示公网类型,intranet表示私网类型。

TYPE

Service的类型,LoadBalancer表示负载均衡。

EXTERNAL-IP

应用的网络访问IP地址。

PORT(S)

应用的网络访问端口。

BOUND

应用名。

AGE

Service的存在时长。

查看Service详情

kubectl-sae工具支持使用getdescribe命令查看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工具支持使用editapply命令更新Service。

通过edit命令在线编辑Service配置信息

  1. 执行以下命令,将会以YAML文件的形式打开指定Service的配置信息。

    kubectl-sae edit service ${service-name} -n ${namespace}
    # ${service-name}为service名称
    # ${namespace}为命名空间ID,如果不通过-n参数指定命名空间,则默认使用default命名空间
  2. 在打开的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名称,格式为${公网或私网类型}-${应用名}

对于${公网或私网类型},internet表示公网类型,intranet表示私网类型。

更新时不支持此配置项。

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 证书。

示例如下:

  annotations:
    sae.aliyun.com/loadbalancer-cert-id: '{"port-443": "certId-1", "port-444": "certId-2"}' 
如果协议类型为HTTPS,创建时必须指定此配置项。

metadata.uid

使用固定格式:${应用ID}/${公网或私网类型}

更新时不支持此配置项。

spec.ports[i].name

使用固定格式:port-${网络访问端口}

创建时必须指定此配置项。
更新时不支持此配置项。

spec.ports[i].port

网络访问端口。

创建时必须指定此配置项。
更新时不支持此配置项。

spec.ports[i].protocol

网络访问的协议类型。取值如下:HTTP、HTTPS、TCP、UDP

创建时必须指定此配置项。
更新时不支持此配置项。

spec.ports[i].targetPort

容器端口号。

创建时必须指定此配置项。
更新时不支持此配置项。

spec.selector

使用固定格式如下:

  selector:
    sae.aliyun.com/app-name: ${应用名}
创建时必须指定此配置项。
更新时不支持此配置项。

spec.type

使用固定值LoadBalancer

status.loadbalancer.ingress[i].ip

网络访问IP地址。

创建时不支持此配置项。
更新时不支持此配置项。