时间:2021-05-19
springclould项目容器化过程中, 可能是采用部分部分容器化,逐步迁移到容器环境, 这时候我们就会面临一个问题: 外部服务如何调用k8s内部服务.
Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样Eureka Server中的服务注册表中将会存储所有可用服务节点的信息,consumer 通过 Eureka 发现其他节点/服务.
应用场景
Eureka , gateway , app01, app02 处于k8s集群外部
app03, app04 位于k8s内部
问题: k8s集群内部可以访问外部 eureka, gateway等服务, 但是外部服务无法访问k8s内部 app03,app04.
打通网络
打通外部环境与k8s环境service与pod网段,可以做的网络直连.使得外部服务可以直接访问k8s内网.
方案一 : k8s node 节点可以直接访问pod与service网段, 我们只需要将其中一个节点作为 Gateway , 其他外部机器添加静态路由网关执行这台 node 节点即可.
方案二: 将其他机器部署flannel插件, 打通pod与service网段.
PS 这里我们使用第一种方案.
PS阿里云环境下由于使用VPC , 这是我们只需要在VPC添加路由策略即可.
开启服务器路由转发
node 节点
vim /etc/sysctl.conf
net.ipv4.conf.default.rp_filter = 1
sysctl -p
外部服务器添加静态路由
10.0.0.0/16 pod 网段
10.10.0.0/16 service 网段
172.17.71.209 开启路由转发的node节点.
ip route add 10.0.0.0/16 via 172.17.71.208 dev eth0
ip route add 10.10.0.0/16 via 172.17.71.208 dev eth0
Eureka 注册问题
打通网络后, 我们启动服务, 我们发现虽然节点已经注册到Eureka, 但是使用的是hostname:port的格式, 而springclould中节点相互访问就是使用的Eureka中的注册信息, 这样也就意味着我k8s里的springclould节点注册的是pod 的 hostname (Eureka在k8s外部不需要打通网络也可以正常注册)
也就是外部服务虽然可以访问k8s内部网络, 但是这个hostname解析不成对于的IP, 也就是还是没有办法相互调用.
也就是说我们节点注册时而是使用pod IP注册就可以解决这个问题, 下边我们修改下k8s内部的springclould节点配置
重新打版, 重启pod.看起来和之前一样, 我们点击进去看下:
虽然显示是hostname, 但是注册地址以及改成了ip, 这时候其他非容器化节点去访问时就可以正常调通了.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
概述在SpringCloudEureKaRibbon服务注册-发现-调用一文中简单的介绍了在SpringCloud中如何使用EureKa和Ribbon。文章中使
BeanPostProcessor的接口定义,可以实现提供自己的实例化逻辑,依赖解析逻辑等,也可以以后在Spring容器实例化完毕,配置和初始化一个bean通过
微服务实践“微服务”自然要学习如何做服务注册与发现基于SpringBoot来进行微服务的学习,自然选择了与之息息相关的SpringCloud;当然可以选择其他的
springCloud是基于springboot搭建的微服务。它利用SpringBoot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中
上篇讲了springcloud注册中心及客户端的注册,所以这篇主要讲一下服务和服务之间是怎样调用的不会搭建的小伙伴请参考我上一篇博客:idea快速搭建sprin