refactor: 优化路由监听服务,移除已处理域名列表
- 移除 processed_domains 状态管理,改为直接检查 APISIX 实际 SSL 配置 - 简化代码逻辑,提高可靠性 - 修复 SSL 配置查找时的类型错误(key 字段是字符串而非字典) - 添加路由状态检查,跳过禁用的路由(status=0) 优势: - 更简单:无需维护状态文件 - 更准确:直接检查实际配置,避免状态不一致 - 更可靠:即使证书被删除,也能自动检测并重新申请
This commit is contained in:
parent
3a37cc6e14
commit
7198a1376b
@ -39,11 +39,7 @@ class RouteWatcher:
|
||||
self.apisix_admin_url = os.getenv('APISIX_ADMIN_URL', 'http://localhost:9180')
|
||||
self.apisix_admin_key = os.getenv('APISIX_ADMIN_KEY', '8206e6e42b6b53243c52a767cc633137')
|
||||
|
||||
# 已处理的域名集合
|
||||
self.processed_domains: Set[str] = set()
|
||||
|
||||
# 加载已处理的域名
|
||||
self._load_processed_domains()
|
||||
# 不再使用已处理列表,直接检查实际 SSL 配置
|
||||
|
||||
def _get_apisix_headers(self):
|
||||
"""获取 APISIX Admin API 请求头"""
|
||||
@ -52,27 +48,6 @@ class RouteWatcher:
|
||||
'Content-Type': 'application/json'
|
||||
}
|
||||
|
||||
def _load_processed_domains(self):
|
||||
"""加载已处理的域名列表"""
|
||||
state_file = '/var/lib/apisix-ssl-manager/processed_domains.json'
|
||||
if os.path.exists(state_file):
|
||||
try:
|
||||
with open(state_file, 'r') as f:
|
||||
self.processed_domains = set(json.load(f))
|
||||
logger.info(f"加载已处理域名: {len(self.processed_domains)} 个")
|
||||
except Exception as e:
|
||||
logger.warning(f"加载已处理域名失败: {e}")
|
||||
|
||||
def _save_processed_domains(self):
|
||||
"""保存已处理的域名列表"""
|
||||
state_file = '/var/lib/apisix-ssl-manager/processed_domains.json'
|
||||
os.makedirs(os.path.dirname(state_file), exist_ok=True)
|
||||
try:
|
||||
with open(state_file, 'w') as f:
|
||||
json.dump(list(self.processed_domains), f)
|
||||
except Exception as e:
|
||||
logger.error(f"保存已处理域名失败: {e}")
|
||||
|
||||
def get_all_routes(self) -> list:
|
||||
"""获取所有路由"""
|
||||
try:
|
||||
@ -158,10 +133,6 @@ class RouteWatcher:
|
||||
|
||||
def should_request_cert(self, domain: str) -> bool:
|
||||
"""判断是否需要申请证书"""
|
||||
# 跳过已处理的域名
|
||||
if domain in self.processed_domains:
|
||||
return False
|
||||
|
||||
# 跳过本地域名
|
||||
if domain in ['localhost', '127.0.0.1', '0.0.0.0']:
|
||||
return False
|
||||
@ -170,13 +141,12 @@ class RouteWatcher:
|
||||
if domain.replace('.', '').isdigit():
|
||||
return False
|
||||
|
||||
# 检查是否已有 SSL 配置
|
||||
# 检查是否已有 SSL 配置(直接检查实际配置,最准确)
|
||||
ssls = self.get_all_ssls()
|
||||
for ssl in ssls:
|
||||
ssl_domains = self.extract_domains_from_ssl(ssl)
|
||||
if domain in ssl_domains:
|
||||
logger.info(f"域名已有 SSL 配置: {domain}")
|
||||
self.processed_domains.add(domain)
|
||||
return False
|
||||
|
||||
return True
|
||||
@ -202,8 +172,6 @@ class RouteWatcher:
|
||||
try:
|
||||
if self.ssl_manager.request_certificate(domain):
|
||||
logger.info(f"证书申请成功: {domain}")
|
||||
self.processed_domains.add(domain)
|
||||
self._save_processed_domains()
|
||||
else:
|
||||
logger.error(f"证书申请失败: {domain}")
|
||||
except Exception as e:
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user