Calico ile Ağ Politikası Uygulama Seçeneklerini Anlama

Calico ile Ağ Politikası Uygulama Seçeneklerini Anlama

Calico ağ eklentisi, donanım ana bilgisayarlarını, sanal makineleri ve bölmeleri korumak için birleşik bir söz dizimi ile çok çeşitli ağ politikaları sağlar. Bu politikalar bir ad alanı içinde uygulanabilir veya aşağıdakiler için geçerli olan genel ağ politikaları olabilir: ana bilgisayar uç noktası (doğrudan ana bilgisayar üzerinde çalışan uygulamaları korumak için - ana bilgisayar bir sunucu veya sanal makine olabilir) veya iş yükü uç noktası (konteynerlerde veya barındırılan sanal makinelerde çalışan uygulamaları korumak için). Calico politikaları, preDNAT, unraraced ve applicationOnForward gibi seçenekleri kullanarak bir paketin yolundaki çeşitli noktalarda güvenlik önlemleri uygulamanıza olanak tanır. Bu seçeneklerin nasıl çalıştığını anlamak, genel sisteminizin güvenliğini ve performansını artırmanıza yardımcı olabilir. Bu makale, paket işleme yollarında (iptabels zincirleri) neler olduğuna vurgu yaparak, ana bilgisayar uç noktalarına uygulanan bu Calico politika seçeneklerinin (preDNAT, unraracked ve applicationOnForward) özünü açıklamaktadır.

Bu makale, Kubernetes ve Calico ağ politikalarının nasıl çalıştığına dair temel bir anlayışa sahip olduğunuzu varsaymaktadır. Değilse denemenizi öneririz temel ağ politikası eğitimi и ana bilgisayar koruma eğitimi Bu makaleyi okumadan önce Calico'yu kullanın. Ayrıca çalışmayla ilgili temel bir anlayışa sahip olmanızı da bekliyoruz. iptables linux'ta.

patiska küresel ağ politikası etiketlere göre bir dizi erişim kuralı uygulamanıza olanak tanır (ana makine ve iş yükü/kapsül gruplarına). Heterojen sistemleri (sanal makineler, doğrudan donanım üzerindeki bir sistem veya kubernetes altyapısı) bir arada kullanıyorsanız bu çok kullanışlıdır. Ayrıca, kümenizi (düğümleri) bir dizi bildirime dayalı politika kullanarak koruyabilir ve gelen trafiğe ağ politikaları uygulayabilirsiniz (örneğin, NodePorts veya Harici IP'ler hizmeti aracılığıyla).

Temel düzeyde, Calico bir bölmeyi ağa bağladığında (aşağıdaki şemaya bakın), onu sanal bir Ethernet arabirimi (veth) kullanarak ana bilgisayara bağlar. Pod tarafından gönderilen trafik, ana bilgisayara bu sanal arayüzden gelir ve sanki fiziksel bir ağ arayüzünden geliyormuş gibi işlenir. Varsayılan olarak Calico bu arayüzleri caliXXX olarak adlandırır. Trafik sanal arayüz üzerinden geldiğinden, sanki kapsül bir atlama uzaktaymış gibi iptables üzerinden geçer. Bu nedenle, trafik bir bölmeye geldiğinde/poddan geldiğinde, ana bilgisayarın bakış açısından iletilir.

Calico çalıştıran bir Kubernetes düğümünde, bir sanal arayüzü (veth) bir iş yüküne aşağıdaki gibi eşleyebilirsiniz. Aşağıdaki örnekte, veth#10'un (calic1cbf1ca0f8) calico-monitoring ad alanındaki cnx-manager-*'a bağlı olduğunu görebilirsiniz.

[centos@ip-172-31-31-46 K8S]$ sudo ip a
...
10: calic1cbf1ca0f8@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1440 qdisc noqueue state UP group default
    link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netnsid 5
    inet6 fe80::ecee:eeff:feee:eeee/64 scope link
       valid_lft forever preferred_lft forever
...

[centos@ip-172-31-31-46 K8S]$ calicoctl get wep --all-namespaces
...
calico-monitoring cnx-manager-8f778bd66-lz45m                            ip-172-31-31-46.ec2.internal 192.168.103.134/32
calic1cbf1ca0f8
...

Calico ile Ağ Politikası Uygulama Seçeneklerini Anlama

Calico'nun her iş yükü için bir veri arayüzü oluşturduğu göz önüne alındığında politikaları nasıl uyguluyor? Bunu yapmak için Calico, iptables'ı kullanarak paket işleme yolunun çeşitli zincirlerinde kancalar oluşturur.

Aşağıdaki diyagram iptables'da (veya netfilter alt sisteminde) paket işlemede yer alan zincirleri göstermektedir. Bir paket bir ağ arayüzü üzerinden ulaştığında, öncelikle ÖN YÖNLENDİRME zincirinden geçer. Daha sonra bir yönlendirme kararı verilir ve buna dayanarak paket ya INPUT'tan (ana bilgisayar işlemlerine yönlendirilir) ya da FORWARD'dan (ağdaki bir bölmeye veya başka bir düğüme yönlendirilir) geçer. Yerel süreçten paket, kabloya gönderilmeden önce OUTPUT ve ardından POSTROUTING zincirinden geçer.

Pod'un aynı zamanda iptables işleme açısından harici bir varlık (veth'e bağlı) olduğunu unutmayın. Özetleyelim:

  • İletilen trafik (nat, yönlendirilmiş veya bir bölmeye/kapsülden) ÖN YÖNLENDİRME - İLERİ - SONRA YÖNLENDİRME zincirlerinden geçer.
  • Yerel ana bilgisayar işlemine giden trafik, PREROUTING - INPUT zincirinden geçer.
  • Yerel ana bilgisayar işleminden gelen trafik OUTPUT - POSTROUTING zincirinden geçer.

