dns解析问题解决
This commit is contained in:
@@ -390,18 +390,33 @@ async def create_agent(request: CreateAgentRequest, db: Session = Depends(get_db
|
||||
)
|
||||
|
||||
# 步骤3: 获取服务端口
|
||||
service_port = k8s_manager.TEMPLATE_PORTS.get(request.template)
|
||||
# OpenClaw 使用 18789 端口(沙箱镜像会自动启用)
|
||||
if request.template == "openclaw":
|
||||
service_port = 18789
|
||||
else:
|
||||
service_port = k8s_manager.TEMPLATE_PORTS.get(request.template)
|
||||
|
||||
# 步骤4: 创建 LoadBalancer Service(AKS 会自动分配外网 IP)
|
||||
# 步骤4: 创建 Service(OpenClaw 已在 create_openclaw_deployment 中自动创建 Service 和 Ingress)
|
||||
service_info = None
|
||||
dns_info = None
|
||||
|
||||
if service_port:
|
||||
# OpenClaw 使用 Ingress + HTTPS,不需要 LoadBalancer Service
|
||||
if request.template == "openclaw":
|
||||
logger.info("OpenClaw 使用 Ingress + HTTPS,跳过 LoadBalancer Service 创建")
|
||||
# Service 和 Ingress 已在 create_openclaw_deployment 中自动创建
|
||||
# 从 result 中获取访问信息
|
||||
if "access_info" in result:
|
||||
service_info = {
|
||||
"name": f"{request.name}-service",
|
||||
"type": "ClusterIP",
|
||||
"note": "OpenClaw 使用 Ingress + HTTPS 访问"
|
||||
}
|
||||
elif service_port:
|
||||
try:
|
||||
import time
|
||||
time.sleep(2) # 等待Pod启动
|
||||
|
||||
# 创建 LoadBalancer Service
|
||||
# 创建 LoadBalancer Service(非 OpenClaw 模板)
|
||||
service_info = temp_manager.create_service(
|
||||
service_name=f"{request.name}-service",
|
||||
namespace=agent_namespace,
|
||||
@@ -465,11 +480,17 @@ async def create_agent(request: CreateAgentRequest, db: Session = Depends(get_db
|
||||
"labels": pod.metadata.labels
|
||||
}
|
||||
|
||||
# 添加 LoadBalancer Service 信息到响应
|
||||
if service_info:
|
||||
# 添加 Service 信息到响应
|
||||
# OpenClaw 的访问信息已在 create_openclaw_deployment 中设置
|
||||
if request.template == "openclaw":
|
||||
# OpenClaw 使用 Ingress + HTTPS,访问信息已在 result 中
|
||||
if "access_info" in result and result["access_info"].get("https_url"):
|
||||
logger.info(f" - HTTPS 访问: {result['access_info']['https_url']}")
|
||||
logger.info(f" - 注意: 使用自签名证书,浏览器会显示安全警告")
|
||||
elif service_info:
|
||||
result["service_info"] = service_info
|
||||
|
||||
# 构建访问信息
|
||||
# 构建访问信息(非 OpenClaw 模板)
|
||||
external_ip = service_info.get("external_ip")
|
||||
|
||||
if external_ip:
|
||||
@@ -625,6 +646,34 @@ async def delete_agent(agent_name: str, db: Session = Depends(get_db)):
|
||||
except Exception as e:
|
||||
logger.warning(f"删除 DNS 记录失败(可忽略): {str(e)}")
|
||||
|
||||
# 检查是否是 OpenClaw 类型的 Agent
|
||||
is_openclaw = False
|
||||
if db_agent and db_agent.agent_framework:
|
||||
# 从数据库记录判断
|
||||
pass
|
||||
|
||||
# 通过命名空间中的资源判断是否为 OpenClaw
|
||||
try:
|
||||
computed_ns = f"agent-{agent_name}".lower().strip('-')[:63]
|
||||
temp_manager = K8sManager(namespace=computed_ns, kubeconfig_path=KUBECONFIG_PATH)
|
||||
# 尝试查找 OpenClaw 特有的资源
|
||||
try:
|
||||
temp_manager.v1.read_namespaced_config_map(name=f"{agent_name}-config", namespace=computed_ns)
|
||||
is_openclaw = True
|
||||
logger.info(f"检测到 OpenClaw Agent: {agent_name}")
|
||||
except:
|
||||
pass
|
||||
except:
|
||||
pass
|
||||
|
||||
# 如果是 OpenClaw,先清理其特有资源
|
||||
if is_openclaw:
|
||||
try:
|
||||
logger.info(f"清理 OpenClaw 专用资源...")
|
||||
temp_manager.delete_openclaw_deployment(agent_name)
|
||||
except Exception as e:
|
||||
logger.warning(f"清理 OpenClaw 资源失败(可忽略): {e}")
|
||||
|
||||
# 步骤2: 删除 Agent 的独立命名空间(会自动删除Pod、Service等所有资源)
|
||||
result = k8s_manager.delete_agent_namespace(agent_name=agent_name)
|
||||
# region agent log
|
||||
|
||||
Reference in New Issue
Block a user