Kubernetes Networking: Ağ Modelini Anlamak İçin Eksiksiz Bir Kılavuz

Yayınlanan: 2020-02-18

Konteyner yönetimi, ağ oluşturmanın hayati bir yönüdür. Günümüzün değişen trafik gereksinimleriyle birlikte Kubernetes'in önemi on kat arttı. Ağ oluşturma hakkında bilgi edinmek istiyorsanız, önce Kubernetes'e aşina olmanız gerekir. Kubernetes hakkında bilgi edinmek, kapsayıcı yönetimini etkin bir şekilde ele almanıza yardımcı olacaktır. Kubernetes ayrıca 2020 için piyasadaki en iyi DevOps araçlarından biridir.

Ancak endişelenmeyin çünkü bu ayrıntılı kılavuzda aynı şeyi tartışacağız. Kubernetes bir kapsayıcı yönetim aracıdır ve bu makalede neden kullanıldığını, ağının bileşenlerinin neler olduğunu ve trafiği nasıl yönlendirdiklerini öğreneceksiniz.

Yazılım mühendisliğini dünyanın en iyi üniversitelerinden çevrimiçi öğrenin . Kariyerinizi hızlandırmak için Yönetici PG Programları, Gelişmiş Sertifika Programları veya Yüksek Lisans Programları kazanın.

Hadi dalalım.

İçindekiler

Kubernetes nedir?

Kubernetes'te ağ oluşturmayı tartışmaya başlamadan önce, bu aracın temel kavramlarını düşünmeliyiz. Bu şekilde, makalenin ilerleyen bölümlerinde kafa karışıklığı yaşamaz ve burada bahsedilen her şey hakkında temel bir anlayışa sahip olursunuz.

Kubernetes, açık kaynaklı bir kapsayıcı düzenleme aracıdır. Bugünlerde ağ oluşturmanın en kritik yönü haline gelen kapsayıcıları yönetmenize yardımcı olur. Kubernetes'in kapsayıcıların ölçeklenmesi, kapsayıcıların konuşlandırılması, kapların kireçten arındırılması vb. dahil olmak üzere birçok işlevi vardır.

Docker, profesyonellere kapsayıcı oluşturma konusunda yardımcı olurken, Kubernetes de aynı şeyi yönetmelerine yardımcı olur. Bu yüzden ikisi de çok önemlidir. Kubernetes, bir küme üzerinde dağıtılmış bir sistem çalıştırır. Yapısını ve ağ bağlantısını anlamak, hatalardan kaçınmanıza ve kapsayıcıları hatasız yönetmenize olanak tanır.

Kubernetes neden kullanılır?

Firmaların konteyner ihtiyaçları son yıllarda oldukça arttı. Çok küçük olmadıkça bir veya iki konteynere güvenemezler. Yük dengeleme için büyük bir konteyner setine sahip olmaları gerekir. Yüksek kullanılabilirliği sürdürmek ve trafiği dengelemek için gereksinim yüzlerce olabilir.

Trafik arttığında, istekleri işlemek için daha fazla konteynere ihtiyaçları olacak. Benzer şekilde, trafik daha az olduğunda, konteynırların ölçeklerinin küçültülmesi gerekecektir. Konteynerleri talebe göre yönetmek, özellikle manuel olarak yaparsanız zor olabilir.

Kapsayıcıları manuel olarak düzenlemek çok fazla zaman ve kaynak gerektirebilir ve bu da başka bir yerde kolayca harcanabilir. Bu görevi otomatikleştirmek işleri çok daha basit hale getirir. O zaman kapları ölçekleme ve kireç çözme konusunda endişelenmenize gerek kalmaz. Kubernetes'in yaptığı budur. Yeni başlayanlar için en iyi DevOps projeleri makalemizde Kubernetes'in yardımıyla yeni başlayanlar için DevOps projelerinin nasıl oluşturulacağını okuyun.

Konteynerlerin düzenlenmesini ve yönetimini otomatikleştirir. İşlevselliği nedeniyle yaygın olarak popülerdir. Bu bir Google ürünüdür ve performansı, kuruluşların kapsayıcıların ölçeklenmesini otomatikleştirmede önemli ölçüde yardımcı olur.

Kubernetes'in Bileşenleri

