用于网络端口分配的django微服务
django-portmaster的Python项目详细描述
django portmaster是一种网络端口分配和管理 微服务。使用portmaster,您可以将端口范围分配给 服务并将端口注册到这些服务的不同实例。 这样就可以防止将同一端口分配两次,从而防止 分配冲突。
安装
- 使用PIP安装。
pip install django-portmaster
- 将应用程序添加到Django项目的设置文件中,并包括提供 清理中间件。
INSTALLED_APPS=[[..]'django_portmaster']MIDDLEWARE=[[..]'django_portmaster.middleware.CleanOldOffersMiddleware']
- 将portmaster的url包含到django项目的url文件中。
fromdjango_portmaster.urlsimportportmaster_urlpatternsurlpatterns+=portmaster_urlpatterns
- 可选地,您可以覆盖保留报价之前的时间 删除。将以下代码添加到settings.py文件中。
# Default value is 30 minutesPM_DELETE_OFFERS_AFTER_MINUTES=10
API
- 通过创建服务定义端口范围。
POST/v1/services{"name":"django","description":"Django service","start":5000,"end":10000}
- 通过提供服务实例名称从范围请求端口。
POST/v1/services/django/offers{"name":"web-01"}
响应
{"service":"django","name":"web-01","port":5000,"secret":"6f8ffc86-d98a-49ba-848a-a7cbaaea9360","created":"2017-09-08T14:16:39.277408Z"}
- 端口不会立即分配。相反,它将被保留 直到客户端通过发布到专用url来接受端口 使用提供的密码:
POST/v1/services/django/offers/6f8ffc86-d98a-49ba-848a-a7cbaaea9360/accept
响应
{"service":"django","name":"web-01","port":5000,"created":"2017-09-08T14:18:04.094357Z"}
- 或者,你可以拒绝这个提议。不接受的报价 在到达后由portmaster中间件自动删除 由PM_DELETE_OFFERS_AFTER_MINUTES设置设置的阈值(默认值 值为30分钟)。
POST/v1/services/django/offers/6f8ffc86-d98a-49ba-848a-a7cbaaea9360/reject
- 您可以列出特定服务的所有端口配置。
GET/v1/services/django/ports
- 按端口号查找一个
GET/v1/services/django/ports/5000
- 或按服务实例名称查找
GET/v1/services/django/ports/web-01
安全防护
portmaster包含多个错误检查和角落案例处理程序,因此:
- 服务名称必须唯一
- 端口范围不能重叠
- 端口范围不能与特权端口(<;1024)或IANA重叠 定义的短暂端口范围(>;49152)
- 在任何给定时间只能分配一次端口
- 服务实例名称必须唯一