添加服务Service

本文主要介绍如何为应用添加服务Service实现集群内部服务间的快速访问。

背景信息

在EDAS中的容器服务Kubernetes集群中创建的应用往往都是由多个运行相同镜像的一组Pod组成,Pod虽然拥有独立的IP, 但Pod会快速地创建和删除,所以通过访问一个个可能被删除的Pod来访问应用是不现实的。

通过服务(Service)能够解耦前端和后端的关联,从而实现松耦合的微服务设计。

在EDAS中部署的K8s应用,除了通过公网或者私网负载均衡SLB实现服务对外访问外,您还可为服务添加NodePort类型的Service,通过节点IP及节点端口提供服务外部访问。此外,在EDAS中的同一个K8s集群中创建多个服务后,如果集群内部服务间需要互相访问,无法通过公网或者私网负载均衡SLB实现访问,此时您可以为服务添加ClusterIP类型Service,以实现集群内部服务间的访问。

操作步骤

  1. 登录EDAS控制台

  2. 在左侧导航栏,单击应用管理 > 应用列表,在顶部菜单栏选择地域并在页面上方选择微服务空间,在集群类型下拉列表中选择K8s集群,然后单击目标应用名称

  3. 应用总览页面的访问方式配置区域,单击服务(Service)右侧的加号图标。

    说明

    如果您已经配置过Service,则在此处会显示服务名称和IP信息,您可单击编辑图标修改Service的端口和协议类型,或可单击删除图标删除Service。

  4. 服务(Service)对话框,完成参数配置后单击确认。

    sgtdrh

    参数

    描述

    服务名

    自定义设置服务名称,服务名称必须唯一,不能和已有服务名称重复。

    支持小写字母、数字和短划线(-),且必须以字母开头,字母或数字结尾,长度范围为2~32个字符。

    服务类型

    • 虚拟集群IP:即ClusterIP,指通过集群的内部IP暴露服务。选择该值,服务只能够在集群内部可以访问,这也是默认的Service类型。

    • 节点端口:即NodePort,通过每个Node上的IP和静态端口(NodePort)暴露服务。NodePort服务会路由到ClusterIP服务,这个ClusterIP服务会自动创建。通过请求<NodeIP>:<NodePort>,可以从集群的外部访问一个NodePort服务。

    外部流量策略

    • Local:外部访问流量只转发给本机Pod。

    • Cluster:外部访问流量可以转发给集群中其它节点的Pod。

    服务端口

    服务前端端口,通过该端口访问应用,可设置范围为1~65535。

    容器端口

    进程监听的端口。一般由程序定义,可设置范围为1~65535。

    节点端口

    节点对外暴露该服务的端口。一般由程序定义,可设置范围为30000~32767。

    说明

    当前仅支持服务类型为NodePort时设置节点端口。

    协议

    服务协议,包含TCPUDP,默认值为TCP

    说明

    为应用添加服务Service时,您需要关注以下两点:

    • 系统支持在同一个Service里,添加多个端口映射。但是如果您需要将不同的端口映射,设置为不同的服务名称,则可以重复执行步骤3~步骤4,设置多个Service。

    • 在同一个服务Service,添加多个端口映射时,服务端口和协议两两之间不得完全一样。如80|8080|TCP80|8081|TCP,这两个端口映射无法保存,提示端口映射存在重复项

结果验证

在当前应用中添加服务Service后,您可以登录K8s集群中的任一Pod,在Pod内根据Service固定IP地址访问应用。

本示例验证的是访问Web服务,如果是其他类型服务,验证方法不尽相同。

  1. 登录容器服务管理控制台

  2. 在左侧导航栏,单击集群

  3. 集群列表页面,选择目标集群,在操作列下单击更多 > 通过CloudShell管理集群

    在页面下方自动打开集群所关联的CloudShell。打开集群关联的CloudShell时,系统会自动加载集群的kubeconfig文件。您可以通过kubectl直接管理您的集群。

  4. 执行以下命令,查询集群中所有的Pod。

    kubectl get pods

    查询出的Pod列表如下:

    NAME                                             READY   STATUS             RESTARTS   AGE
    store-pre-****-group-1-19-****7569b-f7***        1/1     Running            0          28h
    store-prod-***duct-group-1-1-****7f894-zh***     1/1     Running            0          28h
  5. 执行以下命令,登录任一Pod。

    kubectl exec -it store-prod-***duct-group-1-1-****7f894-zh*** /bin/sh
  6. 执行以下命令,根据Service固定IP访问应用。

    wget 10.XX.XX.XX:8081    #IP地址和服务端口需要和您的Service信息保持一致。

    返回如下类似日志:

    Connecting to 10.XX.XX.XX:8081 (10.XX.XX.XX:8081)
    index.html           100% |*******************************************************|  2203  0:00:00 ETA
    说明

    本示例验证的是访问Web服务,如果是其他类型服务,回显日志不相同,请以实际情况为准。