Artık Kubernetes'in ne olduğunu ve işlevlerinin ne olduğunu bildiğinize göre, onun çoklu bileşenlerini tartışmaya başlayabiliriz. Bu araçta ağ oluşturmayı ancak farklı bölümlerine aşina olduktan sonra anlayabilirsiniz. Ancak endişelenecek pek bir şey yok. Çünkü yardım etmek için buradayız. Aşağıda, çeşitli bileşenlerinin kısa bir açıklaması bulunmaktadır. Açıklama kısa olsa da genel bir fikir vermesi açısından yeterli olacaktır.

bölmeler

Maddenin en küçük bağımsız nesneleri olan kimyadaki atomları hatırlıyor musunuz? Baklalar, Kubernetes'in atomlarıdır. Bir Pod, bir kümedeki bir iş yüküdür. Depolu bir veya birden fazla kap içerebilir. Her Pod, Kubernetes'in diğer bileşenleriyle etkileşime girdiğinde kimliği gibi davranan benzersiz bir IP adresine sahiptir. Bir kapsülün tüm kapları programlanır ve aynı makine içinde bulunur.

Kontrolörler

Denetleyiciler Kubernet'leri oluşturur. Denetleyiciler, geçerli durumunun belirttiğiniz durumla eşleştiğinden emin olmak için API sunucusunun durumunu izler. API sunucusunun durumu herhangi bir nedenle değişirse buna göre tepki verir. Denetleyiciler, kümelerin durumlarını kontrol etmek ve bunları gerekli durumlarla karşılaştırmak için bir döngü kullanır. Mevcut durumu gerekli duruma değiştirmek için de görevler gerçekleştirebilir.

düğümler

Bölmeler atomlarsa, Düğümler Kubernetes'in dişlileridir. Kümeyi çalıştırıyorlar. Sanal makineler, Kubernetes kümelerindeki erişilebilir düğümlerdir. Birçok kişi 'düğüm' yerine 'ana bilgisayar' kelimesini kullanma eğilimindedir. Bu makalede düğümler terimini tutarlı bir şekilde kullanmaya çalıştık.

API Sunucusu

API sunucusu, Kubernetes'teki veri deposuna açılan ağ geçididir. Kümeler için istediğiniz durumu belirlemenizi sağlar. Kubernetes kümenizin durumunu değiştirmek ve gerekli durumunuzu açıklamak istiyorsanız API çağrıları yapmanız gerekir.

Kubernetes ağ iletişimi bileşenlerine aşina olduğunuz için, ağ oluşturma modeli ve nasıl çalıştığıyla başlayabiliriz.

Kubernetes Ağı Açıklaması

Kubernetes ağ iletişimi, aşağıdaki kısıtlamalara sahip belirli bir modeli takip eder:

  • Pod'lar, ağ adresi çevirisi olmadan diğer tüm Pod'larla iletişim kurar
  • Nod'lar, ağ adresi çevirisi olmadan Pod'larla iletişim kurabilir
  • Diğer Pod'ların gördüğü bir Pod'un IP'si, kendisinin gördüğü IP'nin aynısıdır.

Bu kısıtlamalar nedeniyle Kubernetes'in yalnızca birkaç ağ bölümü vardır. Onlar:

  • Konteynerden Konteynere transferler
  • Pod'dan pod'a transferler
  • Servis transferlerine kapsül
  • internetten servise transferler

Konteynerden Konteynere

Ağ oluşturmada sanal bir makinenin doğrudan bir ethernet cihazıyla etkileşime girdiğini düşünebilirsiniz, ancak bundan daha fazlası var.

Linux kullanıyorsanız, ağ ad alanı size ağ cihazları, yolları ve güvenlik duvarı kurallarını içeren bir ağ yığını verecektir. Linux'ta çalışan her işlem bu ağ ad alanıyla iletişim kurar.

Bir Pod, bir ağ ad alanı içinde bir grup kapsayıcıya sahiptir. Bu kapsayıcılar, ağ ad alanı aracılığıyla kendilerine atanan aynı bağlantı noktası alanına ve IP adresine sahiptir. Bu kapsayıcılar, aynı ad alanında bulundukları için yerel ana bilgisayar aracılığıyla birbirini bulur. Uygulamalarınız bir bölme içindeyse, paylaşılan birimlere de erişebilirler.

Pod'dan Pod'a

Pod'lar kendi IP adresleri aracılığıyla birbirleriyle iletişim kurar. Her Pod, Kubernetes'te gerçek ve farklı bir IP adresine sahiptir. Pod'ların ne olduğunu zaten biliyorsunuz, bu yüzden o konuya dokunmamıza gerek yok. Kubernetes'in pod'lar arasındaki iletişimi kolaylaştırmak için IP'leri kullandığını biliyoruz; bunu nasıl yaptığını tartışalım.

