İçin docker-composekonteynerler arasında kullanan kabul çözümü özel bir ağ oluşturmak için köprü ağ kullanarak docker0yapar değil iş kaplardan çıkış arayüzü olmadığı için docker0ama 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 iptablesbu 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/20kullanarak keyfi olarak seçtimdocker network inspectVarsayılan olarak nelerin yaratıldığını görmek için .
iptablesAna 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 iptableskuraldı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ı templatedeğ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 iptablesve shellmodüllerini kullanıyorum .