Configure Pod with Additional Interfaces

To create pods with additional Interfaces follow the Kubernetes Network Custom Resource Definition De-facto Standard Version 1, the next steps can be followed:

  1. Create Neutron net/subnets which you want the additional interfaces attach to.

    $ openstack network create net-a
    $ openstack subnet create subnet-a --subnet-range 192.0.2.0/24 --network net-a
    
  2. Create CRD of ‘NetworkAttachmentDefinition’ as defined in NPWG spec.

    $ cat << EOF > nad.yaml
    apiVersion: apiextensions.k8s.io/v1beta1
    kind: CustomResourceDefinition
    metadata:
      name: network-attachment-definitions.k8s.cni.cncf.io
    spec:
      group: k8s.cni.cncf.io
      version: v1
      scope: Namespaced
      names:
        plural: network-attachment-definitions
        singular: network-attachment-definition
        kind: NetworkAttachmentDefinition
        shortNames:
        - net-attach-def
    validation:
      openAPIV3Schema:
        properties:
          spec:
            properties:
              config:
                type: string
    EOF
    $ kubectl apply -f nad.yaml
    
  3. Create NetworkAttachmentDefinition object with the UUID of Neutron subnet defined in step 1.

    $ cat << EOF > net-a.yaml
    apiVersion: "k8s.cni.cncf.io/v1"
    kind: NetworkAttachmentDefinition
    metadata:
      name: "net-a"
      annotations:
        openstack.org/kuryr-config: '{
        "subnetId": "uuid-of-neutron-subnet-a"
        }'
    EOF
    $ kubectl apply -f net-a.yaml
    
  4. Enable the multi-vif driver by setting ‘multi_vif_drivers’ in kuryr.conf. Then restart kuryr-controller.

    [kubernetes]
    multi_vif_drivers = npwg_multiple_interfaces
    
  1. Add additional interfaces to pods definition. e.g.

    $ cat << EOF > pod.yaml
    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx4
      annotations:
        k8s.v1.cni.cncf.io/networks: net-a
    spec:
      containers:
      - name: nginx
          image: nginx:1.7.9
          ports:
          - containerPort: 80
    EOF
    $ kubectl apply -f pod.yaml
    

You may put a list of network separated with comma to attach Pods to more networks.