接口测试 怎么模拟 grpc 的响应?k8s 环境,A 服务和 B 服务在不同的 namespace 中,A 通过 grpc 调用 B 服务的接口,怎么让 B 给 A 返回一个 mock 的响应。

luckyhey · 2022年01月17日 · 最后由 luckyhey 回复于 2022年06月15日 · 2491 次阅读

怎么模拟 grpc 的响应?k8s 环境,A 服务和 B 服务在不同的 namespace 中,A 通过 grpc 调用 B 服务的接口,怎么让 B 给 A 返回一个 mock 的响应。谢谢。

共收到 8 条回复 时间 点赞

你现在碰到的是什么问题? 是不知道怎么写 rpc server 去返回 mock 响应? 还是不知道怎么劫持 A 到 B 的响应?

孙高飞 回复

不知道怎么劫持。好像可以用 mitmproxy,但是不知道怎么将他们串起来。是要将 mitmproxy 制作成镜像,用 k8s 的 deployment 跑起来吗?又涉及用哪个 namespace 的问题,还有用 nodeport 还是 clusterIP 的问题。思路混乱,没有头绪。

luckyhey 回复

我一般的思路都是写个工具,动态的往目标 pod 里注入一个 proxy 容器, 同一个 pod 内的所有容器是用 container 网络模式启动的,共享网络。 如果需要篡改 ip 的话, 一个 iptables 命令就可以了。

孙高飞 回复

您说的内容好像是 istio,我了解得很少。

https://testerhome.com/articles/27001

楼主参考一下我之前在 k8s 里玩 mock server 的帖子。 也是用的 side car 模式。 isto 确实也是这么玩的

孙高飞 回复

您注入的是 mock server,那是不是也可以用这种 side car 方式注入 mitmproxy?谢谢。

luckyhey 回复

当然是可以的

孙高飞 回复

撇开动态注入。如果一个 deployment 里面固定创建两个容器,服务 A 的 container 和 mock 服务的 container。是不是在服务 A 的 container 里执行 “iptables -t nat -A PREROUTING -p tcp --dport 7777 -j REDIRECT --to-port 6666” 类似这样的命令,就可以将服务 A 的请求转向代理到 mock 服务?其中 7777 是服务 A 的端口号,6666 是 mock 服务的端口号。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册