优维科技云原生产品线就发布了全新产品——支持产品团队在Kubernetes集群上进行服务部署、配置管理、团队成员和角色管理的「工作空间」,在前两期的UWinRelease中,我们详细介绍了「工作空间」的设计背景和特性介绍。


众所周知,工作空间是一个可以将团队的基础设施、服务部署与发布、配置中心以及隔离资源访问权限的逻辑单元。在这里,企业的不同产品团队都将建立自己的工作空间,且它们之间相互隔离。工作空间内拥有该产品团队使用的基础设施、拥有容器配置管理的能力,成员可以使用这些资源进行服务部署和发布。



本期,我们将详细介绍「工作空间」近期上线的两个特性——成员权限、应用路由。



02
特性解读
一、成员权限


工作空间使得不同产品团队之间的基础设置、服务部署与发布、配置中心和资源访问相互隔离,在这当中使得不同资源拥有访问权限的,正是成员权限。


「成员权限」模块属于某个工作空间实例,同一个用户在不同的工作空间中可以被分配不同的身份,从而获得不同的资源访问和操作权限。


有别于以往灵活、全开放的“用户--角色--权限”系统,这次我们在工作空间中直接出厂自带“管理员”、“部署人员”、“配置人员”和“访客” 4 种身份,每种身份分别具有不同的权限范围,从大到小依次为:


管理员: 管理员在空间内具有最高权限;其可进行资源池、空间内成员管理,也可进行普通的服务部署与发布、配置管理等。(备注:“管理员”并非与生俱来,需要系统管理员统一规划产品团队的工作空间之后,在对应工作空间中添加成员并指派其为管理员,之后工作空间内的管理员就可独自管理工作空间其他成员。)


部署人员: “部署人员”的所拥有的权限仅次于“管理员”;其可访问工作空间一切资源,出于运维工作的需要,亦可操作“部署管理”、“配置中心”模块,但无法管理成员和资源池。


配置人员: “配置人员”拥有的权限要高于“访客”, 其可访问工作空间一切资源,但仅能操作“配置中心”模块进行配置管理,不能操作“部署管理”模块、也无法管理成员、不能管理资源池。


访客: “访客”所拥有的权限最低,仅可以在工作空间中访问资源,对一切资源不具有操作权限。

二、应用路由


当我们在工作空间中使用“部署单元”来集合部署所需的一些资源(包括基础设施、制品等),对其成功部署并正确初始化之后,我们就得到了一些服务,对于应用的某些服务来说(譬如一些前端服务),我们需要将其公开发布到集群之外的外部 IP 地址上,以便我们从外部访问这些服务,具体Kubernetes 提供了几种访问服务的方式:


ClusterIP: 服务的 Pod 实例会提供可以被集群内部其他服务访问的地址,但不对外暴露;当我们需要调试一个服务时,也可以使用Kubernetes Proxy 来访问它,实现集群外部的访问;


NodePort: 使用 NodePort 模式的服务会在其所有节点上打开一个特定的端口,所有请求该端口的流量都会被转发给该服务,故我们可以通过 <NodeIP>:<NodePort> 来从外部访问服务;但这种方式一来一个端口只能暴露一种服务,二来一旦节点/虚拟机 IP 发生改变,则需要手动处理这种情况,这也是不建议生产环境中使用这种方式的原因;


LoadBalancer: 使用公有云提供商的负载均衡器来暴露服务,每个通过这种方式暴露的服务都将获得一个自己的公网 IP,所有请求该IP 特定端口上的流量都将被转发到对应服务,虽然这是向外部暴露服务最直接的方式,但我们必须为每一个获得公网 IP 的服务支付相应的费用…


Ingress: 这可能是暴露服务最强大的一种方式,因为 Ingress 可以在同一个 IP 地址上暴露多个服务——其实 Ingress 是在多个服务前面充当一个入口的角色,在这个入口上多个路由转发规则被整合成为一个资源,即 Ingress。

我们在工作空间中提供暴露外部访问服务的方式正是 Ingress(应用路由)。Ingress 的类型有很多,分别具备不同的功能,在工作空间中我们使用了 Nginx 提供的 Ingress 控制器,从而使得 Kubernetes 集群中的服务暴露给外部访问,基于此,用户还可享受到 Nginx 提供的负载均衡、SSL/TLS 加密和对 URI 的重定向。



应用路由生效的先决条件是至少要有一个“ingress 控制器”,在工作空间创建时我们将自动部署一个 Nginx-ingress-controller,用以识别路由规则和转发外部访问流量。


其次是路由转发规则,我们支持了原生 Ingress 的路由规则,用户可以在一个应用路由实例中创建多个域名转发规则,每个域名转发规则下包含多个子路径,这些子路径都将把请求转发给其对应的服务。如下图:



  • 用户访问 http://next.easyops.cn 下的子路径 /abc 将被转发至 service1的 4200 端口;

  • 用户访问 http://next.easyops.cn 下的子路径 /def 将被转发至 service2的 8080 端口;


  • 用户访问 https://nginx.easyops.cn/ 的流量将被转发至 service3的 80 端口;

  • 对于想使用 HTTPS协议 的域名来说,我们还支持从工作空间的配置中心选择 TLS密钥 进行相关认证,以让 https 访问也能够被应用路由所转发。




03
其他新特性发布
一、CI流水线支持模版


  • 可使用模板快速初始化你的流水线,模板主要保存了流水线的工作流描述(结构化Yaml文件)和一些变量;

  • 支持了从现有流水线“另存为”模板,修改模板可同步至所有实例化的流水线;

  • 模板自带流水线所需变量,无需手动挨个添加变量。


、制品仓库支持Harbor 1.9 界面的项目WebHook


  • 现在可通过 Webhook 可将企业内部的 Harbor 仓库同步至制品管理小产品供部署系统使用。

  • 提供两种方式—— 方式一:全局配置,可将整个镜像仓库的镜像信息同步至制品管理,省时省力;方式二:单项目设置,按需同步 Harbor 项目的镜像信息,保护隐私数据,也更加灵活。


、容器部署支持事件与日志


  • 现在可通过 Webhook 可将企业内部的 Harbor 仓库同步至制品管理小产品供部署系统使用。

  • 在执行扩容/升级制品等操作后如有异常,可切换到「事件」选项卡,在这里可以实时获取Pod和ReplicaSet的原因和信息,还可切换到「日志」选项卡,关注Pod下面每个容器的日志打印信息。


四、容器部署支持重新部署


  • 在不改变容器设置/副本数设置的情况下,配合部署更新策略,可将滚动切换到已加载变更后的存储卷、环境变量的实例。


如果您想了解更多EasyOps产品能力、功能实现细节,欢迎点击链接了解详情:优维一站式DevOps及运维解决方案