請問如何在SFC入口設置多個client(namespace)?


前一個月我使用ODL官方所提供的腳本架設了一個SFC的拓樸 如下:
SFC_original.png

但因為模擬的關係需要做負載平衡 所以必須要在入口處設置五個client端 如下:
SFC_original_multi.png

client端分別是192.168.2.51 102 153 204 254
但在新增get_service_function_classifiers_data()內的分類時出了問題,或許是格式不正確
原本的設定如下:

def get_service_function_classifiers_data():
return  {
"service-function-classifiers": {
"service-function-classifier": [
  {
    "name": "Classifier1IP51",
    "scl-service-function-forwarder": [
      {
        "name": "Classifier1",
        "interface": "veth-br51"
      }
    ],
    "acl": {
        "name": "ACL1",
        "type": "ietf-access-control-list:ipv4-acl",
     }
  },
  {
    "name": "Classifier2IP51",
    "scl-service-function-forwarder": [
      {
        "name": "Classifier2",
        "interface": "veth-br"
      }
    ],
    "acl": {
        "name": "ACL2",
        "type": "ietf-access-control-list:ipv4-acl",
     }
  }
]
}
}

如果只單純修改classifier1中的interface veth-br51 改為另外四個client端的port是可以各別運行的

但如果全部統合在一起,便只有client 153可以聯通,其餘皆不通

統合在一起的設定如下:

def get_service_function_classifiers_data():
return  {
"service-function-classifiers": {
"service-function-classifier": [
  {
    "name": "Classifier1IP51",
    "scl-service-function-forwarder": [
      {
        "name": "Classifier1",
        "interface": "veth-br51"
      }
    ],
    "acl": {
        "name": "ACL1",
        "type": "ietf-access-control-list:ipv4-acl",
     }
  },
  {
    "name": "Classifier2IP51",
    "scl-service-function-forwarder": [
      {
        "name": "Classifier2",
        "interface": "veth-br"
      }
    ],
    "acl": {
        "name": "ACL2",
        "type": "ietf-access-control-list:ipv4-acl",
     }
  },
  {
    "name": "Classifier1IP102",
    "scl-service-function-forwarder": [
      {
        "name": "Classifier1",
        "interface": "veth-br102"
      }
    ],
    "acl": {
        "name": "ACL3",
        "type": "ietf-access-control-list:ipv4-acl",
     }
  },
  {
    "name": "Classifier2IP102",
    "scl-service-function-forwarder": [
      {
        "name": "Classifier2",
        "interface": "veth-br"
      }
    ],
    "acl": {
        "name": "ACL4",
        "type": "ietf-access-control-list:ipv4-acl",
     }
  },
  {
    "name": "Classifier1IP153",
    "scl-service-function-forwarder": [
      {
        "name": "Classifier1",
        "interface": "veth-br153"
      }
    ],
    "acl": {
        "name": "ACL5",
        "type": "ietf-access-control-list:ipv4-acl",
     }
  },
  {
    "name": "Classifier2IP153",
    "scl-service-function-forwarder": [
      {
        "name": "Classifier2",
        "interface": "veth-br"
      }
    ],
    "acl": {
        "name": "ACL6",
        "type": "ietf-access-control-list:ipv4-acl",
     }
  },
  {
    "name": "Classifier1IP204",
    "scl-service-function-forwarder": [
      {
        "name": "Classifier1",
        "interface": "veth-br204"
      }
    ],
    "acl": {
        "name": "ACL7",
        "type": "ietf-access-control-list:ipv4-acl",
     }
  },
  {
    "name": "Classifier2IP204",
    "scl-service-function-forwarder": [
      {
        "name": "Classifier2",
        "interface": "veth-br"
      }
    ],
    "acl": {
        "name": "ACL8",
        "type": "ietf-access-control-list:ipv4-acl",
     }
  },
  {
    "name": "Classifier1IP254",
    "scl-service-function-forwarder": [
      {
        "name": "Classifier1",
        "interface": "veth-br254"
      }
    ],
    "acl": {
        "name": "ACL9",
        "type": "ietf-access-control-list:ipv4-acl",
     }
  },
  {
    "name": "Classifier2IP254",
    "scl-service-function-forwarder": [
      {
        "name": "Classifier2",
        "interface": "veth-br"
      }
    ],
    "acl": {
        "name": "ACL10",
        "type": "ietf-access-control-list:ipv4-acl",
     }
  }
]
}
}

將原本的ACL1跟ACL2,擴增到ACL1~10,也就是將veth-br51,102,153,204,254設定進去

