Rancher'daki K3S Pods için Ağ Erişim Sorunlarını Çözme

Rancher'daki K3S Pods için Ağ Erişim Sorunlarını Çözme
Rancher'daki K3S Pods için Ağ Erişim Sorunlarını Çözme

K3S'de POD Ağ Sınırlamalarını Anlama 🛜

Rancher ve K3'lerle bir Kubernetes kümesi kurarken, ağ oluşturma büyük bir zorluk haline gelebilir. İşçi düğümleri harici ağlara ulaşabildiğinde yaygın bir sorun ortaya çıkar, ancak bu düğümlerde çalışan kapsüller kısıtlanır. Bu, özellikle düğümleriniz yapılandırılmış uygun yollara sahip olduğunda sinir bozucu olabilir, ancak baklalarınız izole kalır.

Bu senaryo, işçi düğümlerinin daha geniş bir ağ mimarisinin bir parçası olduğu ortamlarda genellikle karşılaşılır. Örneğin, işçi düğümleriniz 192.168.1.x alt ağına ait olabilir ve statik yollar aracılığıyla 192.168.2.x gibi başka bir alt ağa erişebilir. Ancak, bu düğümlerde çalışan kapsüller 192.168.2.x'de makinelerle iletişim kuramaz.

Buradaki zorluk, Kubernetes'in ağ oluşturmayı nasıl yönettiği ve trafiğin kapsüllerden dış hedeflere nasıl aktığını. Uygun yapılandırma olmadan, POD'lar yalnızca kendi düğümlerinin ağındaki kaynaklara erişebilir ve harici makineleri erişilemez bırakabilir. Bunun neden olduğunu anlamak bir çözüm bulmak için çok önemlidir.

Bu makalede, bölmelerin neden bu ağ kısıtlamalarıyla karşılaştıklarını ve harici alt ağlara erişmelerini nasıl sağlayacaklarını araştıracağız. Pratik adımlar ve gerçek dünya örnekleri sayesinde, bu bağlantı boşluğunu kapatmanıza yardımcı olacağız. Hadi dalalım! 🚀

Emretmek Kullanım örneği
iptables -t nat -A POSTROUTING -s 10.42.0.0/16 -o eth0 -j MASQUERADE Kaynak IP'lerini maskelendirerek baklaların harici ağlarla iletişim kurmasına izin vermek için bir NAT (ağ adresi çevirisi) kuralı ekler.
echo 1 >echo 1 > /proc/sys/net/ipv4/ip_forward Bir ağdan paketlerin diğerine yönlendirilmesine izin vererek IP yönlendirmeyi sağlar, bu da çapraz subnet iletişimi için gereklidir.
ip route add 192.168.2.0/24 via 192.168.1.1 dev eth0 192.168.1.1 ağ geçidi aracılığıyla trafiği 192.168.2.x ağına yönlendiren statik bir yol ekler.
iptables-save >iptables-save > /etc/iptables/rules.v4 Bir sistem yeniden başlatıldıktan sonra aktif kalmaları için iptables kurallarına devam eder.
systemctl restart networking Yeni yapılandırılmış rotaları ve güvenlik duvarı kurallarını uygulamak için ağ hizmetini yeniden başlatır.
hostNetwork: true Bir kapsayıcının ana bilgisayarın ağını paylaşmasına izin veren bir Kubernetes Pod yapılandırması, dahili küme ağ kısıtlamalarını atlayarak.
securityContext: { privileged: true } Ana makinede ağ ayarlarını değiştirmesine izin veren bir Kubernetes konteyneri yüksek izinler verir.
ip route show Geçerli yönlendirme tablosunu görüntüler ve alt ağlar arasındaki bağlantı sorunlarının hata ayıklamasına yardımcı olur.
command: ["sh", "-c", "ping -c 4 192.168.2.10"] Harici erişimi doğrulamak için bir Kubernetes Pod içinde temel bir ağ bağlantı testi çalıştırır.
echo "192.168.2.0/24 via 192.168.1.1 dev eth0" >>echo "192.168.2.0/24 via 192.168.1.1 dev eth0" >> /etc/network/interfaces Yeniden başlatıldıktan sonra kalmasını sağlayarak sistemin ağ yapılandırma dosyasına kalıcı bir statik yol ekler.

K3S Pods için ağlar arası bağlantının sağlanması

Dağıtırken K3S Rancher ile, bölmelerin hemen alt ağının dışındaki makinelerle iletişim kurması gerektiğinde ağ oluşturma sorunları ortaya çıkabilir. Komut dosyaları, yönlendirme kurallarını değiştirerek ve NAT (Ağ Adresi Çevirisi) yapılandırarak bu sorunu ele alır. Bir anahtar komut dosyası kullanır iptables Maskeli bir kural uygulamak için, bölme trafiğinin işçi düğümünün kendisinden gelmesini sağlamak. Bu, harici makinelerin varsayılan ağ izolasyonunun üstesinden gelerek kapsüllere yanıt vermesini sağlar.

