当前位置: 首页 > news >正文

【vibe coding】Kubernetes + Nginx Ingress 实现云端Workspace容器分配与域名访问方案

Kubernetes + Nginx Ingress 实现云端Workspace容器分配与域名访问方案

k8s是很有趣的一个概念,应该了解一下

UserFrontendAPIContainerManagerDNSManagerCloudProvider请求创建WorkspacePOST /workspaces创建容器请求创建容器实例容器IP/ID分配子域名(user123.yourdomain.com)DNS记录确认返回容器+域名信息返回Workspace访问URL显示Workspace就绪(访问链接)UserFrontendAPIContainerManagerDNSManagerCloudProvider

在这里插入图片描述


Kubernetes + Nginx Ingress 实现云端Workspace容器分配与域名访问方案

1. 核心架构设计

用户 → 域名访问 (*.workspace.example.com) → Nginx Ingress → Kubernetes Service → User Pod (容器)

2. 关键组件及作用

组件作用推荐开源实现
Kubernetes容器编排平台原生K8s
Nginx Ingress Controller路由流量到对应服务kubernetes/ingress-nginx
Cert-Manager自动管理TLS证书jetstack/cert-manager
ExternalDNS自动管理DNS记录kubernetes-sigs/external-dns
Prometheus + Grafana监控prometheus-operator

3. 详细实现步骤

3.1 前置准备

# 安装helm(如未安装)
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash# 添加常用仓库
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo add jetstack https://charts.jetstack.io
helm repo update

3.2 安装Nginx Ingress Controller

# 安装Ingress-Nginx
helm install ingress-nginx ingress-nginx/ingress-nginx \--namespace ingress-nginx \--create-namespace \--set controller.service.type=LoadBalancer \--set controller.service.annotations."service\.beta\.kubernetes\.io/aws-load-balancer-type"="nlb"

3.3 安装Cert-Manager(自动HTTPS)

# 安装CRDs
kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.11.0/cert-manager.crds.yaml# 安装cert-manager
helm install cert-manager jetstack/cert-manager \--namespace cert-manager \--create-namespace \--version v1.11.0

3.4 配置ClusterIssuer(Let’s Encrypt)

# cluster-issuer.yaml
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:name: letsencrypt-prod
spec:acme:server: https://acme-v02.api.letsencrypt.org/directoryemail: your-email@example.comprivateKeySecretRef:name: letsencrypt-prodsolvers:- http01:ingress:class: nginx
kubectl apply -f cluster-issuer.yaml

3.5 部署Workspace管理服务

# workspace-controller.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: workspace-controller
spec:replicas: 1selector:matchLabels:app: workspace-controllertemplate:metadata:labels:app: workspace-controllerspec:containers:- name: controllerimage: your-registry/workspace-controller:latestenv:- name: INGRESS_CLASSvalue: "nginx"- name: DOMAIN_SUFFIXvalue: "workspace.example.com"
---
apiVersion: v1
kind: Service
metadata:name: workspace-controller
spec:selector:app: workspace-controllerports:- protocol: TCPport: 80targetPort: 8080

3.6 动态Workspace创建API示例

# workspace_controller.py (简化版)
from kubernetes import client, config
import random
import stringconfig.load_kube_config()def create_workspace(user_id):# 生成随机IDworkspace_id = f"ws-{user_id}-{''.join(random.choices(string.ascii_lowercase + string.digits, k=6))}"# 创建Namespacecore_v1 = client.CoreV1Api()ns = client.V1Namespace(metadata=client.V1ObjectMeta(name=workspace_id))core_v1.create_namespace(ns)# 创建Deploymentapps_v1 = client.AppsV1Api()container = client.V1Container(name="workspace",image="workspace-image:latest",ports=[client.V1ContainerPort(container_port=8080)])deployment = client.V1Deployment(metadata=client.V1ObjectMeta(name="workspace", namespace=workspace_id),spec=client.V1DeploymentSpec(replicas=1,selector={"matchLabels": {"app": "workspace"}},template=client.V1PodTemplateSpec(metadata=client.V1ObjectMeta(labels={"app": "workspace"}),spec=client.V1PodSpec(containers=[container])))apps_v1.create_namespaced_deployment(namespace=workspace_id, body=deployment)# 创建Serviceservice = client.V1Service(metadata=client.V1ObjectMeta(name="workspace", namespace=workspace_id),spec=client.V1ServiceSpec(selector={"app": "workspace"},ports=[client.V1ServicePort(port=80, target_port=8080)]))core_v1.create_namespaced_service(namespace=workspace_id, body=service)# 创建Ingressnetworking_v1 = client.NetworkingV1Api()ingress = client.V1Ingress(metadata=client.V1ObjectMeta(name="workspace",namespace=workspace_id,annotations={"nginx.ingress.kubernetes.io/rewrite-target": "/","cert-manager.io/cluster-issuer": "letsencrypt-prod"}),spec=client.V1IngressSpec(tls=[client.V1IngressTLS(hosts=[f"{workspace_id}.workspace.example.com"],secret_name=f"{workspace_id}-tls")],rules=[client.V1IngressRule(host=f"{workspace_id}.workspace.example.com",http=client.V1HTTPIngressRuleValue(paths=[client.V1HTTPIngressPath(path="/",path_type="Prefix",backend=client.V1IngressBackend(service=client.V1IngressServiceBackend(name="workspace",port=client.V1ServiceBackendPort(number=80)))]))]))networking_v1.create_namespaced_ingress(namespace=workspace_id, body=ingress)return {"url": f"https://{workspace_id}.workspace.example.com","status": "created"}

