Aracılığıyla paylaş


AKS kümesinden gerçek zamanlı sistem içgörüleri yakalama

Bu makalede, Inspektor Gadget kullanarak Microsoft Azure Kubernetes Service (AKS) kümenizden gerçek zamanlı sistem içgörüleri toplama işlemi ele alınmaktadır. Makale, bu aracı AKS ortamınıza yüklemeye yönelik adım adım yönergeler içerir. Ayrıca, Inspektor Gadget'ın gerçek dünya sorunlarının etkili hata ayıklamasını yapmak için değerli bilgileri toplamanıza nasıl yardımcı olduğunu gösteren pratik örnekleri de inceler.

Demo

Başlamak için aşağıdaki hızlı tanıtımı göz önünde bulundurun. Bir uygulamadan gelen DNS isteklerinin neden başarısız olduğunu anlamak zorunda olduğunuzu varsayalım. Inspektor Gadget'ı kullanarak, uygulamanızın çalıştığı Kubernetes ad alanında DNS trafiğini yakalayabilirsiniz:

kubectl gadget trace dns --namespace my-ns --output columns=+nameserver
K8S.NODE                           K8S.NAMESPACE  K8S.POD  PID      TID      COMM      QR  TYPE      QTYPE  NAME             RCODE NUMANSWERS NAMESERVER
aks-agentpool-97833681-vmss000001  my-ns          my-app   1349264  1349264  nslookup  Q   OUTGOING  A      www.example.com.       0          1.2.3.4
aks-agentpool-97833681-vmss000001  my-ns          my-app   1349264  1349264  nslookup  Q   OUTGOING  AAAA   www.example.com.       0          1.2.3.4
aks-agentpool-97833681-vmss000001  my-ns          my-app   1349264  1349264  nslookup  Q   OUTGOING  A      www.example.com.       0          1.2.3.4
aks-agentpool-97833681-vmss000001  my-ns          my-app   1349264  1349264  nslookup  Q   OUTGOING  AAAA   www.example.com.       0          1.2.3.4

Bu bilgilerden, DNS isteklerinin IP adresinde 1.2.3.4DNS sunucusuna yönlendirildiğini ancak sunucunun hiçbir zaman yanıt vermediğini görebilirsiniz.

Şimdi, bunun 1.2.3.4 varsayılan ad sunucusu yapılandırması olmadığını ve şüpheli bir işlemin çalışma zamanında yapılandırmayı değiştirdiğinden şüphelendiğini varsayalım. Bu tür durumlarda, Inspektor Gadget DNS tanılamasının ötesine geçer. Ayrıca kritik dosyalara ( /etc/resolv.conf gibi) erişen ve bu dosyaları değiştirme amacına sahip işlemleri izlemenizi sağlar. Bu izleme özelliğini kullanmak için çıkıştaki bayrakları filtreleyerek yazma dosyası erişim modlarındanO_WRONLY herhangi birini (yalnızca yazma için açmak veya O_RDWR okuma ve yazma için açmak için):

kubectl gadget trace open --namespace my-ns \
    --filter path:/etc/resolv.conf,flags:'~(O_WRONLY|O_RDWR)' \
    --output columns=+flags
K8S.NODE                           K8S.NAMESPACE  K8S.POD  K8S.CONTAINER  PID      COMM  FD  ERR  PATH              FLAGS
aks-agentpool-97833681-vmss000001  my-ns          my-app   my-app         1365052  vi    3   0    /etc/resolv.conf  O_WRONLY|O_CREAT

Inspektor Gadget nedir?

Inspektor Gadget , Linux ve Kubernetes sistemlerinde hata ayıklamaya ve denetlemeye ayrılmış araçları derlemek, paketlemek, dağıtmak ve çalıştırmak için tasarlanmış bir çerçevedir. Bu araçlar ("araçlar"), eBPF programları olarak uygulanır. Birincil hedefleri, belirli sistem senaryolarına ilişkin içgörüler sağlamak için düşük düzey çekirdek verilerini toplamaktır. Inspektor Gadget çerçevesi, Kubernetes kaynakları gibi üst düzey başvuruları kullanarak toplanan verilerin ilişkilendirmesini yönetir. Bu tümleştirme, alt düzey içgörüler ile ilgili üst düzey bağlamları arasında sorunsuz bir bağlantı olmasını sağlar. Tümleştirme, sorun giderme sürecini ve ilgili bilgilerin toplanmasını kolaylaştırır.

Gadgets

Inspektor Gadget, bir sistemdeki yaygın durumların hatalarını ayıklamak ve gözlemlemek için tasarlanmış bir dizi yerleşik araç sağlar. Örneğin, bu tür araçları kullanarak kümenizde aşağıdaki olayları izleyebilirsiniz:

  • İşlem oluşturma
  • Dosya erişimi
  • TCP bağlantıları veya DNS çözümlemesi gibi ağ etkinliği