Calico ile Ağ Politikası Uygulama Seçeneklerini Anlama

Calico, politikaları tüm zincirlere uygulamanıza olanak tanıyan politika seçenekleri sunar. Bunu aklımızda tutarak Calico'da bulunan farklı politika yapılandırma seçeneklerine bakalım. Aşağıdaki seçenekler listesindeki sayılar, yukarıdaki diyagramdaki sayılara karşılık gelir.

  1. İş yükü uç noktası (kapsül) politikası
  2. Ana makine uç noktası politikası
  3. ApplyOnForward seçeneği
  4. PreDNAT Politikası
  5. Takip Edilmeyen Politika

İlkelerin iş yükü uç noktalarına (Kubernetes bölmeleri veya OpenStack VM'leri) nasıl uygulandığına bakarak başlayalım ve ardından ana bilgisayar uç noktalarına ilişkin ilke seçeneklerine bakalım.

İş Yükü Uç Noktaları

İş Yükü Uç Nokta Politikası (1)

Bu, Kubernetes bölmelerinizi korumaya yönelik bir seçenektir. Calico, Kubernetes NetworkPolicy ile çalışmayı destekler ancak aynı zamanda Calico NetworkPolicy ve GlobalNetworkPolicy gibi ek politikalar da sağlar. Calico, her bölme (iş yükü) için bir zincir oluşturur ve iş yükünün INPUT ve OUTPUT zincirlerinde FORWARD zincirinin filtre tablosuna kancalanmasını sağlar.

Ana Bilgisayar Uç Noktaları

Ana Bilgisayar Uç Nokta Politikası (2)

CNI'ye (konteyner ağ arayüzü) ek olarak Calico politikaları, ana bilgisayarın kendisini koruma yeteneği sağlar. Calico'da, ana bilgisayar arayüzünün ve gerekirse bağlantı noktası numaralarının bir kombinasyonunu belirterek bir ana bilgisayar uç noktası oluşturabilirsiniz. Bu varlık için politikanın uygulanması, INPUT ve OUTPUT zincirlerindeki bir filtre tablosu kullanılarak gerçekleştirilir. Diyagramdan görebileceğiniz gibi, (2) düğüm/ana bilgisayardaki yerel işlemlere uygulanırlar. Yani, ana bilgisayar uç noktası için geçerli olan bir politika oluşturursanız bu, bölmelerinize giden/kapsüllerinizden gelen trafiği etkilemez. Ancak Calico politikalarını kullanarak ana makineniz ve bölmeleriniz için trafiği engellemek için tek bir arayüz/sözdizimi sağlar. Bu, heterojen bir ağ için politikaları yönetme sürecini büyük ölçüde basitleştirir. Küme güvenliğini geliştirmek için ana bilgisayar uç noktası ilkelerini yapılandırmak başka bir önemli kullanım durumudur.

ApplyOnForward Politikası (3)

ApplyOnForward seçeneği, ana bilgisayar tarafından iletilecek trafik de dahil olmak üzere politikaların ana bilgisayar uç noktasından geçen tüm trafiğe uygulanmasına izin vermek için Calico küresel ağ ilkesinde mevcuttur. Buna, yerel bölmeye veya ağdaki herhangi bir yere iletilen trafik de dahildir. Calico, PreDNAT kullanan ve izlenmeyen politikalar için bu ayarın etkinleştirilmesini gerektirir; aşağıdaki bölümlere bakın. Ek olarak, ApplyOnForward, sanal bir yönlendiricinin veya NAT yazılımının kullanıldığı durumlarda ana bilgisayar trafiğini izlemek için kullanılabilir.

Aynı ağ ilkesini hem ana bilgisayar işlemlerine hem de bölmelere uygulamanız gerekiyorsa ApplyOnForward seçeneğini kullanmanıza gerek olmadığını unutmayın. Tek yapmanız gereken gerekli ana bilgisayar uç noktası ve iş yükü uç noktası (pod) için bir etiket oluşturmaktır. Calico, uç nokta türünden (ana bilgisayar uç noktası veya iş yükü) bağımsız olarak etiketlere dayalı politikayı uygulayacak kadar akıllıdır.

PreDNAT Politikası (4)

Kubernetes'te, hizmet varlığı bağlantı noktaları, NodePorts seçeneği kullanılarak veya isteğe bağlı olarak (Calico kullanılırken), Küme IP'leri veya Harici IP'ler seçenekleri kullanılarak bunların reklamı yapılarak harici olarak kullanıma sunulabilir. Kube-proxy, DNAT kullanarak bir hizmete bağlı gelen trafiği ilgili hizmetin bölmelerine dengeler. Bu göz önüne alındığında, NodePorts üzerinden gelen trafiğe yönelik politikaları nasıl uygularsınız? Trafiğin DNAT (ana bilgisayar:bağlantı noktası ve karşılık gelen hizmet arasındaki eşlemedir) tarafından işlenmeden önce bu politikaların uygulandığından emin olmak için Calico, globalNetworkPolicy için "preDNAT: true" adı verilen bir parametre sağlar.

Pre-DNAT etkinleştirildiğinde, bu politikalar diyagramdaki (4)'te - PREROUTING zincirinin mangle tablosunda - DNAT'tan hemen önce uygulanır. Bu politikaların uygulanması trafik işleme yolunda çok daha erken gerçekleştiğinden, burada olağan politika sırası izlenmez. Ancak preDNAT politikaları kendi aralarındaki uygulama sırasına saygı gösterir.

DNAT öncesi ile politikalar oluştururken işlemek istediğiniz trafiğe dikkat etmeniz ve çoğunluğun reddedilmesine izin vermeniz önemlidir. DNAT öncesi politikada 'izin ver' olarak işaretlenen trafik artık ana makine uç noktası politikası tarafından kontrol edilmeyecek, DNAT öncesi politikada başarısız olan trafik ise kalan zincirler boyunca devam edecektir.
Calico, tanım gereği trafiğin hedefi henüz seçilmediğinden, preDNAT kullanılırken ApplyOnForward seçeneğinin etkinleştirilmesini zorunlu hale getirmiştir. Trafik, ana bilgisayar işlemine yönlendirilebilir veya bir bölmeye veya başka bir düğüme iletilebilir.

Takip Edilmeyen Politika (5)

Ağlar ve uygulamalar davranış açısından büyük farklılıklar gösterebilir. Bazı ekstrem durumlarda uygulamalar çok sayıda kısa süreli bağlantı oluşturabilir. Bu, conntrack'ın (Linux ağ yığınının temel bileşeni) belleğinin tükenmesine neden olabilir. Geleneksel olarak, bu tür uygulamaları Linux'ta çalıştırmak için, bağlantıyı manuel olarak yapılandırmanız veya devre dışı bırakmanız ya da bağlantıyı atlamak için iptables kuralları yazmanız gerekir. Bağlantıları mümkün olduğu kadar çabuk işlemek istiyorsanız Calico'daki izlenmeyen politika daha basit ve daha etkili bir seçenektir. Örneğin, masif kullanıyorsanız memcache veya ek bir koruma önlemi olarak DDOS.

Oku bunu blog yazısı (ya bizim çevirimiz) izlenmeyen politikayı kullanan performans testleri de dahil olmak üzere daha fazla bilgi için.

Calico globalNetworkPolicy'de "doNotTrack: true" seçeneğini ayarladığınızda, bu **takip edilmeyen** bir politika haline gelir ve Linux paket işleme hattının çok erken bir aşamasında uygulanır. Yukarıdaki şemaya bakıldığında, bağlantı izleme (conntrack) başlatılmadan önce ham tablodaki PREROUTING ve OUTPUT zincirlerinde izlenmeyen politikalar uygulanmaktadır. İzlenmeyen ilkesi tarafından bir pakete izin verildiğinde, bu paket için bağlantı izlemeyi devre dışı bırakacak şekilde işaretlenir. Anlamı:

  • Takip edilmeyen politika paket başına uygulanır. Bağlantı (veya akış) kavramı yoktur. Bağlantı eksikliğinin birkaç önemli sonucu vardır:
  • Hem istek hem de yanıt trafiğine izin vermek istiyorsanız, hem gelen hem de giden için bir kurala ihtiyacınız vardır (çünkü Calico genellikle yanıt trafiğini izin verilen olarak işaretlemek için conntrack'ı kullanır).
  • İzlenmeyen politika Kubernetes iş yükleri (bölmeler) için çalışmaz çünkü bu durumda bölmeden giden bağlantıyı izlemenin bir yolu yoktur.
  • NAT, izlenmeyen paketlerle düzgün çalışmaz (çünkü çekirdek, NAT eşlemesini bağlantı yolunda depolar).
  • İzlenmeyen politikada "tümüne izin ver" kuralından geçildiğinde tüm paketler izlenmeyen olarak işaretlenecektir. İstediğiniz şey neredeyse her zaman bu değildir, bu nedenle izlenmeyen politikaların izin verdiği paketler konusunda çok seçici olmak (ve çoğu trafiğin normal izlenen politikalardan geçmesine izin vermek) önemlidir.
  • İzlenmeyen ilkeler, paket işleme hattının en başında uygulanır. Calico politikaları oluştururken bunu anlamak çok önemlidir. Order:1 ile bir pod politikanız ve order:1000 ile izlenmeyen bir politikanız olabilir. Önemli değil. İzlenmeyen politikası, kapsül politikasından önce uygulanacaktır. Takip edilmeyen politikalar yalnızca kendi aralarında yürütme sırasına saygı gösterir.

DoNotTrack politikasının amaçlarından biri, politikayı Linux paket işleme hattının çok erken bir aşamasında uygulamak olduğundan Calico, doNotTrack kullanılırken applicationOnForward seçeneğinin belirtilmesini zorunlu kılar. Paket işleme diyagramına bakıldığında, izlenmeyen(5) politikasının herhangi bir yönlendirme kararından önce uygulandığını unutmayın. Trafik, ana bilgisayar işlemine yönlendirilebilir veya bir bölmeye veya başka bir düğüme iletilebilir.

sonuçlar

Calico'daki çeşitli politika seçeneklerine (Host uç noktası, ApplyOnForward, preDNAT ve Untracked) ve bunların paket işleme yolu boyunca nasıl uygulandıklarına baktık. Nasıl çalıştıklarını anlamak, etkili ve güvenli politikaların geliştirilmesine yardımcı olur. Calico ile bir etiket (bir grup düğüm ve bölme) için geçerli olan genel bir ağ ilkesi kullanabilir ve çeşitli parametrelerle ilkeler uygulayabilirsiniz. Bu, güvenlik ve ağ tasarımı profesyonellerinin Calico politikalarıyla tek bir politika dili kullanarak "her şeyi" (uç nokta türleri) aynı anda rahatça korumalarına olanak tanır.

Teşekkür: Teşekkür etmek isterim Sean Crampton и Alexa Pollitta İncelemeleri ve değerli bilgileri için.

Kaynak: habr.com

Yorum ekle