问题:在 ip 漂移时更安全的服务注册与注销?
比如 k8s 或 docker bridge 运行环境下,每次重新部署后 ip 都可能会变化。在这种环境下,使用外部的注册与发现服务时,需要用到以下两点。
1、增加参数,申明当前为漂移环境
或者用启动参数
java -jar demoapi.jar --drift=1
或者用jvm参数
java -Dsolon.drift=1 -jar demoapi.jar
或者用 container 的环境变量
services:
demoapi:
image: demo/demoapi:1.0.0
container_name: demoapi
environment:
- solon.drift=1
- TZ=Asia/Shanghai
ports:
- 8080:8080
这个申明的作用,是告诉注册与发现服务:服务ip挂了,不用告警,并自动摘除。否则,可能会不断增加失效ip。
2、启用安全停止
参考:《问题:如何安全的停止服务?》 ,使用时记得把漂移配置加上。
补充:发现服务最好能有个代理配置
比如发现接口,输出这样的数据:
{
"service":"demo-api",
"policy": "default",
"agent": "http://demo-api.demo:8031", //将代理指向 k8s sev name
"cluster":[
{"service":"demo-api", "protocol":"http", "address":"10.12.12.1:8031"},
{"service":"demo-api", "protocol":"http", "address":"10.12.12.3:8031"}
]
}
当有代理时,客户端就可以直接请求代理,而不依赖集群节点的注册信息。(k8s内部的响应与数据,更为及时与准确)