Araçlar, topladıkları bilgileri farklı mekanizmalar kullanarak sunar. Örneğin, bazı araçlar sizi belirli zamanlarda sistem durumu hakkında bilgilendirebilir. Belirli bir olay her gerçekleştiğinde diğer araçlar rapor edebilir veya düzenli güncelleştirmeler sağlayabilir.

Bunlar yalnızca birkaç örnektir. Resmi belgeler, özel kullanım örneğiniz için en uygun aracı belirleyebilmeniz için her aracın ayrıntılı açıklamalarını ve örneklerini sağlar. Ancak, mevcut araçların şu anda kapsamadığını belirten bir kullanım örneği bulursanız, Inspektor Gadget esneklik sunar. Betik komutunu çalıştırarak eBPF izleme dili bpftrace ile uyumlu betikler çalıştırabilirsiniz. Veya komutunu çalıştırarak kendi eBPF programlarınızı çalıştırabilirsiniz. Inspektor Gadget çerçevesi özel programlarınızın derlemesini, paketlemesini ve dağıtımını işlediğinden, benzersiz gereksinimleriniz için süreci kolaylaştırır. Ayrıca, programınızda topladığınız verileri zenginleştirmek için üst düzey meta veriler toplar.

Kullanım örnekleri

Bu makalenin başında sunulan tanıtımı tamamlamak için, Inspektor Gadget'ın hata ayıklama sorunlarını gidermenize nasıl yardımcı olduğunu gösteren sorunların ve pratik senaryoların listesini derledik. Aşağıdaki örneklerde Inspektor Gadget'ın potansiyeli gösterilir. Ancak bu aracın özellikleri bu senaryoların ötesine uzanır. Bu, Inspektor Gadget'ı Kubernetes hata ayıklama ve gözlemlenebilirliğinin karmaşıklıklarında gezinmek için değerli bir varlık haline getirir.

Sorun alanı Belirtiler Sorun giderme
Yoğun disk kullanımlı uygulamalar Yüksek bellek veya CPU kullanımı ya da tutarsız düğüm hazırlığı Bir uygulama, kapsamlı günlük kaydı gibi disk okuma/yazma işlemleriyle tutarlı bir şekilde etkileşime geçebilir. Inspektor Gadget'ı kullanarak, hangi kapsayıcıların daha fazla blok G/Ç oluşturabileceğini gerçek zamanlı olarak belirleyebilirsiniz. Veya daha belirgin olarak, bir dosyaya daha fazla okuma ve yazma işlemine neden olan kapsayıcıyı bulabilirsiniz.
"Her zaman DNS'tir" Yüksek uygulama gecikme süresi, zaman aşımları veya düşük son kullanıcı deneyimi

Inspektor Gadget'ı kullanarak kümedeki tüm DNS sorgularını ve yanıtlarını izleyebilirsiniz. Özellikle Inspektor Gadget, DNS'nin uygulamanızın performansını etkileyip etkilemediğini belirlemenize yardımcı olacak aşağıdaki bilgileri sağlar:

  • Sorgu başarılı
  • Yanıtın hata içerip içermediği
  • Arama için kullanılan ad sunucusu
  • Sorgu yanıtı gecikme süresi
Dosya sistemi erişimi Uygulama yanlış davranıyor veya düzgün çalışmıyor

Uygulama, dosya sistemindeki belirli yapılandırmalara, günlüklere veya diğer önemli dosyalara erişemeyebilir. Bu tür senaryolarda, Inspektor Gadget, erişim sorunlarını tanılamak için podların içindeki tüm açık dosyaları izlemenize olanak tanır. Uygulamanız bir dosyayı açmaya çalıştığında aşağıdaki bilgileri bulabilirsiniz:

  • Dosyayı açmak için kullanılan bayraklar (örneğin, O_RDONLY, O_WRONLY, O_RDWR vb.)
  • Dosya açma girişiminin başarılı olup olmadığı
  • Döndürülen hata (dosya açma girişimi başarısız olursa)

Örneğin, dosyayı açma girişimi 2 (ENOENT) hatası nedeniyle başarısız olursa, uygulama büyük olasılıkla var olmayan bir dosyayı açmaya çalışıyordur. Başka bir deyişle kodda yazım hatası olabilir veya dosya farklı bir yolda kullanılabilir.

