Docker gelişmiş ağ yapılandırması Bağlantı noktası eşlemesinden özel köprüye

Genel Bakış

Bugün bazı gelişmiş ağ yapılandırmasını ve Docker seçeneklerini tanıtacağız.

Docker başladığında, ana bilgisayarda otomatik olarak bir docker0 sanal köprüsü oluşturacaktır, bu aslında bir Linux köprüsüdür ve bu bir yazılım anahtarı olarak anlaşılabilir. Kendisine monte edilmiş ağ portları arasında ilerleyecektir.

Aynı zamanda Docker, yerel olarak kullanılmayan bir özel ağ segmentindeki (RFC1918'de tanımlanan) docker0 arayüzüne rastgele bir adres atar. Örneğin, tipik 172.17.42.1, maske 255.255.0.0'dır. Bundan sonra, konteynerdeki ağ bağlantı noktasına otomatik olarak aynı ağ segmentinin (172.17.0.0/16) bir adresi atanacaktır.

Bir Docker konteyneri oluşturulduğunda, aynı anda bir çift vethpair arabirimi oluşturulacaktır (bir arabirime bir paket gönderildiğinde, diğer arabirim de aynı paketi alabilir). Bu arabirim çiftinin bir ucu, yani eth0 kapsayıcıdadır; diğer ucu yerel olarak docker0 köprüsüne monte edilir ve ad veth ile başlar (örneğin, vethAQI2QT). Bu şekilde, ana bilgisayar kap ile iletişim kurabilir ve kaplar da birbirleriyle iletişim kurabilir. Docker, ana bilgisayar ve tüm kapsayıcılar arasında sanal bir paylaşılan ağ oluşturur.

docker ağı

Konteyner erişim kontrolü

Kapsayıcılar için erişim denetimi, esas olarak Linux'ta iptables güvenlik duvarı aracılığıyla yönetilir ve uygulanır. Iptables, Linux'taki varsayılan güvenlik duvarı yazılımıdır ve çoğu dağıtımla birlikte gelir.

Alan sınırlıdır, bu yüzden burada iptables içeriği hakkında daha fazla şey söylemeyeceğim ~

Harici ağa konteyner erişimi

Konteyner harici ağa erişmek isterse, yerel sistemin yönlendirme desteğine ihtiyacı vardır. Linux sisteminde, yönlendirmenin açık olup olmadığını kontrol edin.

$ sysctl net.ipv4.ip_forward net.ipv4.ip_forward = 1

0 ise, yönlendirmenin etkin olmadığı ve manuel olarak etkinleştirmeniz gerektiği anlamına gelir.

$ sysctl -w net.ipv4.ip_forward = 1

Kapsayıcılar arasında erişim

Konteynerler arasındaki karşılıklı erişim, iki açıdan destek gerektirir.

Konteynerin ağ topolojisinin birbirine bağlı olup olmadığı. Varsayılan olarak, tüm kapsayıcılar docker0 köprüsüne bağlanacaktır.

Yerel sistemin güvenlik duvarı yazılımının - iptables geçmesine izin verilip verilmediği.

Kapsayıcı bağlantı noktasının ana bilgisayarla eşleştirilmesinin uygulanması

Varsayılan olarak, konteyner harici ağa bağlantıya aktif olarak erişebilir, ancak harici ağ konteynere erişemez.

Harici uygulamaya konteyner erişimi

Konteynerin harici ağa olan tüm bağlantıları için, kaynak adresi yerel sistemin IP adresine NAT olacaktır. Bu, iptables'ın kaynak adresi maskeleme işlemi kullanılarak elde edilir.

Ana bilgisayarın NAT kurallarını kontrol edin.

Bunların arasında, yukarıdaki kurallar, kaynak adresi 172.17.0.0/16 ağ bölümünde ve hedef adres, sistem ağ kartından gönderilen diğer ağ bölümleri (dış ağ) olan tüm trafiği dinamik olarak gizler. MASQUERADE ve geleneksel SNAT'ın avantajı, adresleri ağ kartından dinamik olarak alabilmesidir.

Harici erişim kapsayıcı uygulaması

Konteyner, dockerrun sırasında -p veya -P parametresi ile etkinleştirilebilen harici erişime izin verir.

Hangi yöntem kullanılırsa kullanılsın, ilgili kurallar aslında yerel iptable nat tablosuna eklenir.

-P kullanırken:

-P80 kullanırken: 80:

Not:

Buradaki kural 0.0.0.0'ı eşler, bu da ana bilgisayarın tüm arabirimlerden gelen trafiği kabul edeceği anlamına gelir. Kullanıcılar -pIP: host_port: container_port veya -pIP :: port'u, daha katı kurallar oluşturmak için kapsayıcıya erişmesine izin verilen ana bilgisayarda IP, arabirim vb. Belirtmek için kullanabilir.

Sabit bir IP adresine kalıcı olarak bağlanmak istiyorsanız Docker yapılandırma dosyasına /etc/docker/daemon.json aşağıdaki içeriği ekleyebilirsiniz:

{ "ip": "0.0.0.0" }

Docker0 köprüsünü yapılandırın

Docker hizmeti, varsayılan olarak (üzerinde bir docker0 dahili arabirimiyle) bir docker0 köprüsü oluşturacaktır; bu, çekirdek katmanındaki diğer fiziksel veya sanal ağ kartlarına bağlanarak tüm kapsayıcıları ve yerel ana bilgisayarı aynı fiziksel ağa yerleştirir.

Docker, varsayılan olarak docker0 arayüzünün IP adresini ve alt ağ maskesini belirtir, böylece ana bilgisayar ve konteyner birbirleriyle köprü üzerinden iletişim kurabilir. Ayrıca MTU (arayüz tarafından izin verilen maksimum iletim birimi), genellikle 1500Byte veya ana bilgisayar Ağ yönlendirmesinde desteklenen varsayılan değer. Bu değerler, hizmet başladığında yapılandırılabilir.

Ayrıca konfigürasyon dosyasında DOCKER_OPTS'yi yapılandırabilir ve ardından servisi yeniden başlatabilirsiniz.

Mevcut Docker köprüsü bir Linux köprüsü olduğundan, kullanıcılar köprü ve bağlantı noktası bağlantı bilgilerini görüntülemek için brctlshow'u kullanabilir.

$ sudo brctl gösterisi köprü adı köprü kimliği STP etkin arabirimler docker08000.3a1d7362b4ee no veth65f9 vethdda6

Her yeni konteyner oluşturulduğunda, Docker mevcut adres aralığından ücretsiz bir IP adresi seçer ve bunu konteynerin eth0 portuna atar. Tüm kapsayıcılar için varsayılan ağ geçidi olarak yerel ana bilgisayardaki docker0 arabiriminin IP'sini kullanın.

Özel köprü

Varsayılan docker0 köprüsüne ek olarak, kullanıcılar her bir konteyneri bağlamak için bir köprü de belirleyebilir.

Docker hizmetini başlatırken, kullanılan köprüyü belirtmek için -bBRIDGE veya --bridge = BRIDGE kullanın.

Servis zaten çalışıyorsa, önce servisi durdurmanız ve eski köprüyü silmeniz gerekir.

$ sudo systemctl stop docker $ sudo ip bağlantı seti dev docker0 aşağı $ sudo brctl delbr docker0

Ardından bir köprü köprüsü oluşturun0.

$ sudo brctl addbr köprüsü0 $ sudo ip adres 192.168.5.1/24 dev köprüsü ekle0 $ sudo ip bağlantı seti dev köprüsü0 yukarı

Köprünün oluşturulduğunu ve başlatıldığını onaylamak için kontrol edin.

Docker'ı varsayılan olarak oluşturulan köprüye köprülemek için Docker yapılandırma dosyasına /etc/docker/daemon.json aşağıdaki içeriği ekleyin.

{ "köprü": "köprü0", }

Docker hizmetini başlatın.

Yeni bir konteyner oluşturun, bridge0'a köprülendiğini görebilirsiniz.

Köprü bilgilerini görüntülemek için brctlshow komutunu kullanmaya devam edebilirsiniz. Ayrıca, IP adresi yapılandırma ve yönlendirme bilgilerini görüntülemek için konteynerdeki ip addr ve iproute komutlarını kullanabilirsiniz.

Docker ağı hala nispeten karmaşık (ağım için boş), alan sınırlıdır ve docker ağ yapılandırması burada tanıtıldı ve ilgilenen arkadaşlar bunu test edebilir ~

Devops ve DBA hakkında daha fazlasını daha sonra paylaşacağım ve ilgilenen arkadaşlar buna dikkat edebilir ~

Weibo bazı yasa dışı hesapları yasaklıyor: aktör Zhao Lixin vb. Dahil.
önceki
Yu Zheng yönetimindeki erkek sanatçıların pozlarını kaydetme! Hesap için söylenmemiş kurallar vardı, aynı zamanda iç hikayedeki haberi de kırdı
Sonraki
Evrendeki ilk X artefaktı! iPhone X, tanrı düzeyinde küçük kuyruğu yeniden üretir, netizenler: para için bir zorunluluktur!
Tümörü çıkarmak için beyni açmak için 700.000 servet kullandım! 41 yaşındaki TVB Xiaosheng Rehabilitasyon, "Forensic Pioneer 4" e katıldı
Tarihteki en kötü iPhone 8, Apple'dan çıktı! Cook'un yeni adlandırma yöntemi netizenler arasında hararetli tartışmalara yol açtı!
Makine öğrenimine dayalı akıllı operasyon ve bakım (AIOps, BT Operasyonları için AI)
Yeni Enerjili Araç Teknolojisi Geliştiricileri için Electric Drive 2018 İleri Düzey Eğitim Kursuna Odaklanma Başarıyla Gerçekleştirildi
Terry Xu, anakaradaki insanları sevdiği ve aşağıladığı için özür diler: Alışkanlıkla beğenen resimlere bakıldığında, iki taraf bir aile
Dört kameralı tam ekran, size Gionee S11S'yi gösteren bir resim
Meitu, 598 yuan fiyatına sahip yeni meituspa temizleme cihazını piyasaya sürdü: AI cilt
Tayvanlı aktris Xu Weining, anakaradaki insanların sosyal hesaplarını beğendi ve onlara hakaret etti ve keşfedildikten sonra beğenileri gizlice iptal etti
MIUI9'un ilk yükseltilmiş modelleri! Orada görüşürüz?
Sekiz yeni tam ekran telefonun arkasında, Gionee size tam ekrandan daha fazlasını sunmak istiyor
Volkswagen Toyota'yı yendi mi yoksa umutsuz mu? Renault-Nissan birleşmesi başladığında
To Top