Uploaded image for project: 'OpenShift Virtualization'
  1. OpenShift Virtualization
  2. CNV-44959

VMs status IPs do not show the proper ip when using ovn-kubenertes primary UDN with passt binding

XMLWordPrintable

    • 0.42
    • False
    • Hide

      None

      Show
      None
    • False
    • CNV-51201 - Integration between VMs and primary user-defined networks
    • ---
    • ---
    • None

      Description of problem:

         When using ovn-kubernetes primary networks the default pod network get deletaged to a infrastructure role, and the proper IP to access the VM is the one living at a non eth0 interface with the passt binding.
      
         This means that the VM status IPs will still show default pod network eth0 address but should show the udn primary network addresses configured by ovn-kubernetes. 

      Version-Release number of selected component (if applicable):

      4.17    

      How reproducible:

      Always    

      Steps to Reproduce:

      1. Configure passt binding at Kubevirt CR
      #!/bin/bash -xe
      sidecar_image=quay.io/ellorent/kubevirt-passt-binding
      sidecar_image_sha=$(skopeo inspect docker://$sidecar_image | jq -r .Digest)kubectl patch kubevirts -n kubevirt kubevirt --type=json -p="[{\"op\": \"add\", \"path\": \"/spec/configuration/network\",   \"value\": {
            \"binding\": {
                \"passt\": {
                    \"networkAttachmentDefinition\": \"netbindingpasst\",
                    \"sidecarImage\": \"${sidecar_image}@${sidecar_image_sha}\",
                    \"downwardAPI\": \"device-info\",
                    \"migration\": {
                        \"method\": \"link-refresh\"
                    }
                }
            }
        }}]"kubectl apply -f - <<EOF
      ---
      apiVersion: kubevirt.io/v1
      kind: KubeVirt
      metadata:
        name: kubevirt
        namespace: kubevirt
      spec:
        configuration:
          developerConfiguration:
            featureGates:
              - NetworkBindingPlugins
      EOFfor node in $(kubectl get node --no-headers  -o custom-columns=":metadata.name"); do
          docker cp ./kubevirt-passt-binding $node:/opt/cni/bin/kubevirt-passt-binding
          docker cp ./kubevirt-ovn-kubernetes-tune $node:/opt/cni/bin/kubevirt-ovn-kubernetes-tune
      done
      
      2. Apply following manifests
      ---
      apiVersion: v1                                                  
      kind: Namespace
      metadata:                                                                       
        name: passt-poc
      ---
      apiVersion: k8s.cni.cncf.io/v1                                                  
      kind: NetworkAttachmentDefinition                                               
      metadata:                                                                       
        namespace: passt-poc
        name: netbindingpasst
      spec:                                                                           
        config: |2                                                                    
          {                                                                           
                  "cniVersion": "1.0.0",                                              
                  "name": "net-binding-passt",
                  "plugins": [ 
                    {
                      "type": "kubevirt-passt-binding"
                    },
                    {
                      "type": "kubevirt-ovn-kubernetes-tune"
                    }
                   ]
          }                               
      ---
      apiVersion: k8s.cni.cncf.io/v1                                                  
      kind: NetworkAttachmentDefinition                                               
      metadata:                                                                       
        namespace: passt-poc
        name: ovn-layer2
      spec:                                                                           
        config: |2                                                                    
          {                                                                           
                  "cniVersion": "1.0.0",                                              
                  "name": "net-ovn-layer2",
                  "type": "ovn-k8s-cni-overlay",                                      
                  "topology":"layer2",                                                
                  "subnets": "10.100.200.0/24",                                       
                  "mtu": 1300,                                                        
                  "role": "primary",
                  "netAttachDefName": "passt-poc/ovn-layer2"                              
          }                               
      ---
      apiVersion: kubevirt.io/v1
      kind: VirtualMachine
      metadata:
        labels:
          kubevirt.io/vm: vm-net-binding-passt
        name: vm-net-binding-passt
        namespace: passt-poc
      spec:
        running: true
        template:
          metadata:
            labels:
              kubevirt.io/vm: vm-net-binding-passt
          spec:
            domain:
              devices:
                disks:
                - disk:
                    bus: virtio
                  name: containerdisk
                - disk:
                    bus: virtio
                  name: cloudinitdisk
                interfaces:
                - name: passtnet
                  binding:
                    name: passt
                  ports:
                  - name: http
                    port: 80
                    protocol: TCP
                rng: {}
              resources:
                requests:
                  memory: 1024M
            networks:
            - name: passtnet
              pod: {} 
            terminationGracePeriodSeconds: 0
            volumes:
            - containerDisk:
                image: quay.io/kubevirt/alpine-container-disk-demo:v1.1.0
              name: containerdisk
            - cloudInitNoCloud:
                networkData: |
                  version: 2
                  ethernets:
                    eth0:
                      dhcp4: true
              name: cloudinitdisk

      Actual results:

          VMI.status.IPs do not belong to 10.100.200.0/16

      Expected results:

           VMI.status.IPs should belong to 10.100.200.0/16

      Additional info:

          

              phoracek@redhat.com Petr Horacek
              ellorent Felix Enrique Llorente Pastora
              Yossi Segev Yossi Segev
              Votes:
              0 Vote for this issue
              Watchers:
              6 Start watching this issue

                Created:
                Updated: