混合部署应用(ECS和K8s环境)

EDAS支持使用ECS环境和K8s环境部署应用,您可以根据应用本身的特性来选择合适的部署环境。当您需要分离不同形态的应用或者做应用架构迁移时,可以将服务的提供者与消费者分别部署到同一VPC的ECS环境和K8s环境,他们提供的服务也是可以相互发现和调用的。

前提条件

请确保您混合部署应用的ECS集群和K8s集群属于同一个VPC,且在EDAS的同一个微服务空间下。

如果未创建集群,请在相同的VPC和EDAS微服务空间下创建ECS集群和K8s集群。具体操作,请参见使用控制台创建ECS集群创建K8s集群

背景信息

混合部署应用主要用于分离不同形态的应用和应用架构迁移。在这些需求场景下,需要保证混合部署的应用彼此间能相互发现与调用,而阿里云容器服务Kubernetes版提供的容器网络CNI则保证了这一点,让满足在同一个VPC和EDAS同一个微服务空间下的混合部署应用可以相互发现与调用。

混合部署场景

处于ECS环境中的服务,注册的服务地址为VPC内的私网IP; 处于K8s环境中的服务,注册的服务地址为Pod IP。在配置正确的安全组后即可实现ECS环境和K8s环境的服务相互发现与调用。

部署应用

本示例以微服务的服务提供者部署在ECS环境,服务消费者部署在K8s环境为例。

  1. 在ECS环境部署服务提供者。

    在ECS环境部署服务的具体操作,请参见应用托管概述(ECS)

  2. 在K8s环境部署服务消费者。

    在K8s环境部署服务的具体操作,请参见应用托管概述(K8s)

结果验证

服务消费者包含Web服务,服务端应用和客户端应用都部署完成后,可以访问客户端应用的Web页面,验证调用结果。

  1. 应用总览页面访问方式配置区域,单击负载均衡(公网)右侧的图标。

  2. 负载均衡(公网)对话框中设置SLB和监听参数,然后单击确认

    添加SLB

    1. 选择SLB右侧列表中选择新建SLB

      如果您有SLB实例,可以在列表中选择SLB实例。

    2. TCP | HTTP 协议右侧单击添加新的监听,然后将SLB端口和容器端口分别设置为8018082

    3. 单击确认

    添加公网SLB大概需要30秒。添加完成后,访问方式配置区域的负载均衡(公网)右侧会显示公网SLB的地址,格式为SLB实例IP:端口

  3. 复制公网SLB地址,在浏览器中地址栏粘贴并访问该地址。

    进入到客户端应用的Web页面。访问客户端应用

  4. Echo this string文本框中输入任意字符串,如Hello EDAS,然后单击点击此处,查看页面下方是否成功返回调用之后的数据。

    调用之后数据返回区域显示客户端应用(Consumer)调用服务端应用(Provider)的过程,并且包含输入的字符串,则说明调用成功,即微服务Demo应用部署成功。

    2020-08-25T10:00:01.866Z :  Consumer received.    
        2020-08-25T10:00:01.878Z :  Provider received.
            Provider processed after sleep 1 second! Echo String: "Hello EDAS"
        2020-08-25T10:00:02.878Z :  Provider Return
    2020-08-25T10:00:02.882Z :  Consumer Return

常见问题

如果ECS应用和K8s应用处于不同的VPC中,是否可以实现服务互通?

不可以,即使处于同一个EDAS微服务空间下,不同VPC下的服务也无法互通。

创建应用前,需要提前做好网络规划,集群的VPC一旦确定是无法更改的。

如果ECS应用和K8s应用处于不同的EDAS微服务空间中,是否可以实现服务互通?

如果应用使用的是EDAS微服务注册中心(默认情况),是不能互通的,服务发现和调用是根据微服务空间隔离的。如果应用使用的是自定义的注册中心,当应用处于同一个VPC内是可以互通的。

当ECS应用和K8s应用混合部署时,应用是否可以同名?

混合部署到同一个EDAS微服务空间时,应用不允许同名;部署到不同的EDAS微服务空间时,可以同名。

说明

应用名称应区分大小写,如test和TEST判定为同名。

当ECS应用和K8s应用处于同一个EDAS微服务空间,且在同一个VPC中,服务无法互通,可能是什么原因?如何排查?

可以分别按照以下步骤排查问题:

  1. 确认服务提供者已经正常注册,对于使用了EDAS微服务注册中心的应用,可以使用EDAS的服务查询功能。

    以查询SpringCloud服务为例,请参见查询Spring Cloud服务

  2. 确认服务提供者与服务消费者之间安全组规则放通了指定的服务端口。

    ECS应用安全组,即部署应用的ECS实例对应的安全组;K8s应用安全组,即节点安全组(节点安全组和集群安全组不是同一个时,建议节点安全组包含K8s集群安全组)。

    当安全组处于以下状态时,服务可以互通。

    • 服务提供者和服务消费者处于同一个安全组。

    • 服务提供者和服务消费者的安全组有交集(当ECS应用和K8s应用混合部署时,推荐此模式来配置安全组)。

    • 服务提供者在安全组入方向的规则中允许了来自服务消费者到服务端口的访问;且服务消费者在出方向的规则中未禁止到服务提供者的服务端口的访问。

  3. 确认服务正常注册且安全组配置正确后,登录到服务消费者实例,使用telnet命令检查服务提供者的连通性。

    telnet 服务提供者IP 端口