上一篇整体介绍了cnp的功能,这篇重点介绍下CNP产品应用开发的功能。
CNP的应用开发,主要是指的应用CD部署的配置管理。
应用列表,用来创建一个应用,一般与项目对应,也可以多个应用对应到一个项目。具体很灵活。然后应用配置明细中,其实就是提供了一个web看板,可以快速定义k8s对象,包括工作负载、ConfigMap、Secret等等k8s对象,并且提供部署功能。部署时可以选择到前面cnp配置好的环境中去,同时提供了环境部署过程的监控、日志等功能。
制品库管理,云原生的cd基本都是通过镜像部署实现,所以纳管一个制品库就是标配功能。这里支持纳管移动云自己的CIS镜像库、Harbor,以及其他镜像库(如nexus等)。最终是为部署过程提供镜像库使用。
插件管理,主要是提供ISTIO的服务网格管理功能。
应用路由,主要是集成了cnp内置的apisix的路由配置功能。提供了一个更简洁的直观的可视化配置界面。
应用部署都依托于制品库,所以首先我们要纳管我们使用的制品库。CNP支持的制品库有两种:传统镜像库(例如Harbor)、Helm Chart仓库。其中后面应用部署的Helm方式,需要基于Helm Chart库实现。
我们这里基于磐舟的Harbor进行配置。
需要确保仓库地址和CNP的网络能够通。
录入地址、用户名、密码,点击验证。然后关联一个部署目标,确定保存。比较简单。
这里注意仓库地址末尾不要加"/"。
目前提供两个插件。Fluxcd和Istio。
Fluxcd主要针对helm部署方式。
Istio提供服务网格服务。
我们这里安装Istio组件。点击Istio组件进入组件安装界面。
点击安装按钮,选择集群及项目,启动安装。安装完成效果如上图。
安装了Istio组建后,在后面应用创建时才能选择启用服务治理功能。
新建应用。这里新建应用的时候,会直接给你创建一个工作负载,所以首次创建的时候需要注意一下,提前规划好部署那个负载。
绑定环境是cnp配置的系统环境。就是生命部署到拿一个项目下的哪一个环境中。选择环境时,同时会默认使用项目设置的namespace。
应用组件类型是提供了几种对象创建方式。webservice是基于server API接口封装的一个Web控制台页面。同时也支持k8s-objects(yml方式),helm。
这里我们是用WebService方式创建。
推荐启用服务治理模块,会自动配置Istio,后期CNP会陆续增加基于sidecar的很多功能,提供更好的服务网格功能。服务治理需要提前安装istio插件。可以到插件管理中安装。否则部署时会报错。
容器镜像,选择好纳管的Harbor镜像源,然后补充具体项目路径及版本信息。点击回车可以匹配验证。
设置内存配额和cpu配额,设置容器端口号。提交保存即可完成。
首次配置完,只有一个组件。可以根据项目实际情况,继续新增组件。这里的组件,包括configMap和deployment等。
ConfigMap创建时,推荐试用yml方式创建。首先使用文本编辑工具提前标记好yml文件,然后新增组件是选择k8s-objects类型,将yml贴到应用配置的文本区域中执行即可。
注意yml方式执行时,偶尔会因为字符问题导致提交时格式错乱。整合是由于windows的字符集和unix字符集差异导致的。cnp目前对类似特殊字符处理正在优化中,暂时需要自行通过类似nodepad++等文本编辑器处理后提交。如果格式变形,会导致yml解析错误,直接引发应用容器启动异常。
点击部署,启动应用到集群的cd流程。
下方可以看到具体部署情况。
也可以看部署信息。
到这里我们完成cd推送的操作。
应用镜像启动起来了,不代表就能对外提供服务了。我们还需要配置应用入口路由。这里基于Apisix进行路由配置。当然你可以继续使用k8s传统的ingress或者svc的方式开通服务,直接到kcs的控制台进行配置即可。这里不再单独描述。
Apisix作为一个高性能,使用广泛,灵活可配置的服务网关,被cnp选中集成到环境中来。
在安装了apisix的组件后,你可以直接通过apisix的控制看板进行路由配置,也可以通过cnp集成的apisix的路由配置功能进行操作。
目前cnp的路由配置正在不断优化中,针对后台转发重写地址,支持不好,需要到apisix中进行配置。直接默认联通的路由,可以一次性直接开通。
点击新增路由
输入路由名称和路由描述。选择应用,选择应用中对应的组件(deploy),选择部署目标,选择网关(apisix,安装名称可能不同),下一步。
选择服务端口。这里跟上一步选择的组件是绑定的。
输入域名。需要解析到对应的负载均衡ip上。
输入路径。/* 表示所有路径。
优先级。优先级高的交叉路由会被优先执行。
提交保存。
去到apisix看一下。
apisix中创建了两个对象。一个“上游”,一个“路由”。
这里其实和到apisix直接配置是等效的。
对于一些特殊设计,例如后台多个微服务之间的转发,可能会调整请求路径path,需要对请求进行重写。目前cnp对路径重写并不支持,需要到apisix中直接进行配置。配置如下。
先确定是否存在上游配置。上游配置就是请求到那个deployment的指向配置。
这里我们有一个独立的java的服务,叫asia-info。首先我们配置这个上游。
这里如果你熟悉kcs的配置,可以通过apisix直接配置。
但是更建议利用cnp的路由管理创建相关对象,确保无误。
我们先创建一个应用路由,按照路由选择对应的应用和组件。
路径可以先配置入口路径,优先级设置1。
然后cnp就会给我们创建好对应的apisix的上游和路由对象。
我们只需要重新创建一个路由对象,吧优先级设置为9,即可以让路由走我们的新路由来进行转发。具体如下。
在请求改写这里,采用正则改写,然后根据需要,配置正则表达式,然后填入转发模板。这里的意思是转发的时候移除“/prod-api/”这个路径。
下一步的时候直接选择cnp生成的那个上游对象,提交保存即可。
当你将所有的路由都配置上以后,应用就能够通过apisix进行访问了。
例如:village.sdchbn.com:30443
PS
路由的配置,可以根据测试或者开发环境上,能够正常运行的应用的nginx的conf文件进行设计。如果开发环境是通过端口号进行的路由定义,你需要改写成一个入口的path,然后用路由转发到不通的服务镜像内。因为k8s集群肯定都是一个入口过来。当然你也可以使用二级域名进行入口路由。同时,增加path,需要打包镜像的时候对nginx也做相应的配置。总之需要根据具体情况进行设计。后面会分享一些具体实现配置。