Kubernetes, K8s olarak da bilinen, açık kaynaklı bir orkestrasyon sistemidir; konteynerleştirilmiş uygulamaların dağıtımını, ölçeklendirilmesini ve yönetimini otomatikleştirmek için kullanılır. Taşınabilirliği, esnekliği ve otomatik ölçeklendirme yetenekleri, onu yaygın olarak kullanılan bir sistem haline getirir. Tüm göze çarpan özelliklerin ötesinde, servisler ve pod'lar için DNS kayıtları oluşturma seçeneği, onu diğer yazılım sistemlerine karşı rakipsiz kılar. Kubernetes DNS servisi, IP adresleri yerine tutarlı DNS adlarıyla servislerle iletişim kurmanıza olanak tanır.
Önkoşullar
Eğitimden en iyi şekilde yararlanmak ve Kubernetes DNS servisini daha iyi anlamak için, Kubernetes temelleri konusundaki bilgilerinizi tazelediğinizden emin olun. Ayrıca, DNS kavramlarını daha iyi anlamak için DNS Terminolojileri, Bileşenleri ve Kavramlarına Genel Bakış belgesini okumaktan da yararlanacaksınız. Ek olarak, Docker ekosistemine genel bakış ve konteynerleştirme teknolojisinin temelleri büyük bir avantaj sağlayacaktır.
DNS Sistemi Nedir?
Alan Adı Sistemi (DNS), çeşitli bilgi türlerini IP adresleri gibi hatırlanması kolay adlarla ilişkilendirmek için kullanılan bir mekanizmadır. İstek adlarını IP adreslerine çevirmek için bir DNS sistemi kullanmak, son kullanıcıların hedef alan adlarına zahmetsizce ulaşmasını kolaylaştırır. Çoğu Kubernetes kümesi, servis keşfi için hafif bir yaklaşım sunmak üzere varsayılan olarak yapılandırılmış dahili bir DNS servisi içerir. Pod'lar ve servisler oluşturulduğunda, silindiğinde veya düğümler arasında taşındığında bile, yerleşik servis keşfi, uygulamaların Kubernetes kümelerini tanımlamasını ve bunlarla iletişim kurmasını kolaylaştırır.
Kubernetes’in son sürümlerinde, Kubernetes DNS servisinin teknik detayları değişti. Bu eğitim, Kubernetes DNS servisinin hem kube-dns hem de CoreDNS uygulamalarını tanıtmayı amaçlamaktadır. Kubernetes DNS kayıtlarını ayrıntılı olarak inceleyecek ve Kubernetes DNS’in nasıl çalıştığını göstereceğiz.
Kubernetes DNS Servisinde Neler Var?
Daha önce, sürüm 1.11 öncesinde Kubernetes DNS servisi kube-dns tabanlıydı. Ancak güvenlik ve gizlilik hala ciddi bir endişe kaynağıydı. Daha sonra Kubernetes topluluğu, kube-dns güvenlik ve kararlılık sorunlarını çözmek için yeni 1.11 sürümünde CoreDNS'i tanıttı.
DNS kayıtlarını yönetmek için hangi yazılım sürümünü kullanıyor olursanız olun, kube-dns ve CoreDNS benzer şekilde çalışır:
- Bir kube-dns servisi ve bir veya daha fazla pod oluşturulur.
- The kube-dns servisi, servis ve uç nokta olayları için Kubernetes API'sini izler ve DNS girişlerini uygun şekilde değiştirir. Bu Kubernetes servislerini ve bunlarla ilgili pod'ları oluşturma, düzenleme veya silme işlemleriyle değiştirdiğinizde, bu olaylar otomatik olarak tetiklenir.
- Kubelet, kube-dns servisinin küme IP'sini her yeni pod'un etc/resolv.conf nameserver seçeneğine, daha kısa ana bilgisayar adlarına izin vermek için uygun search ayarlarıyla birlikte atar:
|
1 2 3 |
nameserver 10.32.0.10 search namespace.svc.cluster.local svc.cluster.local cluster.local options ndots:5 |
-
Konteynerleştirilmiş uygulamalar daha sonra example-service.namespace gibi ana bilgisayar adlarını uygun küme IP adresine çözümleyebilir.
Kubernetes DNS Kayıtlarına Genel Bakış
Bir örnek yardımıyla Kubernetes DNS kayıtlarını daha iyi anlayalım. Bir Kubernetes servisi için tam DNS A kaydı şu şekilde görünecektir:
service.namespace.svc.cluster.local
Bir pod, pod’un gerçek IP adresini temsil eden şu biçimde bir kayda sahip olacaktır:
10.32.0.125.namespace.pod.cluster.local
Ayrıca, SRV kayıtları, bir Kubernetes servisinin belirtilen portları için oluşturulur:
|
1 |
_port-name._protocol.service.namespace.svc.cluster.local |
Sonuç olarak, yerleşik DNS tabanlı servis keşif mekanizması sayesinde, uygulamanız veya mikro servisiniz kümedeki diğer servislere veya pod'lara ulaşmak için basit ve tutarlı bir ana bilgisayar adına istek gönderebilir.
Daha Kısa Ana Bilgisayar Adlarını Çözümleme ve Alan Adlarını Arama
Başka bir hizmete erişmek için her zaman ana bilgisayar adının tamamını kullanmanız gerekmeyecektir, çünkü arama alanı sonekleri resolv.conf dosyasında ayarlanmıştır. Aynı ad alanındaki bir hizmetle iletişim kuruyorsanız, ona yalnızca adıyla seslenebilirsiniz:
|
1 |
other-service |
Eğer hizmet farklı bir ad alanındaysa, sorguya other-service bilgisini ekleyin:
|
1 |
other-service.other-namespace |
Bir pod'a erişmeye çalışıyorsanız en azından aşağıdakileri kullanmanız gerekir:
|
1 |
pod-ip.other-namespace.pod |
Yalnızca .svc sonekleri varsayılan resolv.conf dosyasında otomatik olarak tamamlanır. Bu nedenle, ayarları .pod kısmına kadar belirtmek önemlidir. Sırada, şimdiye kadar öğrendiğimiz iki alternatif Kubernetes DNS uygulamasının inceliklerini gözden geçirelim.
Kubernetes DNS Uygulaması
Kubernetes sürüm 1.11, kube-dns hizmetini yönetmek için yeni bir yazılım sağladı; bu durum önceki bölümde de belirtilmişti. Yeni güncellemenin arkasındaki temel neden, hizmetin performansını ve güvenliğini artırmaktı. En baştan kube-dns entegrasyonu ile başlayalım.
-
kube-dns
Önceki Kubernetes 1.11 sürümünde, kube-dns hizmetinin, kube-dns pod'u içinde çalışan üç konteyneri vardı; bu pod kube-system ad alanındaydı. Aşağıdaki üç konteynere göz atın:
- kube-dns: SkyDNS çalıştıran ve bir DNS sorgu çözümleme hizmeti olarak işlev gören bir konteyner.
- dnsmasq: SkyDNS yanıtları, yaygın ve hafif bir DNS çözümleyici ve önbellek olan dnsmasq tarafından önbelleğe alınır.
- sidecar: hizmetin yanında yer alan, metrik raporlaması gerçekleştiren ve sağlık kontrollerine yanıt veren bir konteyner.
CoreDNS, Dnsmasq'teki güvenlik açıkları ve SkyDNS ile ilgili ölçeklenebilirlik performansı endişelerinin bir sonucu olarak oluşturuldu.
-
CoreDNS
Yeni bir Kubernetes DNS hizmeti olan CoreDNS, Kubernetes 1.11'de Genel Kullanıma (General Availability) yükseltildi. Bu, üretime hazır olduğu ve birçok kurulum aracı ile yönetilen Kubernetes sağlayıcısı tarafından varsayılan küme DNS hizmeti olarak kullanılacağı anlamına gelir.
CoreDNS, bir Kubernetes DNS kümesi olarak görev yapan esnek ve genişletilebilir bir DNS sunucusudur. Önceki sistemin tüm işlevlerini yerine getirir. Bir DNS konteyneri, DNS sorgularını çözümlemekten ve önbelleğe almaktan sorumludur. CoreDNS, sağlık kontrollerine yanıt verir ve tek bir konteynerde metrikler sağlar. Ek olarak, birkaç küçük kusuru giderir ve performans ile güvenlik sorunlarını çözmek için yeni yetenekler sunar:
- stubDomains kullanımı ile harici hizmetler arasındaki bazı çelişkiler çözüldü.
- Bazı girdilerin döndürülme sırasını rastgele hale getirerek CoreDNS, DNS tabanlı round-robin yük dengelemeyi iyileştirebilir.
- Arama alanı soneklerinin her birini yineleme konusunda daha iyi performans göstererek (ki bunlar resolv.conf dosyasında tanımlanmıştır), autopath adlı bir özellik, harici ana bilgisayar adlarını çözümlerken DNS yanıt sürelerini iyileştirebilir.
- Pod mevcut olmasa bile, kube-dns 10.32.0.125.namespace.pod.cluster.local adresini her zaman çözümleyecektir 10.32.0.125. CoreDNS, yalnızca doğru IP adresine ve ad alanına sahip bir pod mevcutsa çözümleme yapacak bir pod doğrulama modu sunar.
Kubernetes endpoints, autopaths, ve wildcards hakkındaki bilginizi ilerletmek için, Kubernetes'in kendi kümesinden bölge verilerini okumayı nasıl etkinleştirdiğine dair bir kılavuzu inceleyin.
Özelleştirme Özellikleri
Kubernetes, Kubernetes DNS hizmetini özelleştirme özelliği sayesinde DNS pod'larını yapılandırmanıza ve kümenin DNS çözümlemesini özelleştirmenize olanak tanır. Yöneticiler, yukarı akış ad sunucularını veya şurada tanımlanan arama alanı soneklerini değiştirmek için bu hizmetlerden yararlanabilir: resolv.conf dosyası. Her şeyden önce, dnsConfig seçeneğini kullanarak pod'ları ve konteynerleri kişiselleştirmek için ek bir özellik vardır:

Bu yapılandırmanın güncellenmesi, bir pod'un resolv.conf dosyasının yeniden yazılmasını zorunlu kılarak değişikliklerin yürürlüğe girmesini sağlayacaktır. Yukarıdaki kurulum, nameserver 203.0.113.44 ve search custom.dns.local satırlarını içeren bir dosya oluşturacak ve bu satırlar doğrudan normal resolv.conf seçeneklerine aktarılacaktır.
Sonuç
Bu eğitimde, Kubernetes DNS servisinin temellerini ve farklı sürümlerdeki uygulamasını adım adım inceledik. Kubernetes DNS kayıtları da bir örnek yardımıyla ele alındı. Ayrıca, pod'ları özelleştirmek ve DNS sorgularını çözümlemek için bazı ek yapılandırma seçeneklerini vurguladık. Bu, Kubernetes DNS servisinin temellerini kapsar, ancak öğreniminiz burada bitmemeli. Konu hakkında daha fazla bilgi edinmek için resmi Kubernetes dokümantasyonuna göz atın.
DevOps bilginizi daha da geliştirmek ve Kubernetes temellerine derinlemesine dalmak için blogumuzdaki şu eğitimlere göz atın::
- Helm'e Giriş: Kubernetes için Paket Yöneticisi
- Ubuntu 20.04 Üzerinde Kubernetes Nasıl Kurulur ve Kullanılır
- Ubuntu 18.04 ile Bir Kubernetes Kümesinde PHP Uygulaması Dağıtma
Keyifli Çalışmalar!
Yorumlar
Henüz yorum yapılmamış. İlk siz olun.