背景
传统应用上云,基于传统应用需要考虑上云的方案和改造成本,这也是传统应用上云过程中的难点,本篇介绍3台eureka搭建的方案。
方案一
此方案借助了K8S中Service的一些功能。
这种方案是传统方案的简单迁移版本,比较易于理解;pod通过k8s的service提供稳定的访问url,pod ip是会经常发生改变的,service一旦创建名称就不会发生改变了,所以通过service name访问到pod,
配置文件案例如下:
eureka:
client:
serviceUrl:
defaultZone: https://service-name-1:8761/eureka/,http://service-name-2:8761/eureka/,http://service-name-3:8761/eureka/
方案二
此方案需要使用K8S StatefulSet和Headless Service的一些功能特点
需要创建一个StatefulSet和Headless Service,利用了StatefulSet可以为每个Pod分配一个独立的网络标识的特征来实现eureka集群方案。
server:
port: 8761
eureka:
instance:
hostname: $(StatefulSet 名称)-$(序号) # 获取本POD的网络标识符
client:
register-with-eureka: true
fetch-registry: true
service-url:
# Eureka 实例之间互相注册,把配置3台服务的Headless Service路径配置上去
# 如果配置了hostname的话,defaultZone可以简写: http://$(StatefulSet 名称)-0:8761/eureka
defaultZone: http://$(StatefulSet 名称)-0.$(服务名称).$(名字空间).svc.cluster.local:8761/eureka,http://$(StatefulSet 名称)-1.$(服务名称).$(名字空间).svc.cluster.local.svc.cluster.local:8761/eureka,http://$(StatefulSet 名称)-2.$(服务名称).$(名字空间).svc.cluster.local.svc.cluster.local:8761/eureka
总结
方案一易于理解,学习成本比较低,容易想到;操作比较繁琐,没有充分利用K8S的的特性。
方案二需要对K8S的StatefulSet和Headless有一定的了解,操作简单,方便维护。
推荐使用方案二