Aracılığıyla paylaş


Tünel bağlantısı sorunları

Microsoft Azure Kubernetes Service (AKS), düğümler ve denetim düzlemi arasında tünelli ve güvenli iletişim için belirli bir bileşeni kullanır. Tünel, denetim düzlemi tarafındaki bir sunucudan ve küme düğümleri tarafında bir istemciden oluşur. Bu makalede AKS'de tünel bağlantısıyla ilgili sorunları giderme ve çözme adımları açıklanır.

Azure tarafından yönetilen AKS alt katmanı, müşteri tarafından yönetilen Azure sanal ağı ve alt ağı ve API'den tünel pod'a tünelin diyagramı.

Not

Varsayılan olarak ve bölgeye bağlı olarak tünel bileşeni şeklindedir tunnel-front. Çalışma süresi hizmet düzeyi sözleşmesi (SLA) özelliğine güncelleştirildiğinde, tunnel-frontopenVPN kullanan tünel bileşeniyle aks-link değiştirildi. AKS, Konnectivity'e geçiş gerçekleştiriyor. Bu, hem aks-linkhem de tunnel-front öğesinin yerini alan bir Kubernetes yukarı akış bileşenidir. Tünel bileşeni olarak Konnectivity'e geçiş hakkında daha fazla bilgi için bkz. AKS sürüm notları ve değişiklik günlüğü.

Önkoşullar

Belirtiler

10250 numaralı bağlantı noktasıyla ilgili aşağıdaki örneklere benzeyen bir hata iletisi alırsınız:

Sunucudan hata: "https:// aks-node-name>:10250/containerLogs/namespace>/<<pod-name/<container-name>>": tcp <aks-node-ip>:10250'yi çevirin: g/ç zaman aşımı<

Sunucudan hata: arka uç aranırken hata oluştu: tcp <aks-node-ip>:10250: g/ç zaman aşımını çevirme

Kubernetes API sunucusu, günlükleri almak üzere düğümün kubelet'ine bağlanmak için 10250 numaralı bağlantı noktasını kullanır. Bağlantı noktası 10250 engellenirse kubectl günlükleri ve diğer özellikler yalnızca tünel bileşeninin zamanlandığı düğümlerde çalışan podlar için çalışır. Daha fazla bilgi için bkz. Kubernetes bağlantı noktaları ve protokolleri: Çalışan düğümleri.

Tünel bileşenleri veya sunucu ile istemci arasındaki bağlantı kurulamadığından, aşağıdaki gibi işlevler beklendiği gibi çalışmaz:

  • Erişim denetleyicisi web kancaları

  • Günlük alma özelliği ( kubectl logs komutunu kullanarak)

  • Kapsayıcıda komut çalıştırma veya kapsayıcının içine girme ( kubectl exec komutunu kullanarak)

  • Podun bir veya daha fazla yerel bağlantı noktasını iletme ( kubectl port-forward komutunu kullanarak)

Neden 1: Bir ağ güvenlik grubu (NSG) 10250 numaralı bağlantı noktasını engelliyor

Not

Bu neden, AKS kümenizde olabilecek tüm tünel bileşenleri için geçerlidir.

Azure sanal ağındaki Azure kaynaklarına gelen ve bu kaynaklardan gelen ağ trafiğini filtrelemek için bir Azure ağ güvenlik grubu (NSG) kullanabilirsiniz. Ağ güvenlik grubu, çeşitli Azure kaynakları arasında gelen ve giden ağ trafiğine izin veren veya reddeden güvenlik kuralları içerir. Her kural için kaynak ve hedef, bağlantı noktası ve protokol belirtebilirsiniz. Daha fazla bilgi için bkz. Ağ güvenlik grupları ağ trafiğini filtreleme.

NSG 10250 numaralı bağlantı noktasını sanal ağ düzeyinde engellerse, tünel işlevleri (günlükler ve kod yürütme gibi) yalnızca tünel podlarının zamanlandığı düğümlerde zamanlanan podlar için çalışır. Düğümleri tünele ulaşamayacağından ve tünel diğer düğümlerde zamanlandığından diğer podlar çalışmaz. Bu durumu doğrulamak için netcat (nc) veya telnet komutlarını kullanarak bağlantıyı test edebilirsiniz. Az vmss run-command invoke komutunu çalıştırarak bağlantı testini gerçekleştirebilir ve başarılı olup olmadığını, zaman aşımına uğradıklarından veya başka bir soruna neden olup olmadığını doğrulayabilirsiniz:

az vmss run-command invoke --resource-group <infra-or-MC-resource-group> \
    --name <virtual-machine-scale-set-name> \
    --command-id RunShellScript \
    --instance-id <instance-id> \
    --scripts "nc -v -w 2 <ip-of-node-that-schedules-the-tunnel-component> 10250" \
    --output tsv \
    --query 'value[0].message'

Çözüm 1: 10250 numaralı bağlantı noktasına erişime izin vermek için NSG kuralı ekleme

NSG kullanıyorsanız ve belirli kısıtlamalarınız varsa, sanal ağ düzeyinde 10250 numaralı bağlantı noktası trafiğine izin veren bir güvenlik kuralı eklediğinizden emin olun. Aşağıdaki Azure portal görüntüsünde örnek bir güvenlik kuralı gösterilmektedir:

Azure portal gelen güvenlik kuralı ekle bölmesinin ekran görüntüsü. Hedef bağlantı noktası aralıkları kutusu, yeni güvenlik kuralı için 10250 olarak ayarlanır.

Daha kısıtlayıcı olmak istiyorsanız, yalnızca alt ağ düzeyinde 10250 numaralı bağlantı noktasına erişime izin vekleyebilirsiniz.

Not

  • Öncelik alanı buna göre ayarlanmalıdır. Örneğin, birden çok bağlantı noktasını reddeden bir kuralınız varsa (bağlantı noktası 10250 dahil), görüntüde gösterilen kuralın daha düşük bir öncelik numarası olmalıdır (düşük sayılar daha yüksek önceliğe sahiptir). Öncelik hakkında daha fazla bilgi için bkz. Güvenlik kuralları.

  • Bu çözümü uyguladıktan sonra herhangi bir davranış değişikliği görmüyorsanız tünel bileşeni podlarını yeniden oluşturabilirsiniz. Bu podların silinmesi, bunların yeniden oluşturulmasına neden olur.

Neden 2: Karmaşık Olmayan Güvenlik Duvarı (UFW) aracı 10250 numaralı bağlantı noktasını engelliyor

Not

Bu neden, AKS kümenizde bulunan tüm tünel bileşenleri için geçerlidir.

Karmaşık Olmayan Güvenlik Duvarı (UFW), netfilter güvenlik duvarını yönetmeye yönelik bir komut satırı programıdır. AKS düğümleri Ubuntu kullanır. Bu nedenle, UFW varsayılan olarak AKS düğümlerine yüklenir, ancak UFW devre dışı bırakılır.

Varsayılan olarak, UFW etkinleştirilirse 10250 numaralı bağlantı noktası da dahil olmak üzere tüm bağlantı noktalarına erişimi engeller. Bu durumda, sorun giderme amacıyla AKS küme düğümlerine bağlanmak için Secure Shell (SSH) kullanma olasılığınız düşüktür. Bunun nedeni UFW'nin 22 numaralı bağlantı noktasını da engellemesi olabilir. Sorun gidermek için az vmss run-command invoke komutunu çalıştırarak UFW'nin etkinleştirilip etkinleştirilmediğini denetleyan bir ufw komutu çağırabilirsiniz:

az vmss run-command invoke --resource-group <infra-or-MC-resource-group> \
    --name <virtual-machine-scale-set-name> \
    --command-id RunShellScript \
    --instance-id <instance-id> \
    --scripts "ufw status" \
    --output tsv \
    --query 'value[0].message'

Sonuçlar UFW'nin etkinleştirildiğini gösteriyorsa ve özellikle 10250 numaralı bağlantı noktasına izin vermiyorsa ne olur? Bu durumda, tünel işlevleri (günlükler ve kod yürütme gibi) UFW'nin etkinleştirildiği düğümlerde zamanlanan podlar için çalışmaz. Sorunu çözmek için UFW'de aşağıdaki çözümlerden birini uygulayın.

Önemli

Herhangi bir değişiklik yapmak için bu aracı kullanmadan önce, kümenizin desteklenmeyen bir senaryoya girmesini önlemek için AKS destek ilkesini (özellikle düğüm bakımı ve erişimi) gözden geçirin.

Not

Bir çözüm uyguladıktan sonra herhangi bir davranış değişikliği görmüyorsanız tünel bileşeni podlarını yeniden oluşturabilirsiniz. Bu podların silinmesi, bunların yeniden oluşturulmasına neden olur.

Çözüm 2a: Karmaşık Olmayan Güvenlik Duvarını Devre Dışı Bırakma

