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 nginxA và nginxB, 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 nginxA và nginxB 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?