注册配置治理 Eureka协议使用命名空间

北极星对 Eureka 的 API 进行了全兼容,由于 Eureka 默认不支持命名空间,北极星拓展了一个请求头x-namespace来支持命名空间的隔离。当有客户端的请求到达服务端,服务端将检查这个 header。

相关产品
注册配置治理 产品页,含版本规格、价格与购买入口。

一、介绍

·如果 header 存在,则使用这个 header 标识的命名空间进行服务注册发现的隔离。

·如果 header 不存在或者值为空,则使用默认的命名空间default。

二、示例

下面通过 eureka 协议的api进行说明。向命名空间ns1下注册服务EUREKA-DEMO-PROVIDER的一个实例,实例端口为18081。

curl -X 'POST' 'http://127.0.0.1:8761/eureka/apps/EUREKA-DEMO-PROVIDER' \\-H "Content-type: application/json" \\-H "Accept: application/json" \\-H "x-namespace: ns1" \\-d '{ "instance": { "instanceId": "10.91.80.100:eureka-demo-provider:18081", "hostName": "10.91.80.100", "app": "EUREKA-DEMO-PROVIDER", "ipAddr": "10.91.80.100", "status": "UP", "overriddenStatus": "UNKNOWN", "port": { "$": 18081, "@enabled": "true" }, "securePort": { "$": 443, "@enabled": "false" }, "countryId": 1, "dataCenterInfo": { "@class": "com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo", "name": "MyOwn" }, "leaseInfo": { "renewalIntervalInSecs": 30, "durationInSecs": 90, "registrationTimestamp": 0, "lastRenewalTimestamp": 0, "evictionTimestamp": 0, "serviceUpTimestamp": 0 }, "metadata": { "management.port": "18081" }, "homePageUrl": "http://10.91.80.100:18081/", "statusPageUrl": "http://10.91.80.100:18081/actuator/info", "healthCheckUrl": "http://10.91.80.100:18081/actuator/health", "vipAddress": "EUREKA-DEMO-PROVIDER", "secureVipAddress": "EUREKA-DEMO-PROVIDER", "isCoordinatingDiscoveryServer": "false", "lastUpdatedTimestamp": "1681266990026", "lastDirtyTimestamp": "1681266990889" }}' \\-v

向命名空间ns2下注册服务EUREKA-DEMO-PROVIDER的一个实例,实例端口为18082。

curl -X 'POST' 'http://127.0.0.1:8761/eureka/apps/EUREKA-DEMO-PROVIDER' \\-H "Content-type: application/json" \\-H "Accept: application/json" \\-H "x-namespace: ns2" \\-d '{ "instance": { "instanceId": "10.91.80.100:eureka-demo-provider:18082", "hostName": "10.91.80.100", "app": "EUREKA-DEMO-PROVIDER", "ipAddr": "10.91.80.100", "status": "UP", "overriddenStatus": "UNKNOWN", "port": { "$": 18082, "@enabled": "true" }, "securePort": { "$": 443, "@enabled": "false" }, "countryId": 1, "dataCenterInfo": { "@class": "com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo", "name": "MyOwn" }, "leaseInfo": { "renewalIntervalInSecs": 30, "durationInSecs": 90, "registrationTimestamp": 0, "lastRenewalTimestamp": 0, "evictionTimestamp": 0, "serviceUpTimestamp": 0 }, "metadata": { "management.port": "18082" }, "homePageUrl": "http://10.91.80.100:18082/", "statusPageUrl": "http://10.91.80.100:18082/actuator/info", "healthCheckUrl": "http://10.91.80.100:18082/actuator/health", "vipAddress": "EUREKA-DEMO-PROVIDER", "secureVipAddress": "EUREKA-DEMO-PROVIDER", "isCoordinatingDiscoveryServer": "false", "lastUpdatedTimestamp": "1681266990026", "lastDirtyTimestamp": "1681266990889" }}' \\-v

查询ns1下EUREKA-DEMO-PROVIDER的实例。

