在 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 时可以使用上述多接口功能。
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>
工作项¶
实现转换器,将从 TOSCA 转换为 k8s 模板,用于多接口
依赖项¶
Kuryr-Kubenetes python 库
测试¶
单元测试 功能测试
文档影响¶
是。我们需要描述如何在容器化 VNF 中使用多接口