Pod'lar düğümleri aracılığıyla iletişim kurar. Bu nedenle, Pod'dan pod'a iletişimi anlamak için düğümler arasındaki etkileşimi anlamanız gerekir.

  • Düğümler Arası İletişim
  • Düğüm İçi İletişim

Her birini ayrıntılı olarak tartışacağız:

Düğümler Arası İletişim

Düğümler farklı bölmelerde yer aldığında bu yöntemle haberleşirler. Bu iletişim yöntemini basit bir örnek üzerinden anlayabiliriz. Dört farklı bölme ağı olduğunu, yani bölme 1, bölme 2, bölme 3 vb. olduğunu varsayalım. Pod 1 ve 2, Düğüm 1 kök ağında bulunur ve pod 3 ve 4, 2. ağda bulunur.

1. bölmeden 4. bölmeye bir paket aktarmanız gerekir.

Paket önce pod 1 ağından ayrılmalı ve veth0 üzerinden kök ağa girmelidir. Hedefini bulmasına yardımcı olan Linux köprüsünden geçer. Düğümün Pod'unda bir hedefi olmadığından, eth0 arayüzüne geri gönderilir. Şimdi rota tablosu için ilk düğümden ayrılıyor. Yönlendirme tablosu, paketi pod4'te bulunan gerekli düğüme yönlendirir. Paket önce düğüm 2'ye ulaşır, ardından onu hedefine yönlendiren köprüye ulaşır.

Düğüm İçi İletişim

Düğümler arası iletişim, düğümler aynı Pod'da yer aldığında gerçekleşir. Düğüm içi iletişimi, düğümler arası iletişimi açıkladığımız gibi açıklayabiliriz. Bu durumlarda paket, eth0'daki ilk Pod'dan hareket eder. veth0 üzerinden kök ağa girer. Daha sonra köprüye geçmesi gerekir, ardından belirlenen IP'ye gider.

Kubernetes'te bölmeler birbirleriyle bu şekilde iletişim kurar. Bir sonraki bölüme geçelim.

Servise Kapsül

Trafiğin bölmelerin IP adresleri arasında nasıl yönlendirildiğini önceki bölümde zaten gördünüz. Ancak, IP adresleriyle ilgili bir sorun var. Pod'un IP'leri, kapların ölçeklenmesine göre kaybolabilir ve yeniden görünebilir. Dolayısıyla, kapsayıcılar ölçeklenirse, pod IP'lerinin sayısı artacaktır, bunun tersi de doğrudur.

Hizmetler bu durumun yönetiminde yardımcı olur. İşte Kubernetes'te hangi hizmetlerin olduğuna dair kısa bir açıklama, böylece kafanız karışmaz.

Kubernetes'teki Hizmetler nelerdir?

Kubernetes'teki hizmetler, istekleri bir grup bölmeye aktarması gereken proxy'leri yapılandırır. Bu bölmeler trafik alır ve seçici bu görevi yerine getirir. Bir hizmet oluşturulduktan sonra, isteklerini yerine getiren bir IP adresi alır. Birden çok hizmet türü vardır ve hizmet iletişimine Pod'a geçmeden önce bunları tartışmalıyız.

Kubernetes'te toplam 4 çeşit hizmet vardır. Onlar:

  • ClusterIP
  • Düğüm Bağlantı Noktası
  • Yük dengeleyici
  • HariciAd

ClusterIP, varsayılan hizmet türüdür. Bu türde hizmete yalnızca kümeden erişilebilir. NodePort'ta hizmet, her düğümün IP'sine maruz kalır. NodePort, sistem önceden oluşturduğu için bir ClusterIP hizmetine yönlendirir. ClusterIP'den farklı olarak, bu hizmetle bir küme dışında iletişim kurabilirsiniz.

LoadBalancer, hizmeti harici ağlara sunmak için bir bulutun yük dengeleyicisini kullanır. NodePort ve ClusterIP bu nedenle otomatik olarak oluşturulur ve ExternalName hizmeti, bir CNAME kaydını yansıttığı için bunu aktarır.

Artık hizmetlerin ne olduğunu ve kaç tür hizmet olduğunu bildiğinize göre, Pod'dan hizmete iletişimin nasıl gerçekleştiğini tartışalım.

