背景:
在k8s项目开发初期,针对集群环境进行接口测试时,优先采用在集群内部通过”service ip + port”使用curl进行接口测试。若service重启, service ip发生变化,curl 的IP地址也需要随之变更,在多场景测试环境中,过于麻烦,测试不方便,为了提高易用性和测试效率,在后期较为稳定的环境中,可以使用外部访问集群进行接口测试。
说明:
本文涉及k8s service、ingress相关概念,请先移步盟盟汇,查阅《k8s集群内应用访问机制简介及实践》
K8s集群测试拓扑如下:
1、集群内部使用curl 进行接口测试
在k8s集群内部,通过”service ip + port”访问具体应用进行接口测试。
1.1 查看服务向外暴露的IP和端口
1.2 集群内部接口测试:新增服务订阅
1.3 集群内部接口测试:查询服务
1.4 集群内部接口测试:删除服务
2、Kong网关:对外提供统一的访问入口
测试环境中,K8s集群内使用kong网关作为集群的统一访问入口,使用etcd实现服务注册中心,保存服务注册相关信息。
2.1 检查kong网关相关服务是否正常,并确认端口
#查看kong网关服务及端口
其中kong-proxy-operate为网关的对外服务口;
业务口为80,映射到外部访问端口为30000。 测试通过业务口也就是30000。
如果在节点上执行测试用例 使用: localhost:30000
如果在节点外部执行测 使用: node-ip:30000
#查看svc内容
2.2 各服务内拥有自己的ingress配置,通过path来区分服务,示例如下:
etcd内的ingress.yaml配置:
3、外部访问集群进行接口测试
3.1 确认“集群node ip+nodeport”
由 2.1 确认外部测试通过业务口30000。
#查看集群node ip
外部访问为“集群node ip+nodeport” 即 192.168.122.200:30000
3.2 使用标准接口路径访问集群进行接口测试:
3.2.1 把curl命令添加进postman:
Import Raw text: 把curl的命令行贴进text,修改URL中的”Service IP +port”为 “集群node IP+nodeport”continueImport
#结果如下:
3.2.2 通过postman外部访问集群进行接口测试:下发配置
3.2.3 通过postman外部访问集群进行接口测试:查看配置
3.2.4 通过postman外部访问集群进行接口测试:删除配置
再次查询,确认删除:
总结:
在持续开发的项目,需要进行多场景测试,制造各种异常,此时使用外部访问k8s相较于使用内部访问k8s进行接口测试,无需考虑service ip的变更,只需专注于接口测试内容参数,减少参数修改和环境影响,提高配置正确率,提高接口测试易用性。