Rancher k8s集群服务发现

  • 前言
  • 一、添加DNS
  • 1.外部IP方式
  • 2.外部域名方式
  • 3.创建完成(如下)
  • 二、校验服务是否正常调用
  • 1. 以java为例创建一个服务调用者
  • 2.部署服务
  • 三、调用服务验证结果



前言


服务发现:什么是服务发现?随着微服务架构越来越火热,各个服务之间的配合调用更加紧密。像的通过ip+端口的方式来做服务间的相互调用就会显得非常乏力。因为ip和端口是受部署环境影响的。为此我们需要一个中介来整合各个服务之间的互相调用,这时就用到了服务发现机制。服务发现机制现在开源的也有很多,如nacos、console、eureka等等。然而当我们使用容器部署服务时,k8s也提供了此类功能。在Rancher中配置k8s集群服务发现更是相当简便,下面做几个示例供大家参考


一、添加DNS

说明:正常我们部署一个http服务,服务会自动注册。不需要我们单独为其添加DNS,除非特殊用途才需要添加。已经注册的服务,集群内部可以通过服务名访问该服务。

rancher添加服务镜像 rancher服务发现_rancher添加服务镜像

1.外部IP方式

外部IP是指集群当前k8s集群以外的服务IP地址,可以支持我们集群内服务跨网或者跨集群调用。

rancher添加服务镜像 rancher服务发现_服务发现_02

2.外部域名方式

外部域名是指集群当前k8s集群以外的服务域名地址,可以支持我们集群内服务跨网调用。 注意:不能使用负载均衡生成的域名,程序内部会报500错误

如果服务需要跨集群访问,服务内部可以直接访问负载均衡生成的域名

rancher添加服务镜像 rancher服务发现_kubernetes_03


服务别名、工作负载、pod 这些就不单独贴图了。选项是固定的,只要服务或负载部署正确只需要定义名称即可。

3.创建完成(如下)

rancher添加服务镜像 rancher服务发现_rancher添加服务镜像_04

二、校验服务是否正常调用

1. 以java为例创建一个服务调用者

queue、haproxy 分别就是上面我们创建的DNS服务名称

@RestController
public class TestController {
    @Autowired
    RestTemplate restTemplate;
    //外部域名
    @RequestMapping("/queue")
    public Object get(){
        return restTemplate.getForObject("http://queue:88/configservice/v1/healthCheck",String.class);
    }
    
    //外部ip
    @RequestMapping("/ip")
    public Object get2(){
        return restTemplate.getForObject("http://haproxy:10602/haproxy-stats",String.class);
    }
}

2.部署服务

至于镜像打包、上传私有镜像库。暂且跳过,有需要的童鞋请查阅资料吧。在这里直接由服务部署开始了。

rancher添加服务镜像 rancher服务发现_kubernetes_05


rancher添加服务镜像 rancher服务发现_DNS_06


rancher添加服务镜像 rancher服务发现_rancher_07

三、调用服务验证结果

分别调用 http://192.168.8.51:30212/nginx 跟 http://192.168.8.51:30212/queue 返回结果如下,至此Rancher K8s集群服务发现功能验证完成

rancher添加服务镜像 rancher服务发现_rancher_08

rancher添加服务镜像 rancher服务发现_服务发现_09