最近,团队在进行微服务在双栈环境下提供服务的调研和改造工作。
工作一开始就遇到了瓶颈,我们的微服务目前均部署在K8s环境中,但我们用的K8s版本比较老,不支持IPv6。
想要实现微服务之间通过IPv6通信是不可能了。只能退而求其次,研究下用户从互联网上发起的访问能否支持双栈。
在典型的微服务使用场景中,一切外部流量均通过网关模块流到系统内部,似乎只需要想办法实现网关的双栈访问即可。
网关
我们用的微服务网关是基于Spring Cloud Gateway定制的,其底层使用了Spring WebFlux,再底层是Netty。
过去,我们通过Deployment+NodePort Service的方式暴露Gateway。
经测试,在低版本的K8s集群中,通过NodePort方式暴露的服务,无法通过IPv6的地址访问。(原因没有深究)
看来,目前NodePort是不能用了。还有一种比NodePort更粗暴的暴露方式,即HostNetwork,理论上应该是可以的。
本应直接验证下Spring Cloud Gateway使用HostNetwork暴露是否支持IPv6,但另一种方案突然浮现脑海。
第二种方案
第二种方案就是不直接暴露Gateway,而是在Gateway前面引入一个支持双栈的反向代理,即Nginx。
之所以会想到这种方案,是因为前段时间,前端有提过希望Gateway支持http2协议,但Netty现在还不支持。当时就有想过是否在Gateway前面再放一个nginx。
从上面的分析可以推断,Nginx同样不能使用NodePort暴露,需要使用HostNetwork。
要让Nginx在I