Blog

En trin-for-trin køreplan til multi-tenant Docker-isolering

Isolér multi-tenant workloads i Docker, mens du holder hostingomkostningerne nede. Lær at konfigurere namespaces, cgroups, netværkspolitikker og runtime-hærdning.

Opsummering

Håndtering af delt infrastruktur til flere kundekampagner eller interne websteder skaber ofte gnidninger med ledelsen om hostingomkostninger og datasikkerhed. Docker-containere tilbyder et letvægtsalternativ til dedikerede virtuelle maskiner, men standardopsætninger efterlader alvorlige huller i isoleringen. Ægte multi-tenancy kræver velovervejede grænser på kerne-, proces-, netværks- og lagringsniveau. Denne guide giver en praktisk femtrinsramme til at sikre multi-tenant Docker-driftsmiljøer ved hjælp af indbyggede Linux-isoleringsmekanismer. Du lærer, hvordan du håndhæver ressourcekvoter, begrænser procesprivilegier, segmenterer containernetværk og vælger det rette isoleringsniveau. Ved at følge denne køreplan kan du beskytte tenant-miljøer og forsvare infrastrukturbudgetter over for ikke-tekniske interessenter.

Din ikke-tekniske leder træder ind på dit kontor med en udskrift af sidste måneds hostingfaktura fra skyen. Omkostningerne er steget, og alligevel oplevede flere højt prioriterede landingssider forsinkelser under en samtidig produktlancering. Du bliver bedt om at forklare, hvorfor marketingaktiver deler servere, om kundedata er eksponeret, og hvorfor teamet ikke bare kan oprette en dyr, dedikeret virtuel maskine til hver enkelt kampagne.

At give hver enkelt digital ejendom sin egen virtuelle maskine (VM) eliminerer problemer med "støjende naboer", men det opbruger hurtigt dit driftsbudget. Standardopsætninger med Docker løser omkostningsproblemet ved at køre flere websites på en enkelt operativsystemkerne, men standardkonfigurationer efterlader farlige sikkerhedshuller i isoleringen. Hvis én tenant-applikation rammes af et løbsk script eller et ondsindet sikkerhedsbrud, er alle andre applikationer på samme vært i fare.

Brug denne tekniske trin-for-trin køreplan til at konfigurere en solid multi-tenant-isolering i Docker. Implementér disse fem operationelle trin for at beskytte systemets stabilitet, isolere tenant-data og omsætte tekniske infrastrukturvalg til klar forretningsværdi for din ledelse.


1. Håndhæv faste ressourcekvoter ved hjælp af Control Groups

Sæt straks eksplicitte grænser for CPU, hukommelse og disk-I/O på hver enkelt container. Når flere tenants deler en underliggende vært, konkurrerer ubegrænsede containere om systemressourcerne. En enkelt løbsk databaseforespørgsel eller en kampagne med høj trafik kan opbruge værtens samlede hukommelsespulje, hvilket udløser Linux Out-Of-Memory (OOM) killeren, som derefter lukker vilkårlige systemprocesser.

Linux control groups (cgroups) styrer, hvor megen regnekapacitet den enkelte container må forbruge. Anvend disse grænser direkte i dine udrulningsdefinitioner:

services:
  tenant_app:
    image: nginx:alpine
    deploy:
      resources:
        limits:
          cpus: '0.75'
          memory: 512M
        reservations:
          cpus: '0.25'
          memory: 256M
  • Hukommelsesgrænser (limits.memory): Etablerer et hårdt loft. Hvis containeren overskrider 512 megabyte, afslutter kernen processer inde i den pågældende container uden at forringe nabotenants.
  • Hukommelsesreservationer (reservations.memory): Garanterer en basisallokering af hukommelse, så applikationer med lav trafik forbliver responsive.
  • CPU-grænser (limits.cpus): Begrænser containeren til en maksimal brøkdel af tilgængelige CPU-kerner, hvilket forhindrer, at en enkelt tenant udsulter CPU'en for andre.

Når du skal begrunde denne arkitektur over for ikke-tekniske ledere, kan du forklare cgroups som automatiske digitale bimålere. Ligesom lejere i en kontorbygning betaler for deres eget elforbrug i stedet for at overbelaste hovedafbryderen, sikrer cgroups, at én landingsside med spidsbelastning aldrig lægger en anden kundes leadgenereringsportal ned. For en dybere gennemgang af de arkitektoniske afvejninger kan du læse vores guide om design af en multi-tenant-arkitektur.


2. Segmentér tenant-processer med namespaces og non-root-brugere

Kør aldrig containerprocesser som standardbrugeren root. I standard Linux-containermiljøer svarer root inde i en container til root på den underliggende værtskerne, medmindre det udtrykkeligt er remapped. Hvis en angriber kompromitterer en webapplikation, der kører som root, opnår de forhøjede rettigheder over den delte vært.

