Servis işlev zinciri

Servis işlev zinciri

Servis işlev zinciri (SFC) temel olarak politika tabanlı yönlendirme (PBR)`nin :term:`yazılım-tanımlı ağ (SDN) sürümü olarak adlandırılır. Bir çok durumda, SFC güvenliği içerir, ancak diğer çeşitli özellikleri de içerebilir.

Temel olarak SFC, paketleri hedef IP adresini kullanarak yönlendiren geleneksel yönlendirme yerine bir veya daha fazla hizmet işleviyle paket yönlendirir. Servis fonksiyonları, aslında, kabloları bir araya getiren bir dizi fiziksel ağ cihazını taklit eder.

SFC’nin temel bir örneği, klasik bir yönlendirme perspektifinden “bir sonraki durak” IP adresinden yoksun bir güvenlik duvarı vasıtasıyla paketleri bir konumdan diğerine yönlendirmeyi içerir. Daha karmaşık bir örnek, her biri birden çok örneği (VM’ler) kullanarak uygulanan sıralı bir dizi hizmet işlevini içerir. Paketler bir örnek vasıtasıyla akmalıdır ve bir karma algoritması, akışları her duraktaki birden fazla sunucuya dağıtır.

Mimari

Tüm OpenStack Ağ hizmetleri ve OpenStack Hesaplama sunucuları, bağlantı noktaları kullanarak sanal bir ağa bağlanır; sadece bağlantı noktaları kullanarak servis zincirleme için bir trafik direksiyon modeli oluşturmayı mümkün kılar. Bu bağlantı noktalarını bir bağlantı zincirine dahil etmek, servis işlevleri sağlayan bir veya daha fazla örnek aracılığıyla trafiğin yönlendirilmesini sağlar.

Bir bağlantı noktası zinciri veya servis fonksiyon yolu aşağıdakini içerir:

  • Hizmet işlevlerinin sırasını tanımlayan bir dizi bağlantı noktası.
  • Zincire giren sınıflandırılmış trafik akışlarını belirten bir akış sınıflandırıcıları kümesi.

Bir hizmet işlevi bir çift bağlantı noktasını içeriyorsa, ilk bağlantı noktası hizmet işlevinin giriş bağlantı noktası görevi görür ve ikinci bağlantı noktası çıkış bağlantı noktası görevi görür. Her iki bağlantı noktası da aynı değeri kullanıyorsa, tek bir sanal iki yönlü bağlantı noktası olarak işlev görürler.

Bir bağlantı noktası zinciri tek yönlü bir hizmet zinciridir. İlk bağlantı noktası servis fonksiyon zincirinin başı ve ikinci bağlantı noktası servis fonksiyon zincirinin kuyruğu gibi davranır. İki yönlü hizmet işlev zinciri, iki tek yönlü bağlantı zincirinden oluşur.

Bir akış sınıflandırıcısı, hangi zincirin akıştaki paketleri işleyeceği konusunda belirsizliği önlemek için yalnızca bir bağlantı noktasına ait olabilir. Bir kontrol bu belirsizliği engelliyor. Bununla birlikte, çoklu akış sınıflandırıcılarını bir bağlantı noktası zinciriyle ilişkilendirebilirsiniz, çünkü çoklu akışlar aynı hizmet işlev yolunu isteyebilir.

Şimdilik, SFC, çoklu proje hizmet işlevleri için destek bulunmuyor.

Bağlantı zinciri eklentisi, OVS sürücüsü ve çeşitli SDN kontrolör sürücüleri de dahil olmak üzere destek hizmetleri sağlayıcılarını desteklemektedir. Ortak sürücü API’sı, farklı sürücülerin servis zinciri yolu işleme için farklı uygulamaları sunmalarını sağlar.

Port chain architecture Port chain model

Daha fazla bilgi için `geliştirici belgesi <https://docs.openstack.org/developer/networking-sfc/>`_ne bakınız.

Kaynaklar

Bağlantı noktası zinciri

  • id - Bağlantı noktası zinciri ID’si
  • tenant_id - Proje ID
  • isim - Okunabilir isim
  • açıklama - Okunabilir açıklama
  • port_pair_groups - Bağlantı noktası çifti grup IDleri listesi
  • flow_classifiers - Akış sınıflandırıcı IDler listesi
  • chain_parameters - Zincir parametreleri sözlüğü

Bir bağlantı zinciri, bir dizi bağlantı noktası çifti grubundan oluşur. Her bir bağlantı noktası çifti grubu, bağlantı noktası zincirinde bir atlamadır. Bir grup bağlantı noktası çifti, eş değer işlevsellik sağlayan servis işlevlerini temsil eder. Örneğin, bir grup güvenlik duvarı servis fonksiyonları.

Akış sınıflandırıcısı bir akışı tanımlar. Bir bağlantı zinciri, çoklu akış sınıflandırıcıları içerebilir. Akış sınıflandırıcısının atlanması etkili bir şekilde bağlantı noktası zinciri boyunca trafik yönlendirilmesini engeller.

