Service function chaining

Service function chaining

Service function chaining (SFC) fungsi pelayanan chaining pada dasarnya mengacu pada software-defined networking (SDN) versi routing berbasis kebijakan (PBR). Dalam banyak kasus, SFC melibatkan keamanan, meskipun dapat mencakup berbagai fitur lainnya.

Pada dasarnya, SFC rute paket melalui satu atau lebih fungsi pelayanan bukan routing konvensional yang rute paket menggunakan alamat IP tujuan. Fungsi layanan pada dasarnya meniru serangkaian perangkat jaringan fisik dengan kabel yang menghubungkan mereka bersama-sama.

Sebuah contoh dasar dari SFC melibatkan routing paket dari satu lokasi ke lokasi lain melalui firewall yang tidak memiliki alamat IP “next hop” dari perspektif routing yang konvensional. Sebuah contoh yang lebih kompleks melibatkan serangkaian memerintahkan fungsi layanan, masing-masing dilaksanakan dengan menggunakan beberapa instance (VM). Paket harus mengalir melalui satu instance dan algoritma hashing mendistribusikan arus di beberapa instance pada setiap hop.

Arsitektur

Semua layanan OpenStack Networking dan instance OpenStack Compute terhubung ke jaringan virtual melalui port sehingga memungkinkan untuk membuat model kemudi lalu lintas untuk layanan chaining hanya menggunakan port. Termasuk port ini dalam rantai port mengaktifkan arah (steering) lalu lintas melalui satu atau lebih instance menyediakan fungsi layanan.

Sebuah rantai port, atau jalur fungsi pelayanan, terdiri dari:

  • Satu set port yang menentukan urutan fungsi layanan.

  • Satu set pengklasifikasi aliran yang menentukan lalu lintas diklasifikasikan arus memasuki rantai.

Jika fungsi pelayanan melibatkan sepasang port, port pertama bertindak sebagai port masuknya fungsi pelayanan dan port kedua bertindak sebagai port egress. Jika kedua port menggunakan nilai yang sama, mereka berfungsi sebagai pelabuhan bidirectional tunggal virtual.

Sebuah rantai port rantai layanan searah. Port pertama bertindak sebagai kepala rantai fungsi pelayanan dan port tindakan kedua sebagai ekor rantai fungsi pelayanan. Sebuah rantai fungsi pelayanan dua arah terdiri dari dua rantai port searah.

Sebuah classifier aliran hanya bisa milik salah satu rantai port untuk mencegah ambiguitas untuk yang rantai harus menangani paket dalam aliran. Sebuah cek mencegah ambiguitas tersebut. Namun, Anda dapat mengaitkan beberapa pengklasifikasi aliran dengan rantai port karena beberapa arus dapat meminta jalur fungsi pelayanan yang sama.

Saat ini, SFC tidak memiliki dukungan untuk fungsi-fungsi layanan multi-proyek.

Rantai port plug-in mendukung back penyedia layanan termasuk driver OVS dan berbagai driver SDN kontroler. driver umum API mengaktifkan driver yang berbeda untuk memberikan implementasi yang berbeda untuk rantai layanan jalan rendering.

Port chain architecture Port chain model

Lihat developer documentation untuk informasi lebih lanjut.

Resources

Port chain

  • id - Port chain ID
  • tenant_id - Project ID
  • name - Readable name
  • description - Readable description
  • port_pair_groups - List of port pair group IDs
  • flow_classifiers - List of flow classifier IDs
  • chain_parameters - Dictionary of chain parameters

Sebuah rantai port terdiri dari urutan kelompok pasangan port. Setiap kelompok pasangan port adalah hop dalam rantai port. Sekelompok pasang port merupakan fungsi layanan yang menyediakan fungsi setara. Misalnya, sekelompok fungsi layanan firewall.

Sebuah classifier aliran mengidentifikasi aliran. Sebuah rantai port dapat berisi beberapa pengklasifikasi aliran. Menghilangkan classifier aliran efektif mencegah kemudi lalu lintas melalui rantai port.

Atribut `` chain_parameters`` berisi satu atau lebih parameter untuk rantai port. Saat ini, hanya mendukung parameter korelasi yang defaultnya mpls untuk konsistensi dengan kemampuan Open vSwitch (OVS). Nilai-nilai masa depan untuk parameter korelasi mungkin termasuk header layanan jaringan, network service header (NSH).

Port pair group

  • id - Port pair group ID
  • tenant_id - Project ID
  • name - Readable name
  • description - Readable description
  • port_pairs - List of service function port pairs

Sekelompok pasangan port mungkin berisi satu atau lebih pasangan port. Beberapa pasangan pelabuhan mengaktifkan load balancing / distribusi lebih dari satu set fungsi layanan fungsional setara.

Port pair

  • id - Port pair ID
  • tenant_id - Project ID
  • name - Readable name
  • description - Readable description
  • ingress - Ingress port
  • egress - Egress port
  • service_function_parameters - Dictionary of service function parameters

Sepasang port merupakan fungsi pelayanan instance yang mencakup masuknya dan jalan keluar port. Sebuah fungsi pelayanan yang berisi port dua arah menggunakan masuknya sama dan port egress.

Atribut `` service_function_parameters`` mencakup satu atau lebih parameter untuk fungsi pelayanan. Saat ini, hanya mendukung parameter korelasi yang menentukan asosiasi paket dengan rantai. Parameter ini default ke none untuk fungsi layanan legacy yang tidak memiliki dukungan untuk korelasi seperti NSH tersebut. Jika diatur ke none, pelaksanaan data plane harus menyediakan fungsi pelayanan fungsi proxy.