Başka bir yaklaşım, statik yolların manuel olarak eklenmesini içerir. İşçi düğümleri genellikle statik yollar aracılığıyla diğer ağlara erişebilir, ancak Kubernetes Pods bu rotaları varsayılan olarak devralmaz. Düğüm ağ geçidi aracılığıyla 192.168.2.x'e açıkça bir yol ekleyen bir komut dosyası çalıştırarak, bölmelerin bu makinelere ulaşabileceğinden emin oluruz. Bu, farklı departmanlar için ayrı VLAN'lara sahip şirketler gibi birden fazla dahili ağın iletişim kurması gereken ortamlarda gereklidir.

Süreci otomatikleştirmek için Kubernetes Daemonset dağıtılabilir. Bu, ağ yapılandırmalarının kümedeki tüm düğümlere tutarlı bir şekilde uygulanmasını sağlar. DaemonSet, ağ komutlarını yürüten ve onu ölçeklenebilir bir çözüm haline getiren ayrıcalıklı bir kap çalıştırır. Bu yöntem, her bir düğümü manuel olarak yapılandırmanın pratik olmayacağı büyük bir işçi düğümü filosunu yönetirken özellikle yararlıdır. Başka bir alt ağda barındırılan eski bir veritabanına erişim gerektiren bulut tabanlı bir uygulamayı düşünün-bu kurulum sorunsuz bağlantı sağlar.

Son olarak, test çok önemlidir. Sağlanan komut dosyası, harici bir makineye ping atmaya çalışan basit bir meşgul kutusu bölmesi dağıtır. Ping başarılı olursa, bağlantı düzeltmesinin çalıştığını doğrular. Bu tür gerçek dünya doğrulaması, kırık ağ yapılandırmalarının hizmet kesintilerine yol açabileceği üretim ortamlarında paha biçilmezdir. Bu yaklaşımları birleştirerek-NAT, statik rotalar, Kubernetes otomasyonu ve canlı testler-K3S kümelerinde net iş erişimi için sağlam bir çözüm oluştururuz. 🚀

K3'lerde harici ağlara bakla bağlantısının sağlanması

Pod iletişimi için NAT yapılandırmak için iptables kullanma

#!/bin/bash
# Enable IP forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
# Add NAT rule to allow pods to access external networks
iptables -t nat -A POSTROUTING -s 10.42.0.0/16 -o eth0 -j MASQUERADE
# Persist iptables rule
iptables-save > /etc/iptables/rules.v4
# Restart networking service
systemctl restart networking

K3S Pods'un rota enjeksiyonu yoluyla harici alt ağlara ulaşmasına izin vermek

Statik yollar ve CNI yapılandırmalarını kullanma

#!/bin/bash
# Add a static route to allow pods to reach 192.168.2.x
ip route add 192.168.2.0/24 via 192.168.1.1 dev eth0
# Verify the route
ip route show
# Make the route persistent
echo "192.168.2.0/24 via 192.168.1.1 dev eth0" >> /etc/network/interfaces
# Restart networking
systemctl restart networking

Ağ kurallarını uygulamak için bir Kubernetes DaemonSet kullanmak

Düğüm Ağını Yapılandırmak İçin Bir Kubernetes Daemonset Dağıtım

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: k3s-network-fix
spec:
  selector:
    matchLabels:
      app: network-fix
  template:
    metadata:
      labels:
        app: network-fix
    spec:
      hostNetwork: true
      containers:
      - name: network-fix
        image: alpine
        command: ["/bin/sh", "-c"]
        args:
        - "ip route add 192.168.2.0/24 via 192.168.1.1"
        securityContext:
          privileged: true

Ağ bağlantısını bir kapsülten test etmek

Ağ erişimini doğrulamak için bir Kubernetes meşgul kutusu kullanma

apiVersion: v1
kind: Pod
metadata:
  name: network-test
spec:
  containers:
  - name: busybox
    image: busybox
    command: ["sh", "-c", "ping -c 4 192.168.2.10"]
  restartPolicy: Never

Çoklu-Subnet İletişim için K3S Ağı Optimize Etme

Önemli ama çoğu zaman gözden kaçan bir yönü K3S Networking kapsül ağı arayüzünün (CNI) POD bağlantısının yönetilmesinde rolüdür. Varsayılan olarak, K3S, ağ oluşturmayı basitleştiren ancak kutudan çıkmış gelişmiş yönlendirmeyi desteklemeyen CNI olarak pazen kullanır. POD'ların birincil alt ağının dışındaki kaynaklara erişmesi gereken durumlarda, pazelin patiska veya silium gibi daha zengin bir CNI ile değiştirilmesi ek esneklik ve özel yönlendirme seçenekleri sağlayabilir.

Bir diğer önemli faktör DNS çözünürlüğüdür. Yönlendirme düzgün bir şekilde yapılandırılmış olsa bile, POD'lar yanlış DNS ayarları nedeniyle harici hizmetlere bağlanmak için mücadele edebilir. Kubernetes genellikle harici ağlardan ana bilgisayar adlarını otomatik olarak çözemeyen Coredns'e dayanır. Özel DNS ayarlarını küme içinde yapılandırmak, diğer alt ağlardaki bakla ve makineler arasında sorunsuz iletişimi sağlamaya ve hem erişilebilirliği hem de performansı artırmaya yardımcı olabilir.