chain_parameters özelliği, bağlantı noktası zinciri için bir veya daha fazla parametre içerir. Şimdilik, yalnızca Open vSwitch (OVS) yetenekleriyle tutarlılık için ``mpls``ye varsayılan bir korelasyon parametresi destekliyor. Korelasyon parametresi için gelecek değerler şunları içerebilir ağ servis başlığı (NSH).

Bağlantı noktası çifti grubu

  • id - Bağlantı noktası çifti grup ID’si
  • tenant_id - Proje ID
  • isim - Okunabilir isim
  • açıklama - Okunabilir açıklama
  • port_pairs - Servis fonksiyonu bağlantı noktası çifti listesi

Bir bağlantı noktası çifti grubu bir veya daha fazla bağlantı noktası çifti içerebilir. Çoklu port çiftleri, işlevsel olarak eşdeğer bir servis fonksiyonları seti üzerinden yük dengeleme/dağıtma imkanı sağlar.

Bağlantı noktası çifti

  • id - Bağlantı noktası çifti ID’si
  • tenant_id - Proje ID
  • isim - Okunabilir isim
  • açıklama - Okunabilir açıklama
  • ingress - Giriş bağlantı noktası
  • egress - Çıktı bağlantı noktası
  • service_function_parameters - Servis fonksiyon parametreleri sözlüğü

Bir bağlantı noktası çifti, bir giriş ve çıkış bağlantı noktası içeren bir servis fonksiyonu örneğini temsil eder. Çift yönlü bir bağlantı noktası içeren bir servis fonksiyonu, aynı giriş ve çıkış bağlantı noktasını kullanır.

service_function_parameters özniteliği, servis fonksiyonu için bir veya daha fazla parametre içerir. Şimdilik, yalnızca bir paketin bir zincirle ilişkilendirilmesini belirleyen bir korelasyon parametresini desteklemektedir. Bu parametre, NSH gibi korelasyon için destek bulunmayan eski hizmet işlevleri için varsayılan olarak none olur. none olarak ayarlanmazsa, veri platformu uygulaması servis fonksiyonu vekil işlevselliği sağlamalıdır.

Akış sınıflandırıcı

  • id - Akış sınıflandırıcı ID
  • tenant_id - Proje ID
  • isim - Okunabilir isim
  • açıklama - Okunabilir açıklama
  • ethertype - Eternet türü (IPv4/IPv6)
  • protokol - IP protokolü
  • source_port_range_min - En küçük kaynak protokol bağlantı noktası
  • source_port_range_max - En büyük kaynak protokol bağlantı noktası
  • destination_port_range_min - En küçük hedef protokol bağlantı noktası
  • destination_port_range_max - En fazla hedef protokol bağlantı noktası
  • source_ip_prefix - Kaynak IP adres veya önek
  • destination_ip_prefix - Hedef IP adres veya önek
  • logical_source_port - Kaynak bağlantı noktası
  • logical_destination_port - Hedef bağlantı noktası
  • l7_parameters - L7 parametreleri sözlüğü

Kaynak argümanlarının birleşimi, akışın kaynağını tanımlar. Hedef argümanlarının birleşimi, akışın varış yerini tanımlar. l7_parameters özniteliği, bir URL gibi katman 7 alanları kullanarak akış sınıflandırmasını desteklemek için kullanılabilen bir yer tutucudur. Belirtilmemişse, logical_source_port ve logical_destination_port öznitelikleri none, ethertype öznitelikleri varsayılan olarak IPv4 ve diğer tüm öznitelikler bir joker karakter değeri varsayılanıdır.

Işlemler

Bir bağlantı noktası zinciri oluşturun

Aşağıdaki örnek, 192.0.2.11:1000’den 198.51.100.11:80’e kadar HTTP (TCP) trafik akışlarını işlemek için üç servis işlev sunucusundan oluşan bir bağlantı zinciri oluşturmak için neutron komut satırı arabirimini (CLI) kullanmaktadır.

  • Sunucu 1
    • İsim: vm1
    • Fonksiyon: Güvenlik Duvarı
    • Bağlantı noktası çifti: [p1, p2]
  • Sunucu 2
    • İsim: vm2
    • Fonksiyon: Güvenlik Duvarı
    • Bağlantı noktası çifti: [p3, p4]
  • Sunucu 3
    • İsim: vm3
    • Fonksiyon: Saldırı tespit sistemi (IDS)
    • Bağlantı noktası çifti: [p5, p6]

Not

