İçin docker-compose
konteynerler arasında kullanan kabul çözümü özel bir ağ oluşturmak için köprü ağ kullanarak docker0
yapar değil iş kaplardan çıkış arayüzü olmadığı için docker0
ama bunun yerine rasgele oluşturulmuş bir arayüz kimliği gibi açıklanmıştır:
$ ifconfig
br-02d7f5ba5a51: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.32.1 netmask 255.255.240.0 broadcast 192.168.47.255
Ne yazık ki, rasgele id öngörülebilir değildir ve oluşturma ağını yeniden oluşturmak zorunda kaldığında değişecektir (örneğin bir ana bilgisayar yeniden başlatıldığında). Benim çözümüm, bilinen bir alt ağda özel ağ oluşturmak ve iptables
bu aralığı kabul edecek şekilde yapılandırmaktır :
Dosya snippet'ini oluştur:
version: "3.7"
services:
mongodb:
image: mongo:4.2.2
networks:
- mynet
# rest of service config and other services removed for clarity
networks:
mynet:
name: mynet
ipam:
driver: default
config:
- subnet: "192.168.32.0/20"
Ortamınız gerektiriyorsa alt ağı değiştirebilirsiniz. Tuşlarını 192.168.32.0/20
kullanarak keyfi olarak seçtimdocker network inspect
Varsayılan olarak nelerin yaratıldığını görmek için .
iptables
Ana bilgisayarda kaynak olarak özel alt ağa izin verecek şekilde yapılandırın :
$ iptables -I INPUT 1 -s 192.168.32.0/20 -j ACCEPT
Bu mümkün olan en basit iptables
kuraldır. Hedef kısıtlama gibi başka kısıtlamalar da ekleyebilirsiniz. Çalıştığınız için mutlu olduğunuzda iptables kurallarınızı devam ettirmeyi unutmayın.
Bu yaklaşım, tekrarlanabilir ve dolayısıyla otomatikleştirilebilir olma avantajına sahiptir. Oluşturma dosyamı template
değişken değiştirme ile dağıtmak için ansible'ın modülünü kullandım ve ardından sırasıyla güvenlik duvarı kurallarını yapılandırmak ve sürdürmek için iptables
ve shell
modüllerini kullanıyorum .