Score:2

นักเทียบท่า: แยกสแตกการเขียนในระดับเครือข่าย ในขณะที่อนุญาตให้ Traefik บริการเดียวย้อนกลับพร็อกซี

ธง de

ฉันกำลังพยายามยึดคอนเทนเนอร์บนโฮมแล็บ

เป้าหมายหลักคือ:

  • แยก nginxA และ nginxBจึงไม่สามารถพูดคุยกันผ่านทาง 172.17.0.1 (เช่น ป้องกัน nginxA จากการเข้าถึง nginxB ทาง 172.17.0.1:5001)
  • แยก nginxA และ nginxB จาก localhost ทำให้สามารถเข้าถึงได้ผ่าน traefik เท่านั้น
  • อนุญาต nginxA เพื่อพูดคุย nginxA_DBซึ่งอยู่ในสแต็กเดียวกัน แต่ไม่อนุญาตให้คอนเทนเนอร์อื่นหรือ traefik พูดคุยด้วย nginxA_DB

แต่ละ docker stack มีบริการ nginx/apache โดยมีพอร์ตที่เปิดเผยใน docker-compose ในลักษณะต่อไปนี้:

นักเทียบท่า-compose-nginxA.yml:

เครือข่าย:
  ภายใน:
    ไอแพม:
      การกำหนดค่า:
        - เครือข่ายย่อย: 10.0.0.0/29

...สนิป...

nginxA:
  เครือข่าย:
    ภายใน:
      ipv4_address: 10.0.0.2
  พอร์ต:
    - "172.17.0.1:5000:80"

นักเทียบท่าเขียน nginxB.yml:

เครือข่าย:
  ภายใน:
    ไอแพม:
      การกำหนดค่า:
        - เครือข่ายย่อย: 10.0.0.8/29

...สนิป...

nginxB:
  เครือข่าย:
    ภายใน:
      ipv4_address: 10.0.0.10
  พอร์ต:
    - "172.17.0.1:5001:80"

ทำให้บริการเหล่านี้เข้าถึงได้ทาง โลคัลโฮสต์ (172.17.0.1) หรือ เทรฟิค,

Traefik อยู่ในเครื่องเดียวกันด้วยการกำหนดค่าต่อไปนี้:

http:

  เราเตอร์:

    nginxA:
     จุดเข้า:
       - เว็บ
     บริการ: nginxA

    nginxB:
     จุดเข้า:
       - เว็บ
     บริการ: nginxB


...สนิป...

  บริการ:

    nginxA:
      โหลดบาลานเซอร์:
        เซิร์ฟเวอร์:
          - url: http://172.17.0.1:5000

    nginxB:
      โหลดบาลานเซอร์:
        เซิร์ฟเวอร์:
          - url: http://172.17.0.1:5001

มีแนวคิดที่จะเชื่อมต่อคอนเทนเนอร์ทั้งหมดเข้าด้วยกัน /24 เครือข่ายด้วย traefik โดยไม่เปิดเผยพอร์ตใด ๆ ผ่านการเขียน แต่เครือข่าย traefik เดียวจะไม่แยกคอนเทนเนอร์ออกจากกัน แต่จะแยกจากภายนอกเท่านั้น

อีกแนวคิดหนึ่งคือการสร้างไฟล์ /31 เครือข่ายสำหรับแต่ละคอนเทนเนอร์และรวม traefik เครือข่ายทั้งหมด แต่ฉันไม่แน่ใจว่าสิ่งนี้จะทำการแยกตามที่ตั้งใจไว้หรือไม่ เช่น.

nginxA:
  เครือข่าย:
    ภายใน:
      ipv4_address: 10.0.0.2 # /29
    nginxA-traefik:
      ipv4_address: 10.50.0.1 # /31

เทรฟิค:
  เครือข่าย:
    nginxA-traefik:
    nginxB-traefik:
  ...

ขอบคุณที่อ่านมาถึงตรงนี้! คุณมีความคิดใด ๆ ว่าสามารถทำได้หรือไม่?

Score:0
ธง es

คุณมาถูกทางแล้ว ในตัวอย่างสุดท้าย คุณต้องการสร้างเครือข่ายแยกต่างหากสำหรับแต่ละเส้นทางการสื่อสารที่คุณต้องการระหว่างสองคอนเทนเนอร์ เหล่านี้ได้ทั้งหมด /31หรือ /29หรืออะไรก็ตามที่คุณต้องการ ตราบใดที่ซับเน็ตต่างกัน

ตัวอย่าง:

  • nginxA-traefik กำลังเชื่อมต่อ nginxA และ เทรฟิค
  • nginxB-traefik กำลังเชื่อมต่อ nginxB และ เทรฟิค
  • nginxA-nginxA_DB กำลังเชื่อมต่อ nginxA และ nginxA_DB

คุณไม่ควรทำการแมปพอร์ตใดๆ บน จิงซ์ ตู้คอนเทนเนอร์ตั้งแต่ เทรฟิค จะสื่อสารกับพวกเขาโดยตรงผ่านเครือข่ายนักเทียบท่า ซึ่งจะทำให้แต่ละ จิงซ์ คอนเทนเนอร์ที่จะสื่อสารกับ เทรฟิค (และในทางกลับกัน) แต่ไม่สามารถสื่อสารกันได้


อย่างไรก็ตาม! สิ่งนี้ปรับขนาดได้ไม่ดีนักเพราะคุณจะต้องสร้าง/จัดการเครือข่ายเดียวสำหรับทุกบริการที่เชื่อมต่อกับ traefik ซึ่งจะใช้งานไม่ได้อย่างรวดเร็ว วิธีที่ดีกว่าคือการสร้างเครือข่ายเดียวสำหรับบริการที่เชื่อมโยงกับ Traefik ทั้งหมด (เช่น traefik_public) เชื่อมต่อคอนเทนเนอร์บริการทั้งหมดของคุณ (เช่น nginx_A, nginx_B และอื่น ๆ ) กับเครือข่ายนี้ และเพิ่มกฎบางอย่างเข้าไป iptables เพื่ออนุญาตเฉพาะการจราจรเข้า/ออก เทรฟิค.

ฉันเขียนคอนเทนเนอร์ไฟร์วอลล์ที่เรียบง่ายซึ่งจะดูแล iptables กฎสำหรับคุณโดยอัตโนมัติ: https://github.com/kaysond/trafficjam คุณเพียงแค่ระบุเครือข่ายที่คุณต้องการปกป้อง (traefik_public) และคอนเทนเนอร์เพื่อให้การสื่อสารไปยัง/จาก (เช่น บรรพบุรุษ = traefik: ล่าสุด) และดูแลส่วนที่เหลือ!

st00nks avatar
de flag
คุณคือแชมป์ตัวจริง ฉันคิดว่าวิธีการของคุณดีกว่าวิธีแก้ปัญหาของฉัน (ฉันลงเอยด้วยการสร้างเครือข่ายเดี่ยวสำหรับบริการ 20 รายการ) ฉันจะตรวจสอบและอาจฟอร์แมตใหม่ทั้งหมด ขอขอบคุณ!

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา