kubeovn / kube-ovn

A Bridge between SDN and Cloud Native (Project under CNCF)
https://kubeovn.github.io/docs/stable/en/
Apache License 2.0
1.95k stars 442 forks source link

使用kube-ovn创建underlay网络后,再在k8s节点上使用kvm创建vm,网络桥接在br-provider1上面,出现vm与当前宿主机网络不通 #3573

Closed tghfly closed 9 months ago

tghfly commented 9 months ago

Bug Report

使用kube-ovn创建underlay网络后,再在k8s节点上使用kvm创建vm,网络桥接在br-provider1上面,出现vm与当前宿主机网络不通,但vm可以与其他k8s宿主机通信。

Expected Behavior

使用kube-ovn创建underlay网络后,再在k8s节点上使用kvm创建vm,网络桥接在br-provider1上面,vm与当前宿主机网络能通

Actual Behavior

使用kube-ovn创建underlay网络后,再在k8s节点上使用kvm创建vm,网络桥接在br-provider1上面,出现vm与当前宿主机网络不通,但vm可以与其他k8s宿主机通信。

Steps to Reproduce the Problem

1.使用kube-ovn 创建underlay网络

---
kind: ProviderNetwork
metadata:
  name: provider1
spec:
  defaultInterface: eth0
---
apiVersion: kubeovn.io/v1
kind: Subnet
metadata:
  name: provider
spec:
  protocol: IPv4
  cidrBlock: 192.168.171.0/24
  gateway: 192.168.171.1
  vlan: provider1-vlan0
  enableDHCP:  true
  dhcpV4Options: lease_time=86400,router=192.168.171.1
  excludeIps:
  - 192.168.171.0..192.168.171.10
---
apiVersion: kubeovn.io/v1
kind: Vlan
metadata:
  name: provider1-vlan0
spec:
  id: 0
  provider: provider1
  1. 在k8s节点上安装kvm,并使用virt-manager创建vm,在选择网络时,使用桥接,选择br-provider1
  2. 在vm中配置好ip 192.168.171.112/24后,在vm上ping当前vm所在的k8s宿主机出现网络不通,并且互ping及telnet相关端口均不通。

Additional Info

tghfly commented 9 months ago

vm的xml中interface内容如下:

<interface type='direct'>
      <mac address='52:54:00:f9:2d:36'/>
      <source dev='br-provider1' mode='bridge'/>
      <target dev='macvtap1'/>
      <model type='virtio'/>
      <alias name='net0'/>
      <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
    </interface>

改成如下配置,提示不支持。

    <interface type='bridge'>
      <mac address='52:54:00:f9:3b:31'/>
      <source bridge='br-provider1'/>
      <target dev='vnet0'/>
      <model type='virtio'/>
      <alias name='net0'/>
      <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
    </interface>

报错为:error: Unable to add bridge br-provider1 port vnet4: Operation not supported

bobz965 commented 9 months ago

检查该 unerlay subnet 的 pod 网络功能是否可用, 如果 pod 正常。 应该是你的 demo 有问题。

tghfly commented 9 months ago

可能我没有描述清楚:我不是在k8s集群里面用kvm,是在k8s的节点上安装了kvm(qemu-kvm-6.0.0)并创建vm,并指定桥接网卡使用 br-provider1报错,我在多个环境尝试均存在相同问题,就是该问题必现。

unerlay subnet 的 pod 网络功能是正常的,使用以下yaml创建pod,能分配ip并能正常访问

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: amd-nginx
  name: amd-nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: amd-nginx
  template:
    metadata:
      labels:
        app: amd-nginx
      annotations:
        ovn.kubernetes.io/ip_address: 192.168.171.188
        ovn.kubernetes.io/logical_switch: provider
    spec:
      containers:
        - name: amd-nginx
          image: registry.demo.com/library/nginx:latest
          imagePullPolicy: IfNotPresent
          #command: [ "sh", "-c", "sleep 86400" ]
          ports:
            - containerPort: 80
              name: http
bobz965 commented 9 months ago

既然pod 网络功能是正常的,name 你 ovs-vsctl add 的(给虚拟机直接用的)网卡 和 pod 的网卡没有区别。 应该还是手动的 demo 哪里有问题。 比如是否是 libvirt xml 是否有问题。

tghfly commented 9 months ago

vm的xml文件没有问题,我是从其他 kvm环境导出来的,且在多个kubeovn环境能重现问题。

bobz965 commented 9 months ago

error: Unable to add bridge br-provider1 port vnet4: Operation not supported

其他 kvm 环境是 ovs 的么?

参考下这个吧: https://docs.openvswitch.org/en/latest/howto/libvirt/

zhangzujian commented 9 months ago

OVS Bridge 使用问题,和 Kube-OVN 无关。