UFW'yi devre dışı bırakmak için aşağıdaki az vmss run-command invoke komutu çalıştırın:

az vmss run-command invoke --resource-group <infra-or-MC-resource-group> \
    --name <virtual-machine-scale-set-name> \
    --command-id RunShellScript \
    --instance-id <instance-id> \
    --scripts "ufw disable" \
    --output tsv \
    --query 'value[0].message'

Çözüm 2b: 10250 numaralı bağlantı noktasına erişime izin vermek için Karmaşık Olmayan Güvenlik Duvarı'nı yapılandırma

UFW'yi 10250 numaralı bağlantı noktasına erişime izin vermek üzere zorlamak için aşağıdaki az vmss run-command invoke komutu çalıştırın:

az vmss run-command invoke --resource-group <infra-or-MC-resource-group> \
    --name <virtual-machine-scale-set-name> \
    --command-id RunShellScript \
    --instance-id <instance-id> \
    --scripts "ufw allow 10250" \
    --output tsv \
    --query 'value[0].message'

Neden 3: Iptables aracı 10250 numaralı bağlantı noktasını engelliyor

Not

Bu neden, AKS kümenizde bulunan tüm tünel bileşenleri için geçerlidir.

iptables aracı, sistem yöneticisinin Linux güvenlik duvarının IP paket filtresi kurallarını yapılandırmasına olanak tanır. 10250 numaralı bağlantı noktasında iletişimi engellemek için kuralları yapılandırabilirsiniz iptables .

10250 numaralı bağlantı noktasının engellenip engellenmediğini veya ilişkili paketlerin bırakılıp bırakılmadığını denetlemek için düğümlerinizin kurallarını görüntüleyebilirsiniz. Bunu yapmak için aşağıdaki iptables komutu çalıştırın:

iptables --list --line-numbers

Çıkışta veriler zincir de dahil olmak üzere INPUT çeşitli zincirler halinde gruplandırılır. Her zincir, aşağıdaki sütun başlıkları altında bir kural tablosu içerir:

  • num (kural numarası)
  • target
  • prot (protokol)
  • opt
  • source
  • destination

Zincirde hedefin INPUT , protokolün tcpve hedefin DROPtcp dpt:10250ise ? olduğu bir kural var mı? Varsa, iptables hedef bağlantı noktası 10250'ye erişimi engelliyordur.

Çözüm 3: 10250 numaralı bağlantı noktasında erişimi engelleyen iptables kuralını silin

10250 numaralı bağlantı noktasına erişimi engelleyen kuralı silmek iptables için aşağıdaki komutlardan birini çalıştırın:

iptables --delete INPUT --jump DROP --protocol tcp --source <ip-number> --destination-port 10250
iptables --delete INPUT <input-rule-number>

Tam senaryonuzu veya olası senaryonuzu ele almak için komutunu çalıştırarak iptables --helpiptables el kitabını denetlemenizi öneririz.

Önemli

Herhangi bir değişiklik yapmak için bu aracı kullanmadan önce, kümenizin desteklenmeyen bir senaryoya girmesini önlemek için AKS destek ilkesini (özellikle düğüm bakımı ve erişimi) gözden geçirin.

Neden 4: Çıkış bağlantı noktası 1194 veya 9000 açılmıyor

Not

Bu neden yalnızca tunnel-front ve aks-link podları için geçerlidir.

AKS güvenlik duvarı gibi çıkış trafiği kısıtlamaları var mı? Varsa, podun doğru işlevselliğini tunnel-front etkinleştirmek için 9000 numaralı bağlantı noktası gereklidir. Benzer şekilde, pod için aks-link 1194 numaralı bağlantı noktası gereklidir.

Konnectivity, 443 numaralı bağlantı noktasına dayanır. Varsayılan olarak, bu bağlantı noktası açıktır. Bu nedenle, bu bağlantı noktasındaki bağlantı sorunları konusunda endişelenmeniz gerekmez.

Çözüm 4: 1194 veya 9000 numaralı bağlantı noktasını açın

Sanal gerecin 1194 numaralı bağlantı noktasına veya 9000 numaralı bağlantı noktasına erişime izin verdiğinden emin olun. Gerekli kurallar ve bağımlılıklar hakkında daha fazla bilgi için bkz. Azure Genel gerekli ağ kuralları.

Neden 5: Kaynak Ağ Adresi Çevirisi (SNAT) bağlantı noktası tükenmesi

Not

