对于部署于K8S中的微服务,一般大家都会思考如何将服务暴露到公网,让外部用户访问,这种场景一般有三种方式:NodePort,ClusterIP + ingress, Loadbalancer。今天我们不讨论这三种外部访问的方法,而是说一说k8s内各个微服务间的访问方式。
在一篇博客中曾经看到,可以在pod中通过环境变量获取到对应service的IP和Port。这个是k8s内部逻辑,在同一个namespace下,如果有service被创建,对于部署在该namespace下的所有Pod都会有对应service的host和port的全局变量生成,这样pod可以访问到该service。但是这样的做法有个弊端,就是如果你只是想在Pod启动的时候取到某个service的host和port,那么Pod的启动必须放在service配置成功之后,这样非常不方便。
经过尝试,其实k8s给每个内部微服务提供了一个内部使用的host,就是servicename.namespace,注意两个单词之间有一个点。也就是说,如果你想访问部署在A namespace下的B service 的暴露端口C Port,你就可以在代码中直接访问http://B.A:C。如果是部署到默认namespace下的服务,A为“default”。
希望这个技巧可以帮到大家,大家如果觉得有用,记得点赞和关注哦~