Güvenlik hususları da önemli bir rol oynamaktadır. POD erişimini yerel ağın ötesine genişletirken, hassas kaynakların ortaya çıkmasını önlemek için güvenlik duvarı kuralları ve ağ politikaları dikkatle ayarlanmalıdır. Kubernetes ağ politikalarının uygulanması, gerekli bağlantılara izin verirken gereksiz trafiği kısıtlayabilir. Örneğin, bir kapsül içinde çalışan bir web hizmetinin uzak bir veritabanına erişmesi gerekebilir, ancak tüm harici makinelere sınırsız erişime sahip olmamalıdır. Bu politikaları yönetmek, gerekli bağlantıyı korurken güvenliği etkin bir şekilde artırır. 🔐

K3S Ağı ve Çapraz Subnet Erişim Hakkında Sık Sorulan Sorular

  1. İşçi düğümleri neden harici ağlara erişebilir, ancak kapsüller yapamaz?
  2. Pods bir dahili kullanır K3S Ağ, ana bilgisayarın ağ yığınından ayrı. Varsayılan olarak, işçi düğümünün statik yollarını devralmazlar.
  3. K3S Pods'un harici bir alt ağa erişmesine nasıl izin verebilirim?
  4. Yönlendirme kurallarını kullanarak değiştirebilirsiniz iptables veya statik yollar ekleyin ip route add Harici makinelerle POD iletişimini etkinleştirmek için.
  5. Flanel, alt ağ yönlendirmesini destekliyor mu?
  6. Hayır, pazen varsayılan olarak gelişmiş yönlendirme sağlamaz. Calis veya Cilium ile değiştirilmesi, ağ politikaları ve yolları üzerinde daha fazla kontrol sunar.
  7. Kubernetes ağ politikaları harici erişimi yönetmeye yardımcı olabilir mi?
  8. Evet, POD'ların harici hizmetlerle iletişim kurabileceği kuralları tanımlamanıza izin verir, güvenlik ve bağlantıyı geliştirir.
  9. Bir kapsülün harici bir makineye ulaşıp ulaşamayacağını test etmenin en iyi yolu nedir?
  10. Kullanarak geçici bir bölme dağıtım kubectl run MuslyBox gibi bir görüntü ile kullanın ping veya curl Bağlantıyı kontrol etmek için kapsülün içinde.

Kubernetes Pod bağlantısını geliştirme

K3S ağını yapılandırma, alt ağ erişimi destekleyecek şekilde yapılandırma, yönlendirme stratejileri, güvenlik duvarı ayarlamaları ve Kubernetes ağ politikalarının bir karışımını gerektirir. İptables, statik yollar veya gelişmiş bir CNI kullanmak olsun, POD'ların nasıl iletişim kurduğunu anlamak, bu sorunları verimli bir şekilde çözmenin anahtarıdır. Bu çözümler, Kubernetes dağıtımlarının ağ oluşturmadan ölçeklenebilmesini sağlar.

Test ve doğrulama uygulama kadar önemlidir. Canlı ağ testi için meşgul kutusu gibi araçları kullanmak, bağlantı düzeltmelerini onaylamaya yardımcı olur. İyi optimize edilmiş bir ağ kurulumu yalnızca performansı iyileştirmekle kalmaz, aynı zamanda güvenliği de güçlendirir. Uygun yapılandırma ile K3S kümeleri harici sistemlere sorunsuz bir şekilde bağlanabilir ve dağıtımları daha çok yönlü hale getirir. 🔧

Daha fazla okuma ve referans
  1. K3S Ağı Üzerine Resmi Çiftlik Sahibi Belgeleri: Rancher K3s Networking
  2. Kubernetes Ağ Politikaları Resmi Kılavuzu: Kubernetes Ağ Politikaları
  3. Gelişmiş Kubernetes Ağı için Calico CNI: Proje Calico
  4. Linux iptables ve yönlendirme en iyi uygulamalar: NetFilter/Iptables nasıl
  5. Kubernetes Pod Networking'i Anlama: CNCF Kubernetes Networking 101
Güvenilir kaynaklar ve teknik referanslar
  1. Resmi Kubernetes Pod-External Network İletişimi Anlamak İçin Ağ Dokümantasyonu: Kubernetes Networking .
  2. K3S ağının yapılandırılması ve bağlantı sorunlarını giderme konusundaki çiftlik sahibinin resmi kılavuzu: Rancher K3s Networking .
  3. Calico'nun Kubernetes için Gelişmiş Ağ Çözümleri, Çapraz Subnet Yönlendirme: Calico Networking .
  4. Varsayılan K3S ağ davranışını anlamak için pazen belgeleri: Flanel Github .
  5. İşçi düğümlerinin ötesinde POD erişimini genişletmek için Linux iptables ve yönlendirme yapılandırmaları: Iptables Archwiki .