Bu neden, AKS kümenizde bulunan tüm tünel bileşenleri için geçerlidir. Ancak, özel AKS kümeleri için geçerli değildir. Kaynak Ağ Adresi Çevirisi (SNAT) bağlantı noktası tükenmesi yalnızca genel iletişim için oluşabilir. Özel AKS kümeleri için API sunucusu AKS sanal ağının veya alt ağının içindedir.

SNAT bağlantı noktası tükenmesi oluşursa (başarısız SNAT bağlantı noktaları), düğümler API sunucusuna bağlanamaz. Tünel kapsayıcısı API sunucusu tarafındadır. Bu nedenle tünel bağlantısı kurulamaz.

SNAT bağlantı noktası kaynakları tükenirse, var olan akışlar bazı SNAT bağlantı noktalarını serbest bırakana kadar giden akışlar başarısız olur. Azure Load Balancer akış kapandığında SNAT bağlantı noktalarını geri alır. Boşta kalan akışlardan SNAT bağlantı noktalarını geri kazanmak için dört dakikalık boşta kalma zaman aşımı kullanır.

Aşağıdaki bölümlerde açıklandığı gibi AKS yük dengeleyici ölçümlerinden veya hizmet tanılamalarından SNAT bağlantı noktalarını görüntüleyebilirsiniz. SNAT bağlantı noktalarını görüntüleme hakkında daha fazla bilgi için bkz. Nasıl yaparım? giden bağlantı istatistiklerimi gözden geçirin.

AKS yük dengeleyici ölçümleri

SNAT bağlantı noktalarını görüntülemek üzere AKS yük dengeleyici ölçümlerini kullanmak için şu adımları izleyin:

  1. Azure portalKubernetes hizmetleri'ni arayın ve seçin.

  2. Kubernetes hizmetleri listesinde kümenizin adını seçin.

  3. Kümenin menü bölmesinde Ayarlar başlığını bulun ve Özellikler'i seçin.

  4. Altyapı kaynak grubu altında listelenen adı seçin.

  5. kubernetes yük dengeleyicisini seçin.

  6. Yük dengeleyicinin menü bölmesinde İzleme başlığını bulun ve Ölçümler'i seçin.

  7. Ölçüm türü için SNAT Bağlantı Sayısı'nı seçin.

  8. Bölme uygula'yı seçin.

  9. Bölme ölçütü değerini Bağlantı Durumu olarak ayarlayın.

Hizmet tanılaması

SNAT bağlantı noktalarını görüntülemek üzere hizmet tanılamasını kullanmak için şu adımları izleyin:

  1. Azure portalKubernetes hizmetleri'ni arayın ve seçin.

  2. Kubernetes hizmetleri listesinde kümenizin adını seçin.

  3. Kümenin menü bölmesinde Sorunları tanılama ve çözme'yi seçin.

  4. Bağlantı Sorunları'nı seçin.

  5. SNAT Bağlantısı ve Bağlantı Noktası Ayırma'nın altında Ayrıntıları görüntüle'yi seçin.

  6. Gerekirse zaman dilimini özelleştirmek için Zaman Aralığı düğmesini kullanın.

Çözüm 5a: Uygulamanın bağlantı havuzu kullandığından emin olun

Bir uygulama mevcut bağlantıları yeniden kullanmadığından bu davranış oluşabilir. İstek başına bir giden bağlantı oluşturmamanızı öneririz. Böyle bir yapılandırma bağlantı tükenmesine neden olabilir. Uygulama kodunun en iyi yöntemleri kullanıp kullanmadığını ve bağlantı havuzunu kullanıp kullanmadığını denetleyin. Çoğu kitaplık bağlantı havuzunu destekler. Bu nedenle, istek başına yeni bir giden bağlantı oluşturmanız gerekmez.

Çözüm 5b: Ayrılan giden bağlantı noktalarını ayarlama

Uygulama içindeki her şey yolundaysa, ayrılan giden bağlantı noktalarını ayarlamanız gerekir. Giden bağlantı noktası ayırma hakkında daha fazla bilgi için bkz. Ayrılan giden bağlantı noktalarını yapılandırma.

Çözüm 5c: Küme oluştururken Yönetilen Ağ Adresi Çevirisi (NAT) Ağ Geçidi kullanma

Giden bağlantılar için Yönetilen Ağ Adresi Çevirisi (NAT) Ağ Geçidi kullanmak üzere yeni bir küme ayarlayabilirsiniz. Daha fazla bilgi için bkz. Yönetilen NAT Ağ Geçidi ile AKS kümesi oluşturma.

Üçü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.