在 Tacker 中为容器化 VNF 添加多接口

https://blueprints.launchpad.net/tacker/+spec/multi-interface-container

问题描述

目前,Tacker 提供基于容器的 VNF [1],[#third]_. 当前的 Kuryr-Kubernetes 支持多个接口。但是,当使用 VNFD 模板在 tacker 中创建 C-VNF 时,它仅提供单个接口。因此,它在使用 C-VNF 作为网络功能方面存在限制。本提案建议使用基于 Kuryr-Kubernetes 的 ‘npwg_multiple_interfaces’ [2] 在容器上提供多个网络接口。

提议的变更

当前,用于在 Tacker 中创建 C-VNF 的模板如下所示。

VDU1:
  type: tosca.nodes.nfv.VDU.Tacker
  properties:
    namespace: default
    mapping_ports:
      - "80:8080"
      - "443:443"
    labels:
      - "app: webserver"
    service_type: ClusterIP
    vnfcs:
      web_server:
        properties:
          num_cpus: 0.5
          mem_size: 512 MB
          image: celebdor/kuryr-demo
          ports:
            - "8080"
          config: |
            param0: key1
            param1: key2

这种格式允许创建 C-VNF。但是,为了使用多接口,应该提供如下的注释部分。

metadata:
  name: my-pod
  namespace: my-namespace
  annotations:
    k8s.v1.cni.cncf.io/networks: net-a,net-b,other-ns/net-c

因此,在本规范中,我们希望向转换器添加功能,以便在部署 C-VNF 时可以使用上述多接口功能。

  1. ToscaKubeObject 的定义

ToscaKubeObject 包含 VDU 的基本结构。它用于将 TOSCA 转换为 Kubernetes 模板,例如 Service、Deployment、Horizon Pod Autoscaling、ConfigMap。在本规范中,我们使用 VL 部分来实现多接口。当用户定义多个 VL 时,它将为 C-VNF 提供多个接口。

Tacker 中的 VNFD 示例

VDU1:
  type: tosca.nodes.nfv.VDU.Tacker
  properties:
    namespace: default
    mapping_ports:
      - "80:8080"
      - "443:443"
    labels:
      - "app: webserver"
    service_type: ClusterIP
    vnfcs:
      web_server:
        properties:
          num_cpus: 0.5
          mem_size: 512 MB
          image: celebdor/kuryr-demo
          ports:
            - "8080"
          config: |
            param0: key1
            param1: key2
VL1:
  type: tosca.nodes.nfv.VL
  properties:
    network_name: net-a
    vendor: Tacker

VL2:
  type: tosca.nodes.nfv.VL
  properties:
    network_name: net-b
    vendor: Tacker

基本上,本规范遵循先前的容器化 VNF 规范 [3]。为了支持多接口,我们使用 VL 部分和网络名称。

  • network_name: VDU 的网络,对于纯 Kubernetes 而言,在启用时使用

    使用 Kuryr-Kubernetes 的 neutron 网络。当用户定义多个虚拟链路时,用户可以在 C-VNF 中使用多接口网络。

当用户定义多个虚拟链路时,kubernetes 转换器从 network_name 获取网络信息。这些信息用于创建一个 Kubernetes 模板,该模板用于创建具有多接口的 POD。

为了支持此功能,Tacker 的 kubernetes 转换器应该被更改为使用 VL 信息来创建多接口。

备选方案

数据模型影响

REST API 影响

安全影响

通知影响

其他最终用户影响

性能影响

其他部署者影响

开发人员影响

实现

为了实现此规范,我们修改了用于 C-VNF 的 Kubernetes 转换器。修改部分将使用在 TOSCA 模板中定义的 VL 信息来提供多接口。

负责人

主要负责人

Hyunsik Yang <yangun@dcn.ssu.ac.kr>

工作项

  1. 实现转换器,将从 TOSCA 转换为 k8s 模板,用于多接口

依赖项

Kuryr-Kubenetes python 库

测试

单元测试 功能测试

文档影响

是。我们需要描述如何在容器化 VNF 中使用多接口

参考资料