Điểm:2

Docker: Cô lập các ngăn xếp soạn thảo ở cấp độ mạng, đồng thời cho phép một dịch vụ duy nhất được ủy quyền ngược bởi Traefik

lá cờ de

Tôi đang cố gắng bảo vệ các thùng chứa trên phòng thí nghiệm tại nhà của mình.

Mục tiêu chính là:

  • cô lập nginxAnginxB, vì vậy họ không thể nói chuyện với nhau thông qua 172.17.0.1 (ví dụ: ngăn ngừa nginxA từ đạt nginxB qua 172.17.0.1:5001)
  • cô lập nginxAnginxB từ localhost, khiến chúng có thể truy cập độc quyền qua traefik
  • cho phép nginxA nói chuyện với nginxA_DB, nằm trong cùng một ngăn xếp, nhưng không cho phép các vùng chứa khác cũng như traefik nói chuyện với nginxA_DB

Mỗi ngăn xếp docker có một dịch vụ nginx/apache với cổng của nó được hiển thị trong docker-compose theo cách sau:

docker-compose-nginxA.yml:

mạng:
  nội bộ:
    tôi:
      cấu hình:
        - mạng con: 10.0.0.0/29

...BÉP...

nginxA:
  mạng:
    nội bộ:
      ipv4_address: 10.0.0.2
  cổng:
    - "172.17.0.1:5000:80"

docker-compose-nginxB.yml:

mạng:
  nội bộ:
    tôi:
      cấu hình:
        - mạng con: 10.0.0.8/29

...BÉP...

nginxB:
  mạng:
    nội bộ:
      ipv4_address: 10.0.0.10
  cổng:
    - "172.17.0.1:5001:80"

Làm cho các dịch vụ này chỉ có thể truy cập thông qua máy chủ cục bộ (172.17.0.1) hoặc traefik,

Traefik cũng trên cùng một máy với cấu hình sau:

http:

  bộ định tuyến:

    nginxA:
     các điểm nhập cảnh:
       - mạng
     dịch vụ: nginxA

    nginxB:
     các điểm nhập cảnh:
       - mạng
     dịch vụ: nginxB


...BÉP...

  dịch vụ:

    nginxA:
      cân bằng tải:
        may chủ:
          - địa chỉ: http://172.17.0.1:5000

    nginxB:
      cân bằng tải:
        may chủ:
          - địa chỉ: http://172.17.0.1:5001

Một ý tưởng là kết nối tất cả các thùng chứa trong cùng một /24 mạng với traefik, mà không để lộ bất kỳ cổng nào thông qua soạn thảo, nhưng một mạng traefik duy nhất sẽ không cách ly các vùng chứa với nhau, chỉ từ bên ngoài.

Một ý tưởng khác là tạo ra một /31 mạng cho mỗi vùng chứa và hợp nhất tất cả traefik của mạng, nhưng tôi không chắc liệu điều này có thực hiện việc cách ly như dự kiến ​​hay không. ví dụ.

nginxA:
  mạng:
    nội bộ:
      ipv4_address: 10.0.0.2 # /29
    nginxA-traefik:
      ipv4_address: 10.50.0.1 #/31

traefik:
  mạng:
    nginxA-traefik:
    nginxB-traefik:
  ...

Cảm ơn đã đọc đến đây! Bạn có bất cứ ý tưởng làm thế nào điều này có thể được thực hiện?

Điểm:0
lá cờ es

Bạn đang đi đúng hướng. Như trong ví dụ trước của bạn, bạn muốn tạo một mạng riêng cho từng đường dẫn liên lạc mà bạn muốn giữa hai vùng chứa. Đây đều có thể là /31của hoặc /29s hoặc bất cứ thứ gì bạn muốn miễn là các mạng con khác nhau.

Ví dụ:

  • nginxA-traefik Đang kết nối nginxAtraefik
  • nginxB-traefik Đang kết nối nginxBtraefik
  • nginxA-nginxA_DB Đang kết nối nginxAnginxA_DB

Bạn không nên thực hiện bất kỳ ánh xạ cổng nào trên nginx container kể từ traefik sẽ liên lạc trực tiếp với họ qua mạng docker. Điều này sẽ cho phép mỗi nginx thùng chứa để giao tiếp với traefik (và ngược lại) nhưng chúng không thể giao tiếp với nhau.


Tuy nhiên! Điều này không mở rộng quy mô tốt vì bạn sẽ phải tạo/quản lý một mạng cho mọi dịch vụ được kết nối với traefik, điều này sẽ nhanh chóng trở nên khó sử dụng. Cách tốt hơn là tạo một mạng duy nhất cho tất cả các dịch vụ được liên kết với traefik (ví dụ: traefik_public), kết nối tất cả các vùng chứa dịch vụ của bạn (ví dụ: nginx_A, nginx_B và bất kỳ thứ gì khác) vào mạng này và thêm một số quy tắc vào iptables để chỉ cho phép lưu lượng truy cập đến/từ traefik.

Tôi đã viết một tường lửa vùng chứa khá đơn giản sẽ xử lý iptables quy tắc cho bạn tự động: https://github.com/kaysond/trafficjam Bạn chỉ cần chỉ định mạng mà bạn muốn bảo vệ (traefik_public) và vùng chứa để cho phép giao tiếp đến/từ (ví dụ: tổ tiên = traefik: mới nhất) và nó sẽ lo phần còn lại!

st00nks avatar
lá cờ de
Bạn là một nhà vô địch thực sự, tôi nghĩ phương pháp của bạn tốt hơn giải pháp của tôi (cuối cùng tôi đã tạo các mạng riêng lẻ cho 20 dịch vụ). Tôi sẽ kiểm tra và có thể định dạng lại mọi thứ. Cảm ơn bạn!

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.