Puncte:2

Docker: izolați stivele de compunere la nivel de rețea, permițând în același timp redirecționarea proxy inversă a unui singur serviciu de către Traefik

drapel de

Încerc să asigur containerele în laboratorul meu de acasă.

Scopul principal este:

  • izolare nginxA și nginxB, așa că nu pot vorbi între ei prin intermediul 172.17.0.1 (de ex. prevenirea nginxA de la a ajunge nginxB prin intermediul 172.17.0.1:5001)
  • izolare nginxA și nginxB de la localhost, făcându-le accesibile exclusiv prin traefik
  • Permițând nginxA a vorbi cu nginxA_DB, care sunt în aceeași stivă, dar fără a permite altor containere sau traefik să vorbească nginxA_DB

Fiecare stivă docker are un serviciu nginx/apache cu portul expus în docker-compose în următorul mod:

docker-compose-nginxA.yml:

retele:
  intern:
    ipam:
      config:
        - subrețea: 10.0.0.0/29

...CROITOR...

nginxA:
  retele:
    intern:
      adresa_ipv4: 10.0.0.2
  porturi:
    - „172.17.0.1:5000:80”

docker-compose-nginxB.yml:

retele:
  intern:
    ipam:
      config:
        - subrețea: 10.0.0.8/29

...CROITOR...

nginxB:
  retele:
    intern:
      adresa_ipv4: 10.0.0.10
  porturi:
    - „172.17.0.1:5001:80”

Făcând aceste servicii accesibile numai prin gazdă locală (172.17.0.1) sau traefik,

Traefik fiind, de asemenea, pe aceeași mașină cu următoarea configurație:

http:

  routere:

    nginxA:
     puncte de intrare:
       - web
     serviciu: nginxA

    nginxB:
     puncte de intrare:
       - web
     serviciu: nginxB


...CROITOR...

  Servicii:

    nginxA:
      echilibrarea greutății:
        servere:
          - url: http://172.17.0.1:5000

    nginxB:
      echilibrarea greutății:
        servere:
          - url: http://172.17.0.1:5001

O idee a fost să conectați toate containerele într-un același /24 rețea cu traefik, fără a expune niciun port prin compose, dar o singură rețea traefik nu ar izola containerele unul de celălalt, ci doar din exterior.

O altă idee a fost crearea unui /31 rețeaua pentru fiecare container și îmbina toate rețelele traefik, dar nu sunt sigur dacă acest lucru va face izolarea conform intenției. de exemplu.

nginxA:
  retele:
    intern:
      adresa_ipv4: 10.0.0.2 # /29
    nginxA-traefik:
      adresa_ipv4: 10.50.0.1 # /31

traefik:
  retele:
    nginxA-traefik:
    nginxB-traefik:
  ...

Mulțumesc că ai citit până aici! Aveți vreo idee cum se poate face acest lucru?

Puncte:0
drapel es

Ești pe drumul cel bun. Ca și în ultimul exemplu, doriți să creați o rețea separată pentru fiecare cale de comunicație pe care o doriți între două containere. Toate acestea pot fi /31lui sau /29s sau orice doriți, atâta timp cât subrețelele sunt diferite.

Exemplu:

  • nginxA-traefik conectarea nginxA și traefik
  • nginxB-traefik conectarea nginxB și traefik
  • nginxA-nginxA_DB conectarea nginxA și nginxA_DB

Nu ar trebui să faceți nicio mapare de porturi pe nginx containere din moment ce traefik va comunica cu ei direct prin rețelele docker. Acest lucru va permite fiecăruia nginx container cu care să comunicați traefik (și invers) dar nu pot comunica între ei.


In orice caz! Acest lucru nu se scalează foarte bine, deoarece va trebui să creați/gestionați o rețea pentru fiecare serviciu conectat la traefik, care va deveni rapid greoi. O modalitate mai bună ar fi crearea unei rețele unice pentru toate serviciile legate de traefik (de ex. traefik_public), conectați toate containerele dvs. de service (de ex. nginx_A, nginx_B și orice altceva) la această rețea și adăugați câteva reguli la iptables pentru a permite numai traficul către/de la traefik.

Am scris un firewall container destul de simplu care se va ocupa de iptables reguli pentru tine automat: https://github.com/kaysond/trafficjam Trebuie doar să specificați rețeaua pe care doriți să o protejați (traefik_public) și containerul pentru a permite comunicarea către/de la (de ex. ancestor=traefik:latest) și de restul se ocupă!

st00nks avatar
drapel de
Ești un adevărat campion, cred că metoda ta este mult mai bună decât soluția mea (am ajuns să creez rețele individuale pentru 20 de servicii). Îl voi verifica și, eventual, o să reformatez totul. Mulțumesc!

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.