curl -X 'GET' 'http://127.0.0.1:8761/eureka/apps/EUREKA-DEMO-PROVIDER' \\-H "Accept: application/json" \\-H "x-namespace: ns1" \\-v## 返回18081端口实例

查询ns2下EUREKA-DEMO-PROVIDER的实例。

curl -X 'GET' 'http://127.0.0.1:8761/eureka/apps/EUREKA-DEMO-PROVIDER' \\-H "Accept: application/json" \\-H "x-namespace: ns2" \\-v## 返回18082端口实例

如上所见,向不同命名空间下相同的服务名进行服务注册发现,已经通过命名空间进行隔离。

三、注册服务实例

·请求方法:PUT

·路由:/eureka/apps/{appId}

·示例:

curl -X 'POST' 'http://127.0.0.1:8761/eureka/apps/EUREKA-DEMO-PROVIDER' \\-H "Content-type: application/json" \\-H "Accept: application/json" \\-H "x-namespace: ns1" \\-d '{ "instance": { "instanceId": "10.91.80.100:eureka-demo-provider:18081", "hostName": "10.91.80.100", "app": "EUREKA-DEMO-PROVIDER", "ipAddr": "10.91.80.100", "status": "UP", "overriddenStatus": "UNKNOWN", "port": { "$": 18081, "@enabled": "true" }, "securePort": { "$": 443, "@enabled": "false" }, "countryId": 1, "dataCenterInfo": { "@class": "com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo", "name": "MyOwn" }, "leaseInfo": { "renewalIntervalInSecs": 30, "durationInSecs": 90, "registrationTimestamp": 0, "lastRenewalTimestamp": 0, "evictionTimestamp": 0, "serviceUpTimestamp": 0 }, "metadata": { "management.port": "18081" }, "homePageUrl": "http://10.91.80.100:18081/", "statusPageUrl": "http://10.91.80.100:18081/actuator/info", "healthCheckUrl": "http://10.91.80.100:18081/actuator/health", "vipAddress": "EUREKA-DEMO-PROVIDER", "secureVipAddress": "EUREKA-DEMO-PROVIDER", "isCoordinatingDiscoveryServer": "false", "lastUpdatedTimestamp": "1681266990026", "lastDirtyTimestamp": "1681266990889" }}' \\-v

四、健康检查

·请求方法:PUT

·路由:/eureka/apps/{appId}/{instanceId}

·示例:

curl -X 'PUT' 'http://127.0.0.1:8761/eureka/apps/EUREKA-DEMO-PROVIDER/10.91.80.100:eureka-demo-provider:18081' \\-H "x-namespace: ns1" \\-v

五、取消注册

·请求方法:DELETE

·路由:/eureka/apps/{appId}/{instanceId}

·示例:

curl -X 'DELETE' 'http://127.0.0.1:8761/eureka/apps/EUREKA-DEMO-PROVIDER/10.91.80.100:eureka-demo-provider:18081' \\-H "x-namespace: ns1" \\-v

六、查询所有实例

·请求方法:GET

·路由:/eureka/apps

·示例:

curl -X 'GET' 'http://127.0.0.1:8761/eureka/apps' \\-H "Accept: application/json" \\-H "x-namespace: ns1" \\-v

七、查询 delta 实例

·请求方法:GET

·路由:/eureka/apps/delta

·示例:

curl -X 'GET' 'http://127.0.0.1:8761/eureka/apps/delta' \\-H "Accept: application/json" \\-v

八、查询某个服务下所有实例

·请求方法:GET

·路由:/eureka/apps/{appId}

·示例:

curl -X 'GET' 'http://127.0.0.1:8761/eureka/apps/EUREKA-DEMO-PROVIDER' \\-H "Accept: application/json" \\-H "x-namespace: ns1" \\-v

九、查询某个服务下某个实例

·请求方法:GET

·路由:/eureka/apps/{appId}/{instanceId}

·示例:

curl -X 'GET' 'http://127.0.0.1:8761/eureka/apps/EUREKA-DEMO-PROVIDER/10.91.80.100:eureka-demo-provider:18081' \\-H "Accept: application/json" \\-H "x-namespace: ns1" \\-v