Håndhæv procesisolering gennem user namespaces og eksplicit non-root-afvikling:

  1. Definér uprivilegerede runtime-brugere: Opret dedikerede tjenestebrugere med lave rettigheder i dine Dockerfiles.
    FROM php:8.2-fpm-alpine
    RUN addgroup -g 10001 tenantgroup && \n       adduser -u 10001 -D -G tenantgroup tenantuser
    USER tenantuser
    
  2. Aktivér User Namespaces (userns-remap): Konfigurér Docker-dæmonen (/etc/docker/daemon.json) til at remappe container-bruger-ID'er til et uprivilegeret interval på værten.
    {
      "userns-remap": "default"
    }
    

Linux namespaces opdeler systemets synlighed. Process ID (PID) namespacet sikrer, at Tenant A ikke kan se, sende signaler til eller afslutte processer, der tilhører Tenant B. Mount (MNT) namespacet giver hver tenant en isoleret visning af filsystemet, mens IPC namespaces blokerer for uautoriseret interproceskommunikation.

Remapping af user namespaces neutraliserer muligheder for container escapes: En proces, der tror, den er root (UID 0) inde i sin container, mappes til et uprivilegeret ID (såsom UID 165536) på værtsmaskinen. Hvis et exploit omgår containerens barrierer, lander angriberen i en uprivilegeret shell uden mulighed for at ændre værtskonfigurationer eller få adgang til nabotenanters mapper.


3. Fjern kerneprivilegier og håndhæv skrivebeskyttede filsystemer

Fjern overflødige Linux capabilities, og gør containerens rodfilsystem skrivebeskyttet ved opstart. Standard-containerruntimes tildeler omkring et dusin Linux-kernekapaciteter, hvoraf mange aldrig er nødvendige for webapplikationer. Overflødige kapaciteter giver angribere værktøjer til at manipulere netværksrouting, ændre værtsure eller omgå filadgangskontrol.

Lås runtime-containere fast ved at fjerne alle standardkapaciteter og kun tilføje de absolut nødvendige operationelle flag tilbage:

services:
  tenant_web:
    image: custom-nginx:latest
    read_only: true
    cap_drop:
      - ALL
    cap_add:
      - NET_BIND_SERVICE
    security_opt:
      - no-new-privileges:true
      - seccomp=default.json
    tmpfs:
      - /tmp:rw,noexec,nosuid,size=64m
      - /var/run:rw,noexec,nosuid,size=16m
  • cap_drop: - ALL: Fjerner alle kernekapaciteter fra containerprocessen.
  • cap_add: - NET_BIND_SERVICE: Tillader udtrykkeligt binding til privilegerede porte (som 80 og 443), mens manipulation af rå netværkssockets blokeres.
  • read_only: true: Mounter hele containerens rodfilsystem som skrivebeskyttet (read-only). Angribere kan ikke downloade ondsindede binære filer, ændre PHP-scripts eller modificere webserverens konfigurationsfiler.
  • tmpfs: Allokerer flygtige mapper i hukommelsen til nødvendige midlertidige filer (som /tmp), mens kørsel af binære filer (noexec) og rettighedseskalering (nosuid) blokeres.

Anvend secure computing mode (seccomp)-filtre og sikkerhedsmoduler som AppArmor eller SELinux til at opfange og begrænse systemkald foretaget til den delte værtskerne. Hvis dit team administrerer tilpassede webapplikations-builds, kan du følge vores strukturerede trin til hærdning af Docker-containere på tværs af dine udrulningspipelines.


4. Opdel netværk mellem tenant-miljøer

Deaktivér standard-bridgenetværket, og etabler tilpassede, isolerede softwaredefinerede bridgenetværk for hver tenant-stak. Som standard kan containere på standard Docker-bridgenetværket finde og kommunikere med hinanden via interne IP-adresser. En sårbarhed i én tenants marketing-mikrotjeneste giver mulighed for lateral bevægelse til alle andre interne databaser og applikationer på den pågældende vært.

Isolér tenant-trafik fuldstændigt ved at deklarere uafhængige netværksbridges pr. tenant:

networks:
  tenant_alpha_net:
    driver: bridge
    internal: true
  tenant_beta_net:
    driver: bridge
    internal: true
  public_gateway_net:
    driver: bridge

services:
  alpha_app:
    image: tenant_a_app:latest
    networks:
      - tenant_alpha_net
      - public_gateway_net

  alpha_db:
    image: mariadb:10.11
    networks:
      - tenant_alpha_net

  beta_app:
    image: tenant_b_app:latest
    networks:
      - tenant_beta_net
      - public_gateway_net

  beta_db:
    image: mariadb:10.11
    networks:
      - tenant_beta_net
  • Tenant-isolering: alpha_app og alpha_db kommunikerer udelukkende over tenant_alpha_net. beta_app kan ikke nå alpha_db, selvom en angriber scanner det interne undernet.
  • Internt flag (internal: true): Forhindrer databasenetværkene i at route trafik direkte til det åbne internet og begrænser indgående og udgående adgang udelukkende til applikationscontainere.
  • Reverse Proxy Gateway: Kun ingress-proxyen forbinder til public_gateway_net for at route indgående HTTP/HTTPS-forespørgsler videre til den tiltænkte tenant-container baseret på værtsnavn.

