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:
- 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 - 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_appogalpha_dbkommunikerer udelukkende overtenant_alpha_net.beta_appkan 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_netfor 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:
| Isoleringsniveau | Underliggende teknologi | Sikkerhedsgrænse | Ressourceoverhead | Bedste use case |
|---|---|---|---|---|
| Containere i delt stak | Namespaces & Cgroups på et enkelt OS | Logisk isolering på OS-niveau | Meget lav | Landingssider med høj volumen, intern staging, midlertidige kampagnesites |
| Hærdede containere (ECI / Sysbox) | User namespaces, AppArmor, Read-Only rod | Avanceret OS-niveau & virtualisering | Lav | Bureauhosting for flere kunder, godkendte portaler, følsomme marketingformularer |
| Dedikerede virtuelle maskiner (VM'er) | Hypervisor hardwarevirtualisering | Strenge hardware-/kerneadskillelser | Høj | Betalingsbehandling, regulerede HIPAA/PCI-data, kørsel af uverificeret tilpasset kode |
| Hybrid (containere i dedikerede VM'er) | Hærdede containere i tenantspecifikke VM'er | Flerlagede hardware- & OS-grænser | Moderat til høj | Store enterprise-kunder, der kræver specifik kontraktuel overholdelse |
Evaluer hvert projekt ud fra strenge kriterier, før der allokeres infrastrukturbudget:
- Datafølsomhed: Gemmer projektet lovregulerede data (f.eks. kreditkortoplysninger eller sundhedsinformation)? Hvis ja, udrul på en dedikeret VM.
- 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.
- 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.

