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ı anlatılmaktadır.
Not
Daha önce AKS tüneli bileşeni şeklindeydi tunnel-front
. Artık bir yukarı akış Kubernetes bileşeni olan Konnectivity hizmetine geçirilmiştir. Bu 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ıyorsunuz:
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 çevirme: g/ç zaman aşımı
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: Ağ güvenlik grubu (NSG) 10250 numaralı bağlantı noktasını engelliyor
Not
Bu neden, AKS kümenizde sahip olabileceğiniz 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 bunları reddeden güvenlik kuralları içerir. Her kural için kaynak, hedef, bağlantı noktası ve protokol belirtebilirsiniz. Daha fazla bilgi için bkz . Ağ güvenlik gruplarının ağ trafiğini filtreleme.
NSG sanal ağ düzeyinde 10250 numaralı bağlantı noktasını 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. Diğer podlar çalışmaz çünkü düğümleri tünele ulaşamaz ve tünel diğer düğümlerde zamanlanır. 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ı olduğunu, 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:
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.
Derlenmemiş 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 etkinse 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) kullanmanız pek olası olmaz. 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'ye 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
Çıktıda veriler zincir dahil olmak üzere çeşitli zincirlerINPUT
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 tcp
ve hedefin DROP
tcp dpt:10250
ise ? 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 --help
iptable'lar 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.
Konnektivite 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ı hakkında endişelenmeniz gerekmez.
Çözüm 4: 9000 numaralı bağlantı noktasını açın
Konnectivity hizmetine taşınsa datunnel-front
, bazı AKS kümeleri hala tunnel-front
9000 numaralı bağlantı noktasını kullanan kullanır. Sanal gerecin veya herhangi bir ağ cihazının veya yazılımının 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ı kurulmayacak.
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. SNAT bağlantı noktalarını boşta akışlardan 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. giden bağlantı istatistiklerimi gözden Nasıl yaparım??
AKS yük dengeleyici ölçümleri
AKS yük dengeleyici ölçümlerini kullanarak SNAT bağlantı noktalarını görüntülemek için şu adımları izleyin:
Kubernetes hizmetleri listesinde kümenizin adını seçin.
Kümenin menü bölmesinde Ayarlar başlığını bulun ve Özellikler'i seçin.
Altyapı kaynak grubu altında listelenen adı seçin.
kubernetes yük dengeleyicisini seçin.
Yük dengeleyicinin menü bölmesinde İzleme başlığını bulun ve Ölçümler'i seçin.
Ölçüm türü için SNAT Bağlantı Sayısı'nı seçin.
Bölme uygula'yı seçin.
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:
Kubernetes hizmetleri listesinde kümenizin adını seçin.
Kümenin menü bölmesinde Sorunları tanılama ve çözme'yi seçin.
Bağlantı Sorunları'nı seçin.
SNAT Bağlantısı ve Bağlantı Noktası Ayırma'nın altında Ayrıntıları görüntüle'yi seçin.
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
Bu davranış, bir uygulamanın mevcut bağlantıları yeniden kullanmadığı için 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çinde 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.