Uzaktan kod yürütme (RCE) Uygulama boşta kalma dönemlerinde yüksek CPU kullanımında belirgin olan şifreleme gibi yetkisiz kod yürütme Saldırganlar bir sistemde bu tür bir saldırı yapmaya çalıştığında genellikle kullanarak bashkodu çalıştırmaları gerekir. Inspektor Gadget, özellikle gibi bashkritik komutları içeren işlemler olmak üzere yeni işlemlerin oluşturulmasını izlemenizi sağlar.

Aks kümesinde Inspektor Gadget'ı yükleme

One-Click Inspektor Gadget dağıtımı

Aşağıdaki düğme seçilerek bir AKS kümesi otomatik olarak oluşturulur ve Inspektor Aracı kümeye dağıtılır. Dağıtım tamamlandıktan sonra, sağlanan kabuk ortamında Inspektor Gadget'ın tüm özelliklerini keşfedebilirsiniz.

Aks kümesinde Inspektor Gadget'ı dağıtma

"kubectl gadget" eklentisini çalıştırarak Inspektor Gadget'ı yükleme

Bu bölümde eklentiyi çalıştırarak kubectl gadget AKS kümenize Inspektor Gadget yükleme adımları özetlenmiştir. Yükleme iki bölümden oluşur:

  • Eklentiyi kubectl gadget bilgisayarınıza yükleme

  • kubectl gadget Inspektor Gadget'ı kümeye yüklemek için eklentiyi çalıştırma

    Uyarı

    Inspektor Gadget'ı dağıtmak ve kullanmak için birçok mekanizma mevcuttur. Bu mekanizmaların her biri belirli kullanım örneklerine ve gereksinimlere göre uyarlanmıştır. Bu mekanizmalardan bazılarını uygulamak için kubectl aracı eklentisini kullanabilirsiniz, ancak bunların tümünü uygulayamayın. Örneğin, eklentiyi kubectl gadget kullanarak Inspektor Gadget'ın dağıtılması Kubernetes API sunucusunun kullanılabilirliğine bağlıdır. Kullanılabilirliği zaman zaman tehlikeye girmiş olabileceğinden böyle bir bileşene bağımlı değilseniz, dağıtım mekanizmasını kubectl gadgetkullanmaktan kaçınmanızı öneririz. Bu ve diğer kullanım örnekleri hakkında daha fazla bilgi için Inspektor Gadget belgelerine bakın.

Önkoşullar

Bölüm 1: Kubectl eklenti aracını bilgisayarınıza yükleme

Eklentiyi yüklemek kubectl gadget için kullanmanızı krew öneririz.

Not

Belirli bir sürümü yüklemek veya kaynaktan derlemek için bkz. GitHub'da kubectl aracını yükleme .

kubectl krew install gadget

Şimdi komutunu çalıştırarak version yüklemeyi doğrulayın:

kubectl gadget version

komutu version size istemcinin (kubectl gadget eklenti) sürümünü gösterir, ancak henüz sunucuda (küme) yüklenmediğini de bildirir:

Client version: vX.Y.Z
Server version: not installed

Bölüm 2: Kümeye Inspektor Aracı yükleme

Aşağıdaki komut DaemonSet denetleyicisini dağıtır.

Not

Aşağıdaki listede gösterildiği gibi dağıtımı özelleştirmek için çeşitli seçenekler sağlanır:

  • Belirli bir kapsayıcı görüntüsünü kullanma
  • Belirli düğümlere dağıtma
  • Özel ad alanına dağıtma

Bu seçenekler hakkında bilgi edinmek için resmi belgelerin Kümede yükleme bölümüne bakın.

kubectl gadget deploy

Komutunu yeniden çalıştırarak version yüklemeyi doğrulayın:

kubectl gadget version

Bu kez, istemcinin ve sunucunun doğru şekilde yüklendiği gösterilir:

Client version: vX.Y.Z
Server version: vX.Y.Z

Üçüncü taraf bilgileri hakkında yasal uyarı

Bu makalede adı geçen üçüncü taraf ürünleri Microsoft'tan bağımsız şirketler tarafından üretilmektedir. Microsoft, bu ürünlerin performansı veya güvenilirliği ile ilgili örtük veya başka türlü hiçbir garanti vermez.

Üçüncü tarafla iletişim sorumluluk reddi

Microsoft, bu konu hakkında ek bilgi bulmanıza yardımcı olmak için üçüncü taraf iletişim bilgileri sağlar. Bu iletişim bilgileri önceden haber verilmeksizin değiştirilebilir. Microsoft, üçüncü taraf iletişim bilgilerinin doğruluğunu garanti etmez.

Yardım için bize ulaşın

Sorularınız veya yardıma ihtiyacınız varsa bir destek isteği oluşturun veya Azure topluluk desteği isteyin. Ürün geri bildirimini Azure geri bildirim topluluğuna da gönderebilirsiniz.