Merhaba;

Bölüm 5’de Docker’ın kullandığı network türlerinden bahsetmiştik. Docker’ın kullandığı varsayılan network’ün “bridge network” olduğunu belirtmiştik.  (Şekil 1).

Şekil 1. Varsayılan docker network türü.

Docker’ın kullandığı network türlerini aşağıdaki şekilde sıralayabileceğimizden bahsetmiştik.

“Closed Network”/”None Network”

“Bridge Network”

“Host Network”

 

Sistem üzerinde “docker network ls” komutuyla “network” türlerini aşağıdaki şekilde görebileceğimizden yine bahsetmiştik.

Bu network türlerini biraz daha detaylı inceleyelim.
“None Network” dediğimizde, dışarıya erişimi olmayan kapalı bir “container” yapısından bahsediyoruz. “–net none” opsiyonuyla, “none network” özelliğinde olan bir “container” oluşturalım. “docker run -d –net none busybox sleep 1000” komutu ile docker’ı oluşturalım ve “docker exec -it container_id /bin/ash” ile “shell” çalıştırıp, Google’ın public DNS IP’si “8.8.8.8”i pingleyelim. Gördüğünüz gibi “container” dışarı çıkamıyor. “Container” üzerinde “ifconfig” komutunu çalıştırdığımızda “loopback”den başka bir network arabirimi görmüyoruz.

“None Network” “container” ile maksimum seviyede network izolasyonu sağlanırken dış dünyaya bağlantı kurulamamaktadır.

“Bridge network”’de “container” lar, “loopback” ve “private” network arabirimine ulaşır.  Aynı “bridge network” te olan “container” lar birbirleriyle haberleşebilir. “Bridge network” te dış network’e ulaşmak adına, network izolasyonundan belli bir derece feragat edilmektedir. Özellikle tek “host” üzerinde küçük ölçekli “network” yapılandırmaları için uygun bir yöntemdir.

“Host” üzerinde “docker network ls” ile “network” türlerini görüntüleyelim.

“docker network inspect bridge” komutuyla tanımlayabileceğimiz “container” sayısını komut ile gelen subnet kısmını irdeleyerek belirleyebiliriz.

“docker run –d –name container_1 busybox sleep 1000”  komutuyla “container” oluşturup “docker exec -it container_1 ifconfig” çıktısını inceleyelim. “container” ın “172.17.0.2” IP’sini aldığını görüyoruz. Aynı şekilde “container_3” oluşturup IP’sine baktığımızda IP’nin 172.17.0.3 olduğunu görüyoruz. Komut silsilesi aşağıda incelemenize sunuldu.

Komutlar için fazla beklediğim için container_1 ve container_2 sonlanmıştı. Tekrar “docker restart container_1”  ve “docker restart container_2” ile “container” ları yeniden başlattım. “container_1” üzerinden container_3’e ait olan “172.17.0.3” no’lu IP’yi ping’ledik.

Bu şekilde farklı “bridge network” lere ulaşamayız. “my_bridge_network” isimli bir “bridge” oluşturalım. Aşağıdaki komut ile network türleri içerisinde yeni oluşturulan bu network’ün görünür olduğunu görebiliriz.

“my_bridge_network”’ün subnet’ine bakalım. Subnet’in 172.19.0.0 olduğu görülüyor.

“my_bridge_network” üzerinde “container_3” oluşturalım.

Container_3’ün IP’sinin 172.19.0.2 olduğunu görüyoruz. Container_3 üzerinden, 172.17.0.2 IP’yi ping’leyelim. Aşağıdan görüldüğü gibi “ping” leyemiyoruz. Yapmamız gereken bir şey var. ☺

“docker network connect bridge container_3” komutu sonrasında “container_3” de 172.17.0.4 IP’sinin oluştuğunu görüyoruz.

Bu işlem sonrasında container_3’ün, 172.17.0.2 no’lu IP’yi ping’lediğini görüyoruz.

İlgili “network” ü “disconnect” yapabiliriz. “disconnect” işleminden sonra, container_3’de ifconfig komutunda artık 172.17 ile başlayan IP’yi aşağıdada görüldüğü gibi görmüyoruz.

En korumasız network türü ise “host network” dür. Container, hostun tüm network arabirimlerini görür. Makul bir neden olmadan kullanılması kesinlikle önerilmez.

Komut çıktısının daha devamı var ama komut çıktısının bu kadarını ekledim. Aşağıda görüldüğü gibi “host” un ifşa ettiği tüm IP’lere sistem erişebilmektedir. Docker bridge ve iptable port mapping kullanmadığı için daha performanslı olacaktır ama getirdiği güvenlik açığı çok fazladır.

Buraya kadar bahsettiğimiz network türleri bir host üzerinde desteklenir. Eğer birden fazla host söz konusu ise “overlay network driver” kullanmak gerekir. Yani  “docker engine”, “overlay network driver” üzerinden “multi-host network” ü destekler.  “overlay network”, oluşturulmadan önce bazı ön koşulların sağlanması gereklidir. “Docker engine” in swarm modda çalışması gerekir veya “key-value store” servisine ihtiyaç duyar. Bölüm 7’de “overlay network” den daha detaylı bahsedeceğim.

 

Asiye Yiğit 11.07.2017