Blogg
En trinnvis oppskrift for multi-tenant Docker-isolering
Isoler multi-tenant-arbeidsbelastninger i Docker samtidig som du kontrollerer hostingkostnadene. Lær hvordan du konfigurerer navnerom, cgroups, nettverkspolicyer og kjøretidsherding.
Sammendrag
Å administrere delt infrastruktur for flere klientkampanjer eller interne nettsteder fører ofte til friksjon med ledelsen over hostingkostnader og datasikkerhet. Docker-containere gir et lettvektsalternativ til dedikerte virtuelle maskiner, men standardoppsett etterlater alvorlige isolasjonshull. Ekte multi-tenancy krever bevisste grenser på kjerne-, prosess-, nettverks- og lagringsnivå. Denne guiden gir et praktisk rammeverk i fem trinn for å sikre multi-tenant Docker-distribusjoner ved hjelp av standard isolasjonsprimitiver i Linux. Du vil lære hvordan du håndhever ressurskvoter, begrenser prosessprivilegier, segmenterer containernettverk og velger riktig isolasjonsnivå. Ved å følge denne oppskriften kan du sikre tenant-miljøer og forsvare infrastrukturbudsjetter overfor ikke-tekniske interessenter.
Den ikke-tekniske lederen din kommer inn på kontoret med en utskrift av forrige måneds faktura for nettskyhosting. Kostnadene har økt, men flere høyt prioriterte landingssider opplevde likevel forsinkelsestopper under en samtidig produktlansering. Du blir bedt om å forklare hvorfor markedsføringsmateriell deler servere, om kundedata er eksponert, og hvorfor teamet ikke bare kan opprette en kostbar, dedikert virtuell maskin for hver eneste kampanje.
Å gi hvert digitale nettsted sin egen virtuelle maskin (VM) eliminerer problemer med «støyende naboer», men spiser raskt opp driftsbudsjettet. Standard Docker-distribusjoner løser kostnadsproblemet ved å kjøre flere nettsteder på én enkelt operativsystemkjerne, men standardkonfigurasjoner etterlater farlige sikkerhetshull. Hvis én tenant-applikasjon støter på et løpsk skript eller et sikkerhetsbrudd, er alle andre applikasjoner på samme vert i faresonen.
Bruk denne trinnvise tekniske veiledningen til å konfigurere streng multi-tenant-isolering i Docker. Iverksett disse fem operasjonelle trinnene for å beskytte systemstabiliteten, isolere leietakerdata og oversette tekniske infrastrukturvalg til tydelig forretningsverdi for ledelsen.
1. Håndhev harde ressurskvoter med kontrollgrupper (cgroups)
Sett eksplisitte grenser for CPU, minne og disk-I/O på hver enkelt container umiddelbart. Når flere leietakere deler en underliggende vert, konkurrerer ubegrensede containere om systemressursene. Én løpsk databasespørring eller en kampanje med høy trafikk kan tømme hele minnepoolen på verten, noe som utløser Linux Out-Of-Memory (OOM) killer som avslutter vilkårlige systemprosesser.
Linux-kontrollgrupper (cgroups) styrer hvor mye datakapasitet en container kan bruke. Definer disse grensene direkte i distribusjonsfilene dine:
services:
tenant_app:
image: nginx:alpine
deploy:
resources:
limits:
cpus: '0.75'
memory: 512M
reservations:
cpus: '0.25'
memory: 256M
- Minnegrenser (
limits.memory): Etablerer et hardt tak. Hvis containeren overstiger 512 megabyte, terminerer kjernen prosesser inne i den containeren uten at det går ut over naboleietakere. - Minrereservasjoner (
reservations.memory): Garanterer en grunnleggende minnetildeling slik at applikasjoner med lav trafikk forblir responsive. - CPU-grenser (
limits.cpus): Begrenser containeren til en maksimal brøkdel av tilgjengelige CPU-kjerner, noe som forhindrer at én enkelt leietaker sulteforer systemet for prosessorkraft.
Når du skal rettferdiggjøre denne arkitekturen overfor ikke-tekniske ledere, kan du forklare cgroups som automatiserte digitale undermålere. Akkurat som leietakere i et kontorbygg betaler for sitt eget strømforbruk i stedet for å overbelaste hovedsikringen, sørger cgroups for at én trafikkert landingsside aldri slår ut en annen klients lead-genereringsportal. For et dypere innblikk i arkitektoniske avveininger, se vår guide om å utforme en multi-tenant-arkitektur.
2. Segmenter tenant-prosesser med navnerom og ikke-root-brukere
Kjør aldri containerprosesser som standard root-bruker. I standard Linux-containermiljøer tilsvarer root inne i en container root på den underliggende vertskjernen, med mindre det eksplisitt er remappet. Hvis en angriper kompromitterer en nettapplikasjon som kjører som root, får de opphøyde rettigheter over den delte verten.
Håndhev prosessisolering gjennom brukernavnerom (user namespaces) og eksplisitt kjøring uten root-tilgang:
- Definer uprivilegerte kjøretidsbrukere: Opprett dedikerte tjenestebrukere med lave rettigheter i Dockerfilene dine.
FROM php:8.2-fpm-alpine RUN addgroup -g 10001 tenantgroup && \ adduser -u 10001 -D -G tenantgroup tenantuser USER tenantuser - Aktiver brukernavnerom (userns-remap): Konfigurer Docker-demonen (
/etc/docker/daemon.json) til å remappe container-bruker-ID-er til et uprivilegert område på verten.{ "userns-remap": "default" }
Linux-navnerom deler opp systemsikten. Prosess-ID-navnerommet (PID) sørger for at leietaker A ikke kan se, sende signaler til eller avslutte prosesser som tilhører leietaker B. Monteringsnavnerommet (MNT) gir hver leietaker en isolert visning av filsystemet, mens IPC-navnerom blokkerer uautorisert kommunikasjon mellom prosesser.
Å remappe brukernavnerom nøytraliserer rømningsveier fra containere: En prosess som tror den er root (UID 0) inne i containeren sin, blir tilordnet en uprivilegert ID (som UID 165536) på vertsmaskinen. Hvis et angrep bryter gjennom containerbarrierene, havner angriperen i et uprivilegert skall uten mulighet til å endre vertskonfigurasjoner eller få tilgang til naboleietakeres mapper.
3. Fjern kjerne-privilegier og håndhev skrivebeskyttede filsystemer
Fjern overflødige Linux capabilities og gjør containerens rotfilsystem skrivebeskyttet ved oppstart. Standard containerkjøretider gir rundt et dusin Linux-kjernefunksjoner, hvorav mange aldri er nødvendige for webapplikasjoner. Ekstra kapabiliteter gir angripere verktøy til å manipulere nettverksruting, endre vertens klokke eller omgå tilgangskontroller for filer.
Lås ned kjørende containere ved å fjerne alle standardrettigheter og kun legge tilbake helt nødvendige operasjonelle flagg:
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 kjerne-kapabiliteter fra containerprosessen.cap_add: - NET_BIND_SERVICE: Tillater eksplisitt binding til privilegerte porter (som 80 og 443), samtidig som rå manipulering av nettverkssockets blokkeres.read_only: true: Monterer hele containerens rotfilsystem som skrivebeskyttet. Angripere kan ikke laste ned skadelige binærfiler, endre PHP-skript eller modifisere konfigurasjonsfiler for webserveren.tmpfs: Tildeler flyktige mapper i minnet for nødvendige midlertidige filer (som/tmp), samtidig som kjøring av binærfiler (noexec) og eskalering av privilegier (nosuid) blokkeres.
Bruk secure computing mode-filtre (seccomp) og sikkerhetsmoduler som AppArmor eller SELinux for å fange opp og begrense systemkall mot den delte vertskjernen. Hvis teamet ditt administrerer egendefinerte webapplikasjonsbygg, kan du følge våre strukturerte trinn for herding av Docker-containere i distribusjonspipelinene dine.
4. Partisjoner nettverk mellom leietakermiljøer
Deaktiver standard bridge-nettverk og opprett egendefinerte, isolerte programvaredefinerte bridge-nettverk for hver enkelt leietakerstabel. Som standard kan containere plassert på standard Docker bridge-nettverk oppdage og kommunisere med hverandre via interne IP-adresser. En sårbarhet i én leietakers mikrotjeneste gir mulighet for lateral forflytning til alle andre interne databaser og applikasjoner på den samme verten.
Isoler leietakertrafikk fullstendig ved å deklarere uavhengige nettverksbroer per leietaker:
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
- Leietakerisolering:
alpha_appogalpha_dbkommuniserer utelukkende overtenant_alpha_net.beta_appkan ikke nåalpha_db, selv om en angriper skanner det interne subnettet. - Internt flagg (
internal: true): Hindrer databasenettverkene i å rute trafikk direkte til internett, og begrenser innkommende og utgående tilgang utelukkende til applikasjonscontainere. - Reverse Proxy Gateway: Kun ingress-proxyen kobler seg til
public_gateway_netfor å rute innkommende HTTP/HTTPS-forespørsler til den angitte tenant-containeren basert på vertsnavn.
For mer avanserte miljøer bør du vurdere Dockers Enhanced Container Isolation (ECI)-moduser eller kjøretidsmiljøer som Sysbox, som automatisk håndhever strengere brukernavnerom-grenser og virtualiserte /proc- og /sys-filsystemer uten behov for komplekse manuelle nettverksskript.
5. Etabler en objektiv beslutningsmatrise for multi-tenancy
Utfordre antagelsen om at alle digitale ressurser krever dedikerte virtuelle maskiner. Markedsledere antar ofte at maskinvareisolering med VM-er er den eneste forsvarlige sikkerhetsmodellen. I praksis fører klargjøring av dedikerte VM-er for lette landingssider eller kortvarige kampanjesider til massiv kostnadsøkning og unødvendig vedlikeholdsarbeid, uten at det forbedrer webapplikasjonssikkerheten.
Bruk følgende sammenligningsmatrise for å evaluere arbeidsbelastningskrav og presentere en rasjonell strategi for beslutningstakere:
| Isolasjonsnivå | Underliggende teknologi | Sikkerhetsgrense | Ressursforbruk | Beste bruksområde |
|---|---|---|---|---|
| Delt stabel (containere) | Navnerom og cgroups på ett OS | Logisk isolasjon på OS-nivå | Veldig lavt | Høyvolum-landingssider, internt staging-miljø, midlertidige kampanjesider |
| Herdede containere (ECI / Sysbox) | Brukernavnerom, AppArmor, skrivebeskyttet rot | Avansert OS-nivå og virtualisering | Lavt | Hosting for byråer med flere klienter, innloggede portaler, sensitive markedsføringsskjemaer |
| Dedikerte virtuelle maskiner (VM-er) | Hypervisor maskinvarevirtualisering | Streng maskinvare-/kjerneadskillelse | Høyt | Betalingsbehandling, regulerte HIPAA/PCI-data, kjøring av uverifisert kode |
| Hybrid (containere i dedikerte VM-er) | Herdede containere i leietakerspesifikke VM-er | Flerlags maskinvare- og OS-grenser | Moderat til høyt | Krevende enterprise-klienter med krav om dedikert samsvar i kontrakter |
Evaluer hvert prosjekt mot strenge kriterier før du allokerer infrastrukturbudsjett:
- Datasensitivitet: Lagrer prosjektet lovregulerte data (f.eks. kredittkortopplysninger eller helseopplysninger)? Hvis ja, distribuer til en dedikert VM.
- Kodeopprinnelse: Distribuerer du standardisert, team-revidert kode, eller tillater du ukontrollerte tredjeparts-plugins? Standardkode hører hjemme i herdede containere; utestet tredjepartskode krever hypervisor-isolering.
- Budsjett og levetid: For sesongbaserte landingssider og sentrale bedriftsnettsteder gir multi-tenancy med herdede containere maksimal ytelse per krone.
Når du presenterer infrastrukturplaner for ledelsen, kan du konsultere vår veiledning om vurdering av når kunder trenger dedikerte VM-er for å underbygge anbefalingene dine med klare, nivåbaserte argumenter.
Konklusjon: Gjør sikkerhetskontroller om til forretningsmessig ROI
Å sikre et multi-tenant Docker-miljø krever ikke et enormt nettskybudsjett for bedrifter. Det krever grundig og disiplinert bruk av operativsystemets innebygde kontroller.
Når du gjennomgår infrastrukturen med ikke-teknisk ledelse, bør du vinkle disse tekniske konfigurasjonene rundt tre nøkkelberegninger:
- Kostnadseffektivitet: Multi-tenant-containere lar teamet drifte dusinvis av markedsføringssider på en brøkdel av ressursene som individuelle VM-er ville krevd.
- Oppetidsbeskyttelse: Kontrollgrupper (cgroups) garanterer at trafikkøkninger på en sesongkampanje ikke forringer ytelsen til kjernevirksomhetens nettsteder.
- Begrensning av skadeomfang: Skrivebeskyttede filsystemer, fjernede rettigheter og isolerte nettverksbroer sikrer at et sikkerhetsbrudd på ett enkelt nettsted ikke kan nå tilstøtende klientdatabaser eller vertskontroller.
Implementer disse sikkerhetsmekanismene systematisk i containermalene dine. Da leverer du høyytende, kostnadseffektiv infrastruktur som tilfredsstiller både tekniske sikkerhetsstandarder og ledelsens budsjettrammer.