十、查询某个实例

·请求方法:GET

·路由:/eureka/instance/{instanceId}

·示例:

curl -X 'GET' 'http://127.0.0.1:8761/eureka/instance/10.91.80.100:eureka-demo-provider:18081' \\-H "Accept: application/json" \\-H "x-namespace: ns1" \\-v

十一、查询 vip 下的所有实例

·请求方法:GET

·路由:/eureka/vips/{vip}

·示例:

curl -X 'GET' 'http://127.0.0.1:8761/eureka/vips/EUREKA-DEMO-PROVIDER' \\-H "Accept: application/json" \\-H "x-namespace: ns1" \\-v

十二、查询 secure vip 下的所有实例

·请求方法:GET

·路由:/eureka/svips/{svip}

·示例

curl -X 'GET' 'http://127.0.0.1:8761/eureka/svips/EUREKA-DEMO-PROVIDER' \\-H "Accept: application/json" \\-H "x-namespace: ns1" \\-v

十三、强制隔离实例

·请求方法:PUT

·路由:/eureka/apps/{appId}/{instanceId}/status

·示例

curl -X 'PUT' 'http://127.0.0.1:8761/eureka/apps/EUREKA-DEMO-PROVIDER/10.91.80.100:eureka-demo-provider:18081/status' \\-H "x-namespace: ns1" \\-v

十四、关闭强制隔离

·请求方法:DELETE

·路由:/eureka/apps/{appId}/{instanceId}/status

·示例

curl -X 'DELETE' 'http://127.0.0.1:8761/eureka/apps/EUREKA-DEMO-PROVIDER/10.91.80.100:eureka-demo-provider:18081/status' \\-H "x-namespace: ns1" \\-v

十五、更新元数据

·请求方法:PUT

·路由:/eureka/apps/{appId}/{instanceId}/metadata?{key}={value}

·示例

curl -X 'PUT' 'http://127.0.0.1:8761/eureka/apps/EUREKA-DEMO-PROVIDER/10.91.80.100:eureka-demo-provider:18081/metadata?k=v' \\-H "x-namespace: ns1" \\-v

十六、批量复制

·请求方法:POST

·路由:/eureka/peerreplication/batch

·示例

curl -X 'POST' 'http://127.0.0.1:8761/eureka/peerreplication/batch' \\-H "Content-type: application/json" \\-H "Accept: application/json" \\-H "x-namespace: ns1" \\-d '{ "replicationList":[ { "appName": "EUREKA-DEMO-PROVIDER", "id": "10.91.80.100:eureka-demo-provider:18081", "lastDirtyTimestamp": 1681266990889, "overriddenStatus": "UNKNOWN", "status": "UP", "instanceInfo": { "instanceId": "10.91.80.100:eureka-demo-provider:18081", "hostName": "10.91.80.100", "app": "EUREKA-DEMO-PROVIDER", "ipAddr": "10.91.80.100", "status": "UP", "overriddenStatus": "UNKNOWN", "port": { "$": 18081, "@enabled": "true" }, "securePort": { "$": 443, "@enabled": "false" }, "countryId": 1, "dataCenterInfo": { "@class": "com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo", "name": "MyOwn" }, "leaseInfo": { "renewalIntervalInSecs": 30, "durationInSecs": 90, "registrationTimestamp": 0, "lastRenewalTimestamp": 0, "evictionTimestamp": 0, "serviceUpTimestamp": 0 }, "metadata": { "management.port": "18081" }, "homePageUrl": "http://10.91.80.100:18081/", "statusPageUrl": "http://10.91.80.100:18081/actuator/info", "healthCheckUrl": "http://10.91.80.100:18081/actuator/health", "vipAddress": "EUREKA-DEMO-PROVIDER", "secureVipAddress": "EUREKA-DEMO-PROVIDER", "isCoordinatingDiscoveryServer": "false", "lastUpdatedTimestamp": "1681266990026", "lastDirtyTimestamp": "1681266990889" }, "action": "Register" } ]}' \\-v

赞 (0)
上一篇 5天前
下一篇 5天前