Este documento ha sido traducido utilizando tecnología de traducción automática. Si bien nos esforzamos por proporcionar traducciones precisas, no ofrecemos garantías sobre la integridad, precisión o confiabilidad del contenido traducido. En caso de discrepancia, la versión original en inglés prevalecerá y constituirá el texto autorizado.

Plugins de Multus e IPAM

Multus CNI es un plugin CNI que permite adjuntar múltiples interfaces de red a los pods. Multus no reemplaza a los plugins CNI, sino que actúa como un multiplexor de plugins CNI. Multus es útil en ciertos casos de uso, especialmente cuando los pods son intensivos en red y requieren interfaces de red adicionales que soporten técnicas de aceleración del plano de datos como SR-IOV.

Para más información sobre Multus, consulta la documentación de multus-cni.

Multus no puede ser desplegado de forma independiente. Siempre requiere al menos un plugin CNI convencional que cumpla con los requisitos de red del clúster de Kubernetes. Ese plugin CNI se convierte en el predeterminado para Multus y se utilizará para proporcionar la interfaz principal para todos los pods. Al desplegar K3s con opciones predeterminadas, ese plugin CNI es Flannel.

Control de versión

K3s utiliza una ruta binaria CNI fija a partir de las versiones de octubre de 2024: v1.28.15+k3s1, v1.29.10+k3s1, v1.30.6+k3s1, v1.31.2+k3s1.

K3s busca en $DATA_DIR/data/cni los binarios de plugins CNI. Por defecto, esto es /var/lib/rancher/k3s/data/cni. Se deben instalar plugins CNI adicionales en esta ubicación.

Antes de las versiones de octubre de 2024, los binarios CNI eran parte del paquete de espacio de usuario de K3s en $DATA_DIR/data/$HASH/bin, donde el hash es único para cada versión de K3s. Esto dificultaba el despliegue de plugins CNI adicionales, ya que la ruta cambiaría cada vez que se actualizara la versión de K3s.

Si se despliega Multus en una versión anterior de K3s, deberías usar /var/lib/rancher/k3s/data/current/bin/ como el directorio de binarios CNI, pero espera que los plugins necesiten volver a desplegarse cada vez que se actualice la versión de K3s.

Desplegar con un plugin IPAM

Se requiere un plugin de Gestor de Direcciones IP (IPAM) para asignar direcciones IP en las interfaces adicionales creadas por Multus. Se puede instalar uno o más IPAM; los ejemplos a continuación muestran el uso de un solo plugin IPAM, pero se pueden combinar según sea necesario.

Los ejemplos de despliegue con helm que se muestran a continuación desplegarán un DaemonSet para crear pods de Multus e instalar los binarios CNI requeridos en /var/lib/rancher/k3s/data/cni/ y la configuración de Multus CNI en /var/lib/rancher/k3s/agent/etc/cni/net.d.

  • host-local

  • Whereabouts

  • Daemon DHCP de Multus

El plugin IPAM host-local asigna direcciones IP de un conjunto de rangos de direcciones. Almacena el estado localmente en el sistema de archivos del host, asegurando así la unicidad de las direcciones IP en un solo host. Por lo tanto, no lo recomendamos para clústeres de múltiples nodos. Este plugin IPAM no requiere ningún despliegue adicional. Para más información: https://www.cni.dev/plugins/current/ipam/host-local/.

Para usar el plugin host-local, despliega Multus con la siguiente configuración:

apiVersion: helm.cattle.io/v1
kind: HelmChart
metadata:
  name: multus
  namespace: kube-system
spec:
  repo: https://rke2-charts.rancher.io
  chart: rke2-multus
  targetNamespace: kube-system
  valuesContent: |-
    config:
      fullnameOverride: multus
      cni_conf:
        confDir: /var/lib/rancher/k3s/agent/etc/cni/net.d
        binDir: /var/lib/rancher/k3s/data/cni/
        kubeconfig: /var/lib/rancher/k3s/agent/etc/cni/net.d/multus.d/multus.kubeconfig
          # Comment the following line when using rke2-multus < v4.2.202
          multusAutoconfigDir: /var/lib/rancher/k3s/agent/etc/cni/net.d