Til miljøer med skærpede krav kan du overveje Dockers Enhanced Container Isolation (ECI)-tilstande eller runtimes som Sysbox, som automatisk håndhæver strengere user namespace-grænser samt virtualiserede /proc- og /sys-filsystemer uden komplekse manuelle netværksskripts.


5. Etabler en objektiv beslutningsmatrice for multi-tenancy

Gør op med antagelsen om, at alle digitale aktiver kræver dedikerede virtuelle maskiner. Marketingledere antager ofte, at VM-isolering på hardwareniveau er den eneste forsvarlige sikkerhedsmodel. I praksis medfører klargøring af dedikerede VM'er til lette landingssider eller kortvarige kampagnesites en enorm omkostningsvækst og driftsmæssig vedligeholdelsesbyrde uden reelt at forbedre webapplikationens sikkerhed.

Brug følgende sammenligningsmatrice til at evaluere kravene til dine workloads og præsentere en rationel udrulningsstrategi for beslutningstagerne:

IsoleringsniveauUnderliggende teknologiSikkerhedsgrænseRessourceoverheadBedste use case
Containere i delt stakNamespaces & Cgroups på et enkelt OSLogisk isolering på OS-niveauMeget lavLandingssider med høj volumen, intern staging, midlertidige kampagnesites
Hærdede containere (ECI / Sysbox)User namespaces, AppArmor, Read-Only rodAvanceret OS-niveau & virtualiseringLavBureauhosting for flere kunder, godkendte portaler, følsomme marketingformularer
Dedikerede virtuelle maskiner (VM'er)Hypervisor hardwarevirtualiseringStrenge hardware-/kerneadskillelserHøjBetalingsbehandling, regulerede HIPAA/PCI-data, kørsel af uverificeret tilpasset kode
Hybrid (containere i dedikerede VM'er)Hærdede containere i tenantspecifikke VM'erFlerlagede hardware- & OS-grænserModerat til højStore enterprise-kunder, der kræver specifik kontraktuel overholdelse

Evaluer hvert projekt ud fra strenge kriterier, før der allokeres infrastrukturbudget:

  1. Datafølsomhed: Gemmer projektet lovregulerede data (f.eks. kreditkortoplysninger eller sundhedsinformation)? Hvis ja, udrul på en dedikeret VM.
  2. Kodeproveniens: Udruller du standardiseret, internt godkendt kode, eller tillader du ukontrollerede tredjeparts-plugins? Standardkode hører hjemme i hærdede containere; utestet tredjepartskode kræver hypervisor-isolering.
  3. Budget og levetid: Til sæsonbestemte landingssider og primære virksomhedswebsteder giver multi-tenancy i hærdede containere maksimal værdi for pengene.

Når du fremlægger infrastrukturplaner for ledelsen, kan du rådføre dig med vores guide om vurdering af, hvornår kunder har brug for dedikerede VM'er for at underbygge dine anbefalinger med klare, niveaubaserede argumenter.


Konklusion: Sådan omsættes sikkerhedskontroller til forretningsmæssig ROI

Sikring af et multi-tenant Docker-miljø kræver ikke et urealistisk stort cloud-budget. Det kræver en grundig, disciplineret anvendelse af styresystemets indbyggede kontrolfunktioner.

Når du gennemgår infrastrukturen med den ikke-tekniske ledelse, bør du rammesætte disse tekniske konfigurationer ud fra tre centrale målepunkter:

  • Omkostningseffektivitet: Multi-tenant containere gør det muligt for teamet at hoste snesevis af marketingsites med en brøkdel af det ressourceaftryk, som individuelle VM'er ville kræve.
  • Oppetidsbeskyttelse: Control groups garanterer, at trafikspidser på en sæsonkampagne ikke forringer ydeevnen på vigtige brand-websites.
  • Begrænsning af skadesomfang: Skrivebeskyttede filsystemer, fjernede rettigheder og isolerede netværksbridges sikrer, at et sikkerhedsbrud på et enkelt site ikke giver adgang til tilstødende kunders databaser eller værtskontroller.

Implementér disse sikkerhedsforanstaltninger systematisk på tværs af dine containerskabeloner. Så leverer du en højtydende og omkostningseffektiv infrastruktur, der opfylder både ingeniørernes sikkerhedskrav og ledelsens budgetrammer.

Sources (5)