Flow classifier

  • id - Flow classifier ID
  • tenant_id - Project ID
  • name - Readable name
  • description - Readable description
  • ethertype - Ethertype (IPv4/IPv6)
  • protocol - IP protocol
  • source_port_range_min - Minimum source protocol port
  • source_port_range_max - Maximum source protocol port
  • destination_port_range_min - Minimum destination protocol port
  • destination_port_range_max - Maximum destination protocol port
  • source_ip_prefix - Source IP address or prefix
  • destination_ip_prefix - Destination IP address or prefix
  • logical_source_port - Source port
  • logical_destination_port - Destination port
  • l7_parameters - Dictionary of L7 parameters

Kombinasi atribut sumber mendefinisikan sumber aliran. Kombinasi atribut tujuan mendefinisikan tujuan aliran. Atribut `` l7_parameters`` adalah tempat dudukan yang dapat digunakan untuk mendukung klasifikasi aliran menggunakan lapisan 7 bidang, seperti URL. Jika tidak ditentukan, yang logical_source_port dan logical_destination_port atribut default none, yang ethertype atribut default untuk IPv4, dan semua atribut lainnya default nilai wildcard.

Operations

Menciptakan sebuah rantai pelabuhan

Contoh berikut menggunakan neutron antarmuka baris perintah (CLI) untuk menciptakan sebuah rantai pelabuhan yang terdiri dari tiga contoh fungsi pelayanan untuk menangani HTTP (TCP) arus lalu lintas dari 192.168.1.11:1000 ke 192.168.2.11:80.

  • Instance 1
    • Name: vm1
    • Function: Firewall
    • Port pair: [p1, p2]
  • Instance 2
    • Name: vm2
    • Function: Firewall
    • Port pair: [p3, p4]
  • Instance 3
    • Name: vm3
    • Function: Intrusion detection system (IDS)
    • Port pair: [p5, p6]

Catatan

Contoh jaringan `` net1`` harus ada sebelum menciptakan port di atasnya.

  1. Source the credentials of the project that owns the net1 network.

  2. Create ports on network net1 and record the UUID values.

    $ neutron port-create --name p1 net1
    $ neutron port-create --name p2 net1
    $ neutron port-create --name p3 net1
    $ neutron port-create --name p4 net1
    $ neutron port-create --name p5 net1
    $ neutron port-create --name p6 net1
    
  3. Launch service function instance vm1 using ports p1 and p2, vm2 using ports p3 and p4, and vm3 using ports p5 and p6.

    $ 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
    

    Replace P1_ID, P2_ID, P3_ID, P4_ID, P5_ID, and P6_ID with the UUIDs of the respective ports.

    Catatan

    Perintah ini memerlukan opsi tambahan untuk berhasil meluncurkan sebuah instance. Lihat CLI reference untuk informasi lebih lanjut.

    Atau, Anda dapat memulai setiap instance dengan satu antarmuka jaringan dan menghubungkan (attach) port tambahan nanti.

  4. Create flow classifier FC1 that matches the appropriate packet headers.

    $ neutron flow-classifier-create \
      --description "HTTP traffic from 192.168.1.11 to 192.168.2.11" \
      --ethertype IPv4 \
      --source-ip-prefix 192.168.1.11/32 \
      --destination-ip-prefix 192.168.2.11/32 \
      --protocol tcp \
      --source-port 1000:1000 \
      --destination-port 80:80 FC1
    
  5. Create port pair PP1 with ports p1 and p2, PP2 with ports p3 and p4, and PP3 with ports p5 and p6.

    $ 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. Create port pair group PPG1 with port pair PP1 and PP2 and PPG3 with port pair PP3.

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

    Catatan

    Anda dapat mengulangi opsi --port-pair untuk beberapa pasang port fungsi layanan fungsional setara.

  7. Create port chain PC1 with port pair groups PPG1 and PPG2 and flow classifier FC1.

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

    Catatan

    Anda dapat mengulangi opsi --port-pair-group untuk menentukan tambahan kelompok pasangan port dalam rantai port. Sebuah rantai port harus mengandung setidaknya satu kelompok pasangan port.

    Anda dapat mengulangi opsi --flow-classifier untuk menentukan beberapa pengklasifikasi aliran untuk rantai port. Setiap classifier aliran mengidentifikasi aliran.

Memperbarui rantai port atau port kelompok pasangan

  • Gunakan perintah port-chain-update untuk secara dinamis menambahkan atau menghapus kelompok pasangan port atau pengklasifikasi aliran pada rantai port.

    • For example, add port pair group PPG3 to port chain PC1:

      $ neutron port-chain-update \
        --port-pair-group PPG1 --port-pair-group PPG2 --port-pair-group PPG3 \
        --flow-classifier FC1 PC1
      
    • For example, add flow classifier FC2 to port chain PC1:

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

      SFC mengarahkan lalu lintas yang cocok dengan classifier aliran tambahan untuk kelompok pasangan port dalam rantai port.

  • Gunakan perintah port-pair-group-update untuk melakukan dinamis scale-out atau operasi skala-in dengan menambahkan atau menghapus pasang port pada kelompok pasangan port.

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

    SFC melakukan load balancing / distribusi alih fungsi layanan tambahan pada kelompok pasangan port.

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.