Skip to content

Commit e5985c0

Browse files
committed
2.6.13
1 parent ead54db commit e5985c0

File tree

4 files changed

+29
-24
lines changed

4 files changed

+29
-24
lines changed

README.md

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ gateway等网关插件的高扩展性
99
### 通过docker运行
1010

1111
```bash
12-
docker run anjia0532/discovery-syncer-python:v2.6.12
12+
docker run anjia0532/discovery-syncer-python:v2.6.13
1313
```
1414

1515
特别的,`-c ` 支持配置远端http[s]的地址,比如读取静态资源的,比如读取nacos的
@@ -27,17 +27,17 @@ docker run anjia0532/discovery-syncer-python:v2.6.12
2727
头校验,需要在配置文件 `common.syncer-api-key` 修改默认值,
2828
长度最低为32位,需要同时包含大小写字母,数字,和特殊字符
2929

30-
| 路径 | 返回值 | 用途 |
31-
|--------------------------------------------------|:-----------|:-------------------------------------------------------|
32-
| `GET /` | `OK` | 服务是否启动 |
33-
| `GET /redoc/` | redocly ui | Redocly 接口文档 |
34-
| `GET /docs/` | swagger ui | Swagger 接口文档 |
35-
| `GET /-/reload` | `OK` | 重新加载配置文件,加载成功返回OK,主要是cicd场景或者k8s的configmap reload 场景使用 |
36-
| `GET /health` | JSON | 判断服务是否健康,可以配合k8s等容器服务的健康检查使用 |
37-
| `PUT /discovery/{discovery-name}?alive_num=1` | `OK` | 主动下线上线注册中心的服务,配合CI/CD发版业务用 |
38-
| `GET /gateway-api-to-file/{gateway-name}` | text/plain | 读取网关admin api转换成文件用于备份或者db-less模式 |
39-
| `POST /migrate/{gateway-name}/to/{gateway-name}` | `OK` | 将网关数据迁移(目前仅支持apisix) |
40-
| `PUT /restore/{gateway-name}` | `OK` | 将 db-less 文件还原到网关(目前仅支持apisix) |
30+
| 路径 | 返回值 | 用途 |
31+
|--------------------------------------------------|:-----------|:-----------------------------------------------------------|
32+
| `GET /` | `OK` | 服务是否启动 |
33+
| `GET /redoc/` | redocly ui | Redocly 接口文档 |
34+
| `GET /docs/` | swagger ui | Swagger 接口文档 |
35+
| `GET /-/reload` | `OK` | 重新加载配置文件,加载成功返回OK,主要是cicd场景或者k8s的configmap reload 场景使用 |
36+
| `GET /health` | JSON | 判断服务是否健康,可以配合k8s等容器服务的健康检查使用 |
37+
| `PUT /discovery/{discovery-name}?alive_num=1` | `OK` | 主动下线上线注册中心的服务,配合CI/CD发版业务用 |
38+
| `GET /gateway-api-to-file/{gateway-name}` | text/plain | 读取网关admin api转换成文件用于备份或者db-less模式(目前仅支持apisix,kong建议用deck) |
39+
| `POST /migrate/{gateway-name}/to/{gateway-name}` | `OK` | 将网关数据迁移(目前仅支持apisix,kong建议用deck) |
40+
| `PUT /restore/{gateway-name}` | `OK` | 将 db-less 文件还原到网关(目前仅支持apisix,kong建议用deck) |
4141

4242
#### `GET /-/reload` 重新加载配置文件
4343

