---
title: "问题：在 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、启用安全停止

参考：[《问题：如何安全的停止服务？》](/article/459) ，使用时记得把漂移配置加上。


### 补充：发现服务最好能有个代理配置

比如发现接口，输出这样的数据：

```json
{
    "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内部的响应与数据，更为及时与准确）
