如何使用 Kubernetes 测试环境开源工具箱中的 kt-connect 解决 “本地与集群双向互通”的问题?
我们假设有一位主人公叫“程序员小黑”,他所在公司采用了微服务相关的技术实践。小黑在做本地开发的过程中,会遇到两种联调场景,即我需要联调其它服务和其它服务调用我。我们先来看第一个场景:联调其它服务。通过 KT-Connect 工具可以让开发者一键建立本地到Kubernetes 集群的网络连接。开发者只需要运行一个“connect”命令,就可以自动在集群中创建一个代理容器,并且通过这个代理容器建立本地与集群的 VPN 连接,同时 KT-Connect 也会内置 DNS 服务,本地服务可以直接通过服务的名称进行服务调用,就好像本地的程序运行在 K8S 集群中一样。 在 KT-Connect中,我们给这个代理容器取了一个名“shadowpod”,即“影子”。它就像是本地服务在集群中的影子,通过它来完成本地服务与集群中服务的相互调用。 接下来,我们来看第二个场景:其它服务调用我。在联调时,小黑不仅需要调用其它人的服务,同时作为服务的生产者又会被其它服务调用。这时只打通本地到集群的服务是不能满足联调测试需求的,必须同时让集群中的服务也可以访问本地的服务。这就需要使用 KT-Connect 的第二个命令——“Exchange”。Exchange(交换)命令会在集群内部署一个代理容器,并替换集群中指定服务的目标容器,从而将发往该服务的所有流量拦截并转发到本地端口。这是一种“完全替换”,这就意味着在同一时间点,只有一位开发者可以将他本地的服务加入到集群中。为了解决这个问题KTConnect 提供了第三个命令——Mesh(混合)。当我们在本地运营“Mesh”命令后,我们同样会把本地服务加入到集群里面,但是会保持原有的目标服务状态不变,并且本地服务会继承目标服务中所有的标签。依照 K8S 本身服务发现的原理,请求流量会被随机地转发到原有服务或本地的服务。同时配合Istio 的流量规则,就可以让所有正常流量依然保持对原应用的访问,而只对一些有特殊标记的的请求转发到本地。从而可以实现在一套公用测试环境的基础上各自独立的完成本地的集成联调。
答复内容摘自《云原生技术与架构实践年货小红书》,这本电子书收录开发者藏经阁 下载连接:https://developer.aliyun.com/topic/download?id=1127
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。