Nasıl çalışır?

Bu senaryoda, paket Pod'dan eth0 aracılığıyla ayrılır. Ethernet cihazı üzerinden köprüye gider ve buradan eth0'ın varsayılan yoluna aktarılır. Ancak, eth0'da kabul edilmeden önce iptables'tan geçmesi gerekiyor. iptables, sahip olduğu belirtilen kuralları kullanarak paketin hedefini belirler ve paketi gerekli Pod'a gönderir. Bunu yaptıktan sonra paket, hizmetin sanal IP'si yerine bir bölmenin gerçek IP'sine gider.

Hizmet Dışı

Önceki üç trafik yönlendirme yöntemi yalnızca Kubernetes ile ilgiliydi. Ancak gerçek durumlarda, trafiği yönlendirmek için Kubernetes ağınızı üçüncü taraf bir ağa bağlamanız gerekebilir. Ve bu bölüm aşağı yukarı aynı.

Harici bir ağa bağlanıldığında Kubernetes iki işlevi yerine getirebilir:

  • Trafiği internetten kendi ağına yönlendirin
  • Trafiği ağından internete yönlendirin

İlki bir Giriş ağı gerektirir ve ikincisi bir Çıkış ağı gerektirir. Onlara bir göz atalım.

giriş

Trafiğinizi halka açık bir ağdan Kubernetes sisteminize yönlendirmek çok zordur. Paketleri işlemek için LoadBalancer ve Controller gerektirir. İşte nasıl çalıştığına bir örnek.

İlk olarak, bir hizmet dağıtacaksınız ve bulut sağlayıcınız yeni bir yük dengeleyici oluşturacak. Yük dengeleyici, hizmetinizin belirlenen bağlantı noktasını kullanarak trafiği kümenizdeki sanal makineler arasında dağıtır. Burada iptables yük dengeleyiciden aldığı trafiği gerekli Pod'a aktarır. Pod, istemciye IP'si ile yanıt verir ve bağlantı, IP'lerin doğru şekilde yeniden yazılmasına yardımcı olur.

Ağda bulunan Katman-7 yük dengeleyicileri, gelen trafiği URL'lere ve yollara göre bölümlere ayırabilir. Bu, bir Giriş ağıyla çalışırken çok yararlıdır.

Çıkış

Kubernetes ağınızın bir düğümünden internete trafiği yönlendirdiğinizde, her şeyin nasıl çalışacağı büyük ölçüde ağ yapılandırmalarınıza bağlıdır. Konuya değinmek için burada genel bir örneği tartışacağız.

Paket, Pod'un ad alanından başlar ve veth aracılığıyla kök ad alanına gider. Daha sonra gitmesi gereken IP köprü ile bağlantılı olmadığı için varsayılan hizmete gittiği yerden köprüye gider. Kök ad alanına giderken iptables'tan geçer.

Okuyun: DevOps için Önkoşul: Düşündüğünüz gibi değil

Artık İnternet ağ geçitleri yalnızca sanal makinelerle bağlantılı olan IP adreslerini kabul etmektedir. Ve cebimizin kaynak bölmesi bir VM ile bağlantılı değil. Böylece iptables bir kaynak NAT yapar ve paketin kaynağını değiştirir. Şimdi başka bir NAT üzerinden geçtiği internet ağ geçidine ulaşır ve ardından genel internete (hedefine) girer.

Ve işte bu. Artık Kubernetes ağı ve çeşitli bileşenleri hakkında her şeyi biliyorsunuz.

Çözüm

Ağ iletişimi ile ilgileniyorsanız, şüphesiz Kubernetes öğrenmeniz gereken temel araçlardan biridir. Bu alana aşina olmayanlar bunun ne kadar hayati olduğunu bilemezler. Kapsayıcıları yönetmek ve trafiği bu trafik gereksinimlerine göre yönlendirmek size önemli ölçüde yardımcı olabilir. Her şeyi anlamanıza yardımcı olmak için bu kılavuzu olabildiğince açık tutmaya çalıştık.

Kubernetes, DevOps ve daha fazlasını öğrenmek ve ustalaşmak istiyorsanız, IIIT-B & upGrad'ın Yazılım Geliştirmede Yönetici PG Programına bakın - Tam Yığın Geliştirmede Uzmanlık.

Geleceğin Kariyerine Hazırlanın

Bilgisayar Bilimleri Yüksek Lisansına Başvurun