Service function chaining (SFC)

Service function chaining (SFC)

Service function chain (SFC) pada dasarnya mengacu pada versi:term:software-defined networking (SDN) dari policy-based routing (PBR). Dalam banyak kasus, SFC melibatkan keamanan, meskipun dapat mencakup berbagai fitur lainnya.

Pada dasarnya, SFC me-rute paket melalui satu atau lebih fungsi pelayanan bukan routing konvensional yang me-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 (VMs). Paket harus mengalir melalui satu instance dan algoritma hashing mendistribusikan arus di beberapa instance pada setiap hop.

Arsitektur

Semua layanan OpenStack Jaringan dan instance OpenStack Compute menghubungkan ke jaringan virtual melalui port sehingga hal itu memungkinkan untuk membuat model kemudi lalu lintas (traffic steering model) untuk layanan chaining hanya menggunakan port. Termasuk port ini dalam rantai port mengaktifkan kemudi lalu lintas melalui satu atau lebih instance yang 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 menspesifikasikan arus lalu lintas yang terklasifikasikan memasuki rantai.

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

Sebuah rantai port merupakan 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 memilik salah satu rantai port untuk mencegah ambiguitas dimana 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.

Plug-in rantai port mendukung penyokong penyedia layanan termasuk driver OVS dan berbagai driver kontroler SDN. Driver umum API mengaktifkan driver yang lain untuk memberikan implementasi yang berbeda untuk rantai layanan path rendering.

Port chain architecture Port chain model

Lihat developer documentation untuk informasi lebih lanjut.

Resources (sumber daya)

Port chain (rantai port)

  • 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 klassifier aliran mengidentifikasi aliran. Sebuah rantai port dapat berisi beberapa pengklasifikasi aliran. Menghilangkan klassifier aliran efektif mencegah pengendalian 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 (OVS) Open vSwitch . Nilai-nilai masa depan untuk parameter korelasi dapat mencakup network service header (NSH).

Port pair group (kelompok pasangan port)

  • 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 port mengaktifkan load balancing/distribution lebih dari satu set fungsi layanan setara (equivalent) secara fungsional.

Port pair (pasangan port)

  • 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 ingress and egress port. Sebuah fungsi pelayanan yang berisi port dua arah menggunakan ingress and egress port yang sama.

Atribut service_function_parameters mencakup satu atau lebih parameter untuk fungsi pelayanan. Saat ini, atribut itu 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 secara funcional menyediakan fungsi pelayanan 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 layer 7 field, seperti URL. Jika tidak ditentukan, atribut logical_source_port dan logical_destination_port defaultnya ke none, atribut ethertype defaultnya ke IPv4, dan semua atribut lainnya defaultnya nilai wildcard.

Operations (operasi)

Create a port chain (pembuatan rantai port)

The following example uses the neutron command-line interface (CLI) to create a port chain consisting of three service function instances to handle HTTP (TCP) traffic flows from 192.0.2.11:1000 to 198.51.100.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

The example network net1 must exist before creating ports on it.

  1. Sumber kepercayaan dari proyek yang memiliki jaringan net1.

  2. Buat port pada jaringan net1 dan merekam nilai UUID.

    $ 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. Peluncuran fungsi pelayanan instance vm1 menggunakan ports p1 dan p2, vm2 menggunakan ports p3 and p4, dan vm3 menggunakan 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
    

    Gantikan P1_ID, P2_ID, P3_ID, P4_ID, P5_ID, dan P6_ID dengan UUID dari port masing-masing.

    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 port tambahan nanti.

  4. Buat klassifier aliran FC1 yang cocok dengan header paket yang sesuai.

    $ 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. Buat pasangan port PP1 dengan port p1 dan p2, PP2 dengan port p3 dan p4, dan PP3 dengan port p5 dan 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. Buat grup pasangan port PPG1 dengan pasangan port PP1 dan PP2 dan PPG2 dengan pasangan port 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 setara secara fungsional.

  7. Buat rantai port PC1 dengan kelompok pasangan port PPG1 dan `` PPG2`` dan mengalir klassifier aliran 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 klassifier aliran mengidentifikasi aliran.

Memperbarui rantai port atau kelompok pasangan port

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

    • Misalnya, tambahkan grup pasangan port PPG3 untuk rantai port PC1:

      $ neutron port-chain-update \
        --port-pair-group PPG1 --port-pair-group PPG2 --port-pair-group PPG3 \
        --flow-classifier FC1 PC1
      
    • Misalnya, tambahkan klassifier aliran FC2 untuk rantai port 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 klassifier aliran tambahan untuk kelompok pasangan port dalam rantai port.

  • Gunakan perintah neutron port-pair-group-update untuk melakukan scale-out dinamis atau operasi scale-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/distribution terhadap 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.