Skip to content

使用ovs internal port 实现Pod NIC

oilbeater edited this page Jun 27, 2022 · 9 revisions

Wiki 下的中文文档将不在维护,请访问我们最新的中文文档网站,获取最新的文档更新。

背景

通常情况下,CNI都是创建veth-pair来实现Pod与Node的流量互通。

可以使用ovs internal-port来实现Pod中的网卡,实现Pod与Node的流量互通。

连接不同Namespace的介绍,可以参考NetNs互联

从 kube-ovn v1.7.0 版本开始,支持使用 ovs internal-port 方式实现Pod通信网卡。

配置方式

在安装脚本中,提供了环境变量POD_NIC_TYPE,用于设置是使用veth-pair方式还是internal-port方式来控制Pod的通信网卡实现方式。

POD_NIC_TYPE 取值,可以设置为 "veth-pair" 或者 "internal-port"。

POD_NIC_TYPE="veth-pair"               # veth-pair or internal-port

在kube-ovn-controller的配置参数中,最后增加了pod-nic-type参数设置,默认使用"veth-pair"取值。

        containers:
        - name: kube-ovn-controller
          image: "$REGISTRY/kube-ovn:$VERSION"
          imagePullPolicy: $IMAGE_PULL_POLICY
          command:
          - /kube-ovn/start-controller.sh
          args:
          - --default-cidr=$POD_CIDR
          - --default-gateway=$POD_GATEWAY
          - --default-exclude-ips=$EXCLUDE_IPS
          - --node-switch-cidr=$JOIN_CIDR
          - --network-type=$NETWORK_TYPE
          - --default-interface-name=$VLAN_INTERFACE_NAME
          - --default-vlan-id=$VLAN_ID
          - --pod-nic-type=$POD_NIC_TYPE

Pod 单独配置

修改kube-ovn-controller deployment的args参数,会影响所有需要分配IP的Pod。针对单个Pod的设置,可以在创建Pod之前,在模板中为Pod添加annotation,指定NIC类型,然后创建Pod。

apiVersion: v1
kind: Pod
metadata:
  annotations:
    ovn.kubernetes.io/pod_nic_type: internal-port
  labels:
    app: perf1
  name: perf1-pod
  namespace: default
Clone this wiki locally