app/service/gateway/apisix.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
"read": 30
2727
},
2828
"type":"roundrobin",
29-
"desc": "auto sync by https://github.com/anjia0532/discovery-syncer-python-python"
29+
"desc": "auto sync by https://github.com/anjia0532/discovery-syncer-python"
3030
}
3131
"""
3232

app/service/gateway/kong.py

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,15 @@
1212
default_kong_upstream_template = """
1313
{
1414
"name": "$name",
15-
"tags": ["discovery-syncer-auto"]
15+
"tags": ["discovery-syncer-python-auto"]
1616
}
1717
"""
1818

1919
default_kong_target_template = """
2020
{
2121
"target": "$ip:$port",
2222
"weight": $weight,
23-
"tags": ["discovery-syncer-auto"]
23+
"tags": ["discovery-syncer-python-auto"]
2424
}
2525
"""
2626

@@ -33,7 +33,7 @@ def __init__(self, config):
3333
def get_service_all_instances(self, target: dict, upstream_name: str = None) -> List[Instance]:
3434
# https://docs.konghq.com/gateway/api/admin-oss/latest/
3535
upstream_name = self.get_upstream_name(target, upstream_name)
36-
uri = f"{upstream_name}{self._config.config.get('targets_uri', '/targets')}"
36+
uri = f"upstreams/{upstream_name}{self._config.config.get('targets_uri', '/targets')}"
3737
resp = self.kong_execute("GET", uri, {})
3838
if resp.status_code == 404:
3939
return []
@@ -51,37 +51,42 @@ def sync_instances(self, target: dict, upstream_name: str, diff_ins: list, insta
5151
return
5252
if upstream_name not in self.service_name_map:
5353
tpl = Template(target.get("config").get("template", default_kong_upstream_template))
54-
resp = self.kong_execute("POST", "", {}, tpl.substitute(name=upstream_name))
54+
self.kong_execute("PUT", "upstreams", {}, tpl.substitute(name=upstream_name))
5555
self.service_name_map[upstream_name] = True
5656

5757
tpl = Template(default_kong_target_template)
5858
for instance in diff_ins:
59-
target_uri = f"{upstream_name}/targets/"
59+
target_uri = f"upstreams/{upstream_name}/targets/"
6060
method = "POST"
6161
data = None
6262
if instance.enabled:
6363
data = tpl.substitute(ip=instance.ip, port=instance.port, weight=instance.weight)
6464
else:
6565
target_uri = f"{target_uri}/{instance.ip}:{instance.port}"
6666
method = "DELETE"
67-
self.kong_execute(method, target_uri, {}, data)
67+
resp = self.kong_execute(method, target_uri, {}, data)
68+
if instance.enabled and resp.status_code == 409:
69+
target_uri = f"{target_uri}/{instance.ip}:{instance.port}"
70+
method = "PUT"
71+
self.kong_execute(method, target_uri, {}, data)
6872

6973
def fetch_admin_api_to_file(self, file_name: str) -> Tuple[str, str]:
7074
# https://docs.konghq.com/gateway/3.6.x/production/deployment-topologies/db-less-and-declarative-config/
75+
# https://docs.konghq.com/deck/1.38.x/guides/backup-restore/
7176
raise Exception("Unrealized")
7277

7378
def migrate_to(self, target_gateway: 'Gateway'):
79+
# https://docs.konghq.com/deck/1.38.x/guides/backup-restore/
7480
raise Exception("Unrealized")
7581

7682
def restore_gateway(self, body: str) -> str:
83+
# https://docs.konghq.com/deck/1.38.x/guides/backup-restore/
7784
raise Exception("Unrealized")
7885

7986
def kong_execute(self, method, uri, params, data=None):
8087
resp = httpx.request(method, f"{self._config.admin_url}{self._config.prefix}{uri}",
8188
params=params, data=data, timeout=10,
82-
headers={"X-API-KEY": self._config.config.get("X-API-KEY"),
83-
"Content-Type": "application/json",
84-
"Accept": "application/json"})
89+
headers={"Content-Type": "application/json", "Accept": "application/json"})
8590

8691
logger.info(
8792
f"请求 kong 接口, method: {method}, url: {self._config.admin_url}{self._config.prefix}{uri}, 请求参数: {params}, 请求数据: {data}, 响应结果: {resp.text}")

config-example.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ gateway-servers:
2323
kong1:
2424
type: kong
2525
admin-url: http://kong-server:8001
26-
prefix: /upstreams/
26+
prefix: /
2727
config:
2828
targets_uri: /targets/all
2929

@@ -153,5 +153,5 @@ targets:
153153
},
154154
"threshold": 0
155155
},
156-
"tags": ["discovery-syncer-auto"]
156+
"tags": ["discovery-syncer-python-auto"]
157157
}

0 commit comments

Comments
 (0)