Örnek ağ net1 üzerinde bağlantı noktası oluşturulmadan önce var olmalıdır.

  1. net1 ağına sahip olan projenin kimlik bilgilerini yazın.

  2. net1 ağında bağlantı noktaları oluşturun ve UUID değerlerini kaydedin.

    $ openstack port create p1 --network net1
    $ openstack port create p2 --network net1
    $ openstack port create p3 --network net1
    $ openstack port create p4 --network net1
    $ openstack port create p5 --network net1
    $ openstack port create p6 --network net1
    
  3. p1 ve p2 bağlantı noktalarını kullanarak vm1, p3 ve p4 bağlantı noktalarını kullanarak vm2, p5 ve p6 bağlantı noktalarını kullanarak vm3 servis fonksiyon sunucularını başlatın.

    $ openstack server create --nic port-id=P1_ID --nic port-id=P2_ID vm1
    $ openstack server create --nic port-id=P3_ID --nic port-id=P4_ID vm2
    $ openstack server create --nic port-id=P5_ID --nic port-id=P6_ID vm3
    

    P1_ID, P2_ID, P3_ID, P4_ID, P5_ID, ve ``P6_ID``yi sıralı bağlantı noktalarının UUIDleri ile yer değiştirin.

    Not

    Bu komut, bir sunucuyu başarılı bir şekilde başlatmak için ek seçeneklere ihtiyaç duyar. Daha fazla bilgi için CLI kılavuzu belgesine bakınız.

    Alternatif olarak, her bir sunucuyu bir ağ arabirimi ile başlatabilir ve daha sonra ek bağlantı noktaları takabilirsiniz.

  4. Uygun paket üstbilgileriyle eşleşen akış sınıflandırıcısı FC1 oluşturun.

    $ neutron flow-classifier-create \
      --description "HTTP traffic from 192.0.2.11 to 198.51.100.11" \
      --ethertype IPv4 \
      --source-ip-prefix 192.0.2.11/32 \
      --destination-ip-prefix 198.51.100.11/32 \
      --protocol tcp \
      --source-port 1000:1000 \
      --destination-port 80:80 FC1
    
  5. p1 ve p2 ile PP1, p3 ve p4 ile PP2 ve p5 ve p6 ile PP3 bağlantı noktası çifti oluştur.

    $ neutron port-pair-create \
      --description "Firewall SF instance 1" \
      --ingress p1 \
      --egress p2 PP1
    
    $ neutron port-pair-create \
      --description "Firewall SF instance 2" \
      --ingress p3 \
      --egress p4 PP2
    
    $ neutron port-pair-create \
      --description "IDS SF instance" \
      --ingress p5 \
      --egress p6 PP3
    
  6. PP1 ve PP2 ve PPG2 bağlantı noktası çiftleri PP3` bağlantı noktasıyla çiftiyle ``PPG1 bağlantı noktası çifti grubu oluşturun.

    $ neutron port-pair-group-create \
      --port-pair PP1 --port-pair PP2 PPG1
    $ neutron port-pair-group-create \
      --port-pair PP3 PPG2
    

    Not

    İşlevsel olarak eşdeğer servis fonksiyonlarının çoklu bağlantı noktası çiftleri için --port-pair seçeneğini tekrarlayabilirsiniz.

  7. Bağlantı noktaları çiftleri grupları PPG1 ve PPG2 ve akış sınıflandırıcı FC1 ile bağlantı birimi PC1 oluşturun.

    $ neutron port-chain-create \
      --port-pair-group PPG1 --port-pair-group PPG2 \
      --flow-classifier FC1 PC1
    

    Not

    Bağlantı noktası zincirinde ek bağlantı noktası çifti grupları belirtmek için --port-pair-group seçeneğini tekrarlayabilirsiniz. Bir bağlantı zinciri, en az bir bağlantı noktası çifti grubu içermelidir.

    Bir bağlantı noktası zinciri için birden fazla akış sınıflandırıcı belirtmek için --flow-classifier seçeneğini tekrarlayabilirsiniz. Her akış sınıflandırıcısı bir akış tanımlar.

Bir bağlantı zinciri veya bağlantı noktası çifti grubunu güncelleme

  • Bir port zincirindeki port çift gruplarını veya akış sınıflandırıcılarını dinamik olarak eklemek veya kaldırmak için neutron port-chain-update komutunu kullanın.

    • Örneğin, PC1 bağlantı noktası zincirine PPG3 bağlantı noktası grubunu ekleyin:

      $ neutron port-chain-update \
        --port-pair-group PPG1 --port-pair-group PPG2 --port-pair-group PPG3 \
        --flow-classifier FC1 PC1
      
    • Örneğin, PC1 bağlantı noktası zincirine FC2 akış sınıflandırıcısı ekleyin:

      $ neutron port-chain-update \
        --port-pair-group PPG1 --port-pair-group PPG2 \
        --flow-classifier FC1 --flow-classifier FC2 PC1
      

      SFC, ek akış sınıflandırıcısını bağlantı noktası zincirindeki bağlantı noktası çift gruplarıyla eşleşen trafiği yönlendirir.

  • Bir port çifti grubuna port çiftleri ekleyerek veya çıkartarak dinamik ölçeklendirme veya ölçeklendirme işlemleri gerçekleştirmek için neutron port-pair-group-update komutunu kullanın.

    $ neutron port-pair-group-update \
      --port-pair PP1 --port-pair PP2 --port-pair PP4 PPG1
    

    SFC, bağlantı noktası çifti grubundaki ek hizmet işlevleri üzerinde yük dengeleme/dağıtma gerçekleştirir.

Creative Commons Attribution 3.0 License

Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.