3.7 网络策略(多租户隔离)

# network-policy.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: deny-all-inter-namespacenamespace: {{WORKSPACE_NAMESPACE}}
spec:podSelector: {}policyTypes:- Ingress- Egressingress:- from:- podSelector: {}egress:- to:- podSelector: {}

4. 自动化运维增强

4.1 资源配额管理

# resource-quota.yaml
apiVersion: v1
kind: ResourceQuota
metadata:name: workspace-quotanamespace: {{WORKSPACE_NAMESPACE}}
spec:hard:requests.cpu: "2"requests.memory: 4Gilimits.cpu: "4"limits.memory: 8Gipods: "5"

4.2 自动回收闲置Workspace

# idle_cleaner.py
from kubernetes import client, config
from datetime import datetime, timedeltaconfig.load_kube_config()def cleanup_idle_workspaces(max_idle_hours=24):core_v1 = client.CoreV1Api()namespaces = core_v1.list_namespace(label_selector="type=workspace")for ns in namespaces.items:last_active = datetime.strptime(ns.metadata.annotations.get("last-active", "1970-01-01"),"%Y-%m-%dT%H:%M:%SZ")if datetime.utcnow() - last_active > timedelta(hours=max_idle_hours):print(f"Deleting idle namespace: {ns.metadata.name}")core_v1.delete_namespace(ns.metadata.name)

5. 最佳实践建议

  1. 域名管理优化

    • 使用ExternalDNS自动管理DNS记录
    • 配置通配符证书(*.workspace.example.com
  2. 性能优化

    # nginx-ingress优化参数
    controller:config:upstream-keepalive-connections: "100"upstream-keepalive-requests: "10000"keep-alive: "75s"
    
  3. 安全加固

    • 启用Ingress的WAF功能(如ModSecurity)
    • 为每个租户使用独立的Service Account
  4. 监控方案

    # 安装Prometheus Operator
    helm install prometheus prometheus-community/kube-prometheus-stack \--namespace monitoring \--create-namespace
    

6. 验证访问

创建Workspace后,可通过以下方式验证:

# 获取Ingress Controller外部IP
kubectl get svc -n ingress-nginx ingress-nginx-controller# 测试访问(替换为实际域名)
curl -v https://ws-user123-abc123.workspace.example.com

此方案提供了完整的生产级实现,具备多租户隔离、自动HTTPS、资源配额管理等企业级功能,同时保持了良好的扩展性。

http://www.dtcms.com/a/317025.html

相关文章:

  • Linux lvm逻辑卷管理
  • MySQL间隙锁在查询时锁定的范围
  • lesson32:Pygame模块详解:从入门到实战的2D游戏开发指南
  • Python 3.13 预览版:颠覆性特性与实战指南
  • 项目设计模式草稿纸
  • 电感矩阵-信号完整性分析
  • ob数据库是什么
  • 二维数点问题2
  • 计算机视觉的四项基本任务辨析
  • HPE磁盘阵列管理01——MSA和SMU
  • OpenLayers学习(一)-基础
  • 赛灵思ZYNQ官方文档UG585自学翻译笔记:Quad-SPl Flash 闪存控制器
  • 《Python基础》第3期:使用PyCharm编写Hello World
  • 【力扣 Hot100】 刷题日记
  • linux定时器管理 timer_*系统调用及示例
  • LeetCode 112. 路径总和解题思路详解(BFS算法深入理解)
  • AI模型整合包上线!一键部署ComfyUI,2.19TB模型全解析
  • ES(Elasticsearch)进程掉线(节点脱离集群)问题
  • 协同过滤基础——基线预测器(Baseline Predictors)
  • 深入理解 Ext 系列文件系统:从磁盘物理到文件系统原理
  • QtPromise第三方库的介绍和使用
  • STM32学习笔记2-GPIO的输出模式
  • 宠智灵宠物AI大模型聚焦医疗核心场景,提升临床决策能力
  • Bilateral Reference for High-Resolution Dichotomous Image Segmentation
  • mmsegmentation·数据结构
  • 《零基础入门AI:传统机器学习进阶(从拟合概念到K-Means算法)》
  • 力扣刷题日常(15-16)
  • 深信服GO面试题及参考答案(下)
  • MCP与Function Calling
  • 三极管基本放大电路静态及动态参数计算