Whereabouts es un plugin CNI de Gestión de Direcciones IP (IPAM) que asigna direcciones IP a nivel de clúster.

Para usar el plugin IPAM Whereabouts, despliega Multus con la siguiente configuración:

apiVersion: helm.cattle.io/v1
kind: HelmChart
metadata:
  name: multus
  namespace: kube-system
spec:
  repo: https://rke2-charts.rancher.io
  chart: rke2-multus
  targetNamespace: kube-system
  valuesContent: |-
    config:
      fullnameOverride: multus
      cni_conf:
        confDir: /var/lib/rancher/k3s/agent/etc/cni/net.d
        binDir: /var/lib/rancher/k3s/data/cni/
        kubeconfig: /var/lib/rancher/k3s/agent/etc/cni/net.d/multus.d/multus.kubeconfig
          # Comment the following line when using rke2-multus < v4.2.202
          multusAutoconfigDir: /var/lib/rancher/k3s/agent/etc/cni/net.d
    rke2-whereabouts:
      fullnameOverride: whereabouts
      enabled: true
      cniConf:
        confDir: /var/lib/rancher/k3s/agent/etc/cni/net.d
        binDir: /var/lib/rancher/k3s/data/cni/

Al usar whereabouts en K3s, configuration_path debe establecerse en /var/lib/rancher/k3s/agent/etc/cni/net.d/whereabouts.d/whereabouts.conf en la configuración ipam de NetworkAttachmentDefinition.

Por ejemplo, al usar whereabouts como el IPAM con el plugin macvlan:

apiVersion: k8s.cni.cncf.io/v1
kind: NetworkAttachmentDefinition
metadata:
  name: macvlan-whereabouts
spec:
  config: |-
    {
      "cniVersion": "1.0.0",
      "type": "macvlan",
      "master": "eth0",
      "mode": "bridge",
      "ipam": {
        "type": "whereabouts",
        "range": "172.17.0.0/24",
        "gateway": "172.17.0.1",
        "configuration_path": "/var/lib/rancher/k3s/agent/etc/cni/net.d/whereabouts.d/whereabouts.conf"
      }
    }

El plugin IPAM DHCP se puede desplegar cuando ya hay un servidor DHCP en funcionamiento en la red. Este DaemonSet se encarga de renovar periódicamente el arrendamiento DHCP. Para más información, consulta la documentación oficial de plugin IPAM DHCP.

Para usar el plugin DHCP, despliega Multus con la siguiente configuración:

apiVersion: helm.cattle.io/v1
kind: HelmChart
metadata:
  name: multus
  namespace: kube-system
spec:
  repo: https://rke2-charts.rancher.io
  chart: rke2-multus
  targetNamespace: kube-system
  valuesContent: |-
    config:
      fullnameOverride: multus
      cni_conf:
        confDir: /var/lib/rancher/k3s/agent/etc/cni/net.d
        binDir: /var/lib/rancher/k3s/data/cni/
        kubeconfig: /var/lib/rancher/k3s/agent/etc/cni/net.d/multus.d/multus.kubeconfig
          # Comment the following line when using rke2-multus < v4.2.202
          multusAutoconfigDir: /var/lib/rancher/k3s/agent/etc/cni/net.d
    manifests:
      dhcpDaemonSet: true

Usando Multus

Una vez que Multus ha sido desplegado, puedes crear recursos de NetworkAttachmentDefinition y hacer referencia a estos en las especificaciones de Pod para adjuntar interfaces adicionales. Por ejemplo, utilizando el ejemplo de Whereabouts mencionado anteriormente, puedes crear una interfaz eth1 en un Pod utilizando la anotación k8s.v1.cni.cncf.io/networks:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: multus-demo
  labels:
    app: multus-demo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: multus-demo
  template:
    metadata:
      annotations:
        k8s.v1.cni.cncf.io/networks: macvlan-whereabouts@eth1
      labels:
        app: multus-demo
    spec:
      containers:
      - name: shell
        image: docker.io/rancher/mirrored-library-busybox:1.36.1
        imagePullPolicy: IfNotPresent
        command:
          - sleep
          - "3600"

Consulta la documentación en sentido ascendente para obtener información y ejemplos adicionales.