## 一、原理說明
基于 Nacos 去隔離多個物理集群的,同時,在?Nacos 客戶端不需要做任何代碼改動的情況下,就可以實現環境的自動路由。
開始前,我們先做一些約束:
* 一臺機器上部署的應用都在一個環境內;
* 一個應用進程內默認情況下只連一個環境的 Nacos;
* 通過某種手段可以拿到客戶端所在機器 IP;
* 用戶對機器的網段有規劃;
基本原理是:
* 網絡中 32 位的 IPV4 可以劃分為很多網段,如192.168.1.0/24,并且一般中大型的企業都會有網段規劃,按照一定的用途劃分網段。我們可以利用這個原理做環境隔離,即不同網段的 IP 屬于不同的環境,如192.168.1.0/24屬于環境A, 192.168.2.0/24屬于環境B等。
* Nacos 有兩種方式初始化客戶端實例,一種是直接告訴客戶端?Nacos 服務端的IP;另一種是告訴客戶端一個 Endpoint,客戶端通過 HTTP 請求到 Endpoint,查詢?Nacos 服務端的 IP 列表。這里,我們利用第二種方式進行初始化。
* 增強 Endpoint 的功能。在 Endpoint 端配置網段和環境的映射關系,Endpoint 在接收到客戶端的請求后,根據客戶端的來源 IP 所屬網段,計算出該客戶端的所屬環境,然后找到對應環境的 IP 列表返回給客戶端。如下圖

## 二、一個環境隔離 Server 的示例
前面講了基于 IP 段做環境隔離的約束和基本原理,那么如何實現一個地址服務器呢。
最簡單的方法是基于Nginx實現,利用 Nginx 的 Geo 模塊,做 IP 端和環境的映射,然后利用Nginx 返回靜態文件內容。
* 安裝Nginx:[http://nginx.org/en/docs/install.html](http://nginx.org/en/docs/install.html)
* 在nginx-proxy.conf 中配置?Geo 映射,參考這里:
~~~
geo $env {default ""; 192.168.1.0/24 -env-a; 192.168.2.0/24 -env-b;}
~~~
* 配置nginx根路徑及轉發規則,這里只需要簡單的返回靜態文件的內容:
~~~
# 在http模塊中配置根路徑
root /tmp/htdocs;
# 在server模塊中配置
location / {
rewrite ^(.*)$ /$1$env break;
}
~~~
復制
* 配置Nacos服務端IP列表配置文件,在/tmp/hotdocs/nacos目錄下配置以環境名結尾的文件,文件內容為IP,一行一個:
~~~
$ll /tmp/hotdocs/nacos/
total 0
-rw-r--r-- 1 user1 users 0 Mar 5 08:53 serverlist
-rw-r--r-- 1 user1 users 0 Mar 5 08:53 serverlist-env-a
-rw-r--r-- 1 user1 users 0 Mar 5 08:53 serverlist-env-b
$cat /tmp/hotdocs/nacos/serverlist
192.168.1.2
192.168.1.3
~~~
* 驗證
~~~
curl 'localhost:8080/nacos/serverlist'
192.168.1.2
192.168.1.3
~~~
至此, 一個簡單的根據 IP 網段做環境隔離的示例已經可以工作了,不同網段的?Nacos 客戶端會自動獲取到不同的 Nacos 服務端 IP 列表,實現環境隔離。
這種方法的好處是用戶不需要配置任何參數,各個環境的代碼和配置是一樣的,但需要提供底層服務的同學做好網絡規劃和相關配置。
- springcloud
- springcloud的作用
- springboot服務提供者和消費者
- Eureka
- ribbon
- Feign
- feign在微服務中的使用
- feign充當http請求工具
- Hystrix 熔斷器
- Zuul 路由網關
- Spring Cloud Config 分布式配置中心
- config介紹與配置
- Spring Cloud Config 配置實戰
- Spring Cloud Bus
- gateway
- 概念講解
- 實例
- GateWay
- 統一日志追蹤
- 分布式鎖
- 1.redis
- springcloud Alibaba
- 1. Nacos
- 1.1 安裝
- 1.2 特性
- 1.3 實例
- 1. 整合nacos服務發現
- 2. 整合nacos配置功能
- 1.4 生產部署方案
- 環境隔離
- 原理講解
- 1. 服務發現
- 2. sentinel
- 3. Seata事務
- CAP理論
- 3.1 安裝
- 分布式協議
- 4.熔斷和降級
- springcloud與alibba
- oauth
- 1. abstract
- 2. oauth2 in micro-service
- 微服務框架付費
- SkyWalking
- 介紹與相關資料
- APM系統簡單對比(zipkin,pinpoint和skywalking)
- server安裝部署
- agent安裝
- 日志清理
- 統一日志中心
- docker安裝部署
- 安裝部署
- elasticsearch 7.x
- logstash 7.x
- kibana 7.x
- ES索引管理
- 定時清理數據
- index Lifecycle Management
- 沒數據排查思路
- ELK自身組件監控
- 多租戶方案
- 慢查詢sql
- 日志審計
- 開發
- 登錄認證
- 鏈路追蹤
- elk
- Filebeat
- Filebeat基礎
- Filebeat安裝部署
- 多行消息Multiline
- how Filebeat works
- Logstash
- 安裝
- rpm安裝
- docker安裝Logstash
- grok調試
- Grok語法調試
- Grok常用表達式
- 配置中常見判斷
- filter提取器
- elasticsearch
- 安裝
- rpm安裝
- docker安裝es
- 使用
- 概念
- 基礎
- 中文分詞
- 統計
- 排序
- 倒排與正排索引
- 自定義dynamic
- 練習
- nested object
- 父子關系模型
- 高亮
- 搜索提示
- kibana
- 安裝
- docker安裝
- rpm安裝
- 整合
- 收集日志
- 慢sql
- 日志審計s
- 云
- 分布式架構
- 分布式鎖
- Redis實現
- redisson
- 熔斷和降級