但實際上行不通,只有詭異的153會通,已經確定各別veth-br設定是正常的,只有在統合時不正常

另外再貼上namespace的設定
if [ "${host}"  == "${CLASSIFIER1_NAME}" ] ; then
#51
ip netns add app51
ip link add veth-app type veth peer name veth-br51
ovs-vsctl add-port br-sfc veth-br51
ip link set dev veth-br51 up
ip link set veth-app netns app51
ip netns exec app51 ifconfig veth-app 192.168.2.51/24 up
ip netns exec app51 ip link set dev veth-app  addr 10:00:11:11:11:11
ip netns exec app51 arp -s 192.168.2.2 00:00:22:22:22:22 -i veth-app
ip netns exec app51 ip link set dev veth-app up
ip netns exec app51 ip link set dev lo up
#102
ip netns add app102
ip link add veth-app type veth peer name veth-br102
ovs-vsctl add-port br-sfc veth-br102
ip link set dev veth-br102 up
ip link set veth-app netns app102
ip netns exec app102 ifconfig veth-app 192.168.2.102/24 up
ip netns exec app102 ip link set dev veth-app  addr 20:00:11:11:11:11
ip netns exec app102 arp -s 192.168.2.2 00:00:22:22:22:22 -i veth-app
ip netns exec app102 ip link set dev veth-app up
ip netns exec app102 ip link set dev lo up
#153
ip netns add app153
ip link add veth-app type veth peer name veth-br153
ovs-vsctl add-port br-sfc veth-br153
ip link set dev veth-br153 up
ip link set veth-app netns app153
ip netns exec app153 ifconfig veth-app 192.168.2.153/24 up
ip netns exec app153 ip link set dev veth-app  addr 30:00:11:11:11:11
ip netns exec app153 arp -s 192.168.2.2 00:00:22:22:22:22 -i veth-app
ip netns exec app153 ip link set dev veth-app up
ip netns exec app153 ip link set dev lo up
#204
ip netns add app204
ip link add veth-app type veth peer name veth-br204
ovs-vsctl add-port br-sfc veth-br204
ip link set dev veth-br204 up
ip link set veth-app netns app204
ip netns exec app204 ifconfig veth-app 192.168.2.204/24 up
ip netns exec app204 ip link set dev veth-app  addr 40:00:11:11:11:11
ip netns exec app204 arp -s 192.168.2.2 00:00:22:22:22:22 -i veth-app
ip netns exec app204 ip link set dev veth-app up
ip netns exec app204 ip link set dev lo up
#254
ip netns add app254
ip link add veth-app type veth peer name veth-br254
ovs-vsctl add-port br-sfc veth-br254
ip link set dev veth-br254 up
ip link set veth-app netns app254
ip netns exec app254 ifconfig veth-app 192.168.2.254/24 up
ip netns exec app254 ip link set dev veth-app  addr 50:00:11:11:11:11
ip netns exec app254 arp -s 192.168.2.2 00:00:22:22:22:22 -i veth-app
ip netns exec app254 ip link set dev veth-app up
ip netns exec app254 ip link set dev lo up
fi

if [ "${host}"  == "${CLASSIFIER2_NAME}" ] ; then
ip netns add app
ip link add veth-app type veth peer name veth-br
ovs-vsctl add-port br-sfc veth-br
ip link set dev veth-br up
ip link set veth-app netns app
ip netns exec app ifconfig veth-app 192.168.2.2/24 up
ip netns exec app ip link set dev veth-app  addr 00:00:22:22:22:22
ip netns exec app arp -s 192.168.2.51 10:00:11:11:11:11 -i veth-app
ip netns exec app arp -s 192.168.2.102 20:00:11:11:11:11 -i veth-app
ip netns exec app arp -s 192.168.2.153 30:00:11:11:11:11 -i veth-app
ip netns exec app arp -s 192.168.2.204 40:00:11:11:11:11 -i veth-app
ip netns exec app arp -s 192.168.2.254 50:00:11:11:11:11 -i veth-app
ip netns exec app ip link set dev veth-app up
ip netns exec app ip link set dev lo up
ip netns exec app python3 -m http.server 80
fi


麻煩各位指點迷津

謝謝大家
已邀请:

wuc623123 - 1988

赞同来自:


另外剛剛使用GUI介面 如下:
veth.PNG

是否代表著一個設定內是可以多個interface?
但實際設定進去,卻只接受最一個新增的資料
在這邊我疑惑了
還有一個是如果我要設定的不是interface而是bridge
那我該如何經由REST api去發設定
謝謝各位

要回复问题请先登录注册