Skip to content

Instantly share code, notes, and snippets.

@rsmitty
Created September 26, 2023 15:42
Show Gist options
  • Save rsmitty/720aa7746b8da6863fc259917b594d66 to your computer and use it in GitHub Desktop.
Save rsmitty/720aa7746b8da6863fc259917b594d66 to your computer and use it in GitHub Desktop.
Adventures with Bonding in Talos v1.5.3

Booted the bare Talos 1.5.3 ISO in a VMWare Workstation VM configured for two NICs bridged directly to home network. The way VMWare creates NICs does not appear to allow for 802.3ad bond mode, so I tested with active-backup.

Prior to any configuration, two NICs are shown each with separate IPs:

$ talosctl get links -n 192.168.1.108 --insecure
NODE   NAMESPACE   TYPE         ID            VERSION   TYPE       KIND     HW ADDR                                           OPER STATE   LINK STATE
       network     LinkStatus   bond0         1         ether      bond     5e:4a:f6:ca:d9:60                                 down         false
       network     LinkStatus   dummy0        1         ether      dummy    76:f9:21:3a:30:79                                 down         false
       network     LinkStatus   eno16777736   4         ether               00:0c:29:23:30:1b                                 up           true
       network     LinkStatus   eno33554960   4         ether               00:50:56:3c:13:b3                                 up           true
       network     LinkStatus   ip6tnl0       1         tunnel6    ip6tnl   00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00   down         false
       network     LinkStatus   lo            2         loopback            00:00:00:00:00:00                                 unknown      true
       network     LinkStatus   sit0          1         sit        sit      00:00:00:00                                       down         false
       network     LinkStatus   teql0         1         void                                                                  down         false
       network     LinkStatus   tunl0         1         ipip       ipip     00:00:00:00                                       down         false

$ talosctl get addresses -n 192.168.1.108 --insecure
NODE   NAMESPACE   TYPE            ID                                        VERSION   ADDRESS                       LINK
       network     AddressStatus   eno16777736/192.168.1.108/24              1         192.168.1.108/24              eno16777736
       network     AddressStatus   eno16777736/fe80::20c:29ff:fe23:301b/64   2         fe80::20c:29ff:fe23:301b/64   eno16777736
       network     AddressStatus   eno33554960/192.168.1.110/24              1         192.168.1.110/24              eno33554960
       network     AddressStatus   eno33554960/fe80::250:56ff:fe3c:13b3/64   2         fe80::250:56ff:fe3c:13b3/64   eno33554960
       network     AddressStatus   lo/127.0.0.1/8                            1         127.0.0.1/8                   lo
       network     AddressStatus   lo/::1/128                                1         ::1/128                       lo

Created a machine config with the following network block, matching the MACs shown in get links above:

network:
  interfaces:
  - interface: bond0
    dhcp: true
    bond:
      mode: active-backup
      deviceSelectors:
        - hardwareAddr: '00:0c:29:23:30:1b'
        - hardwareAddr: '00:50:56:3c:13:b3'
    vip:
      ip: 192.168.1.240

After applying the configuration, the NICs appear to be enslaved as expected and address is only shown on bond0:

$ talosctl get links -n 192.168.1.108                          
NODE            NAMESPACE   TYPE         ID            VERSION   TYPE       KIND     HW ADDR                                           OPER STATE   LINK STATE
192.168.1.108   network     LinkStatus   bond0         4         ether      bond     00:0c:29:23:30:1b                                 up           true
192.168.1.108   network     LinkStatus   dummy0        1         ether      dummy    76:0b:06:9c:0b:46                                 down         false
192.168.1.108   network     LinkStatus   eno16777736   4         ether               00:0c:29:23:30:1b                                 up           true
192.168.1.108   network     LinkStatus   eno33554960   4         ether               00:0c:29:23:30:1b                                 up           true
192.168.1.108   network     LinkStatus   ip6tnl0       1         tunnel6    ip6tnl   00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00   down         false
192.168.1.108   network     LinkStatus   lo            2         loopback            00:00:00:00:00:00                                 unknown      true
192.168.1.108   network     LinkStatus   sit0          1         sit        sit      00:00:00:00                                       down         false
192.168.1.108   network     LinkStatus   teql0         1         void                                                                  down         false
192.168.1.108   network     LinkStatus   tunl0         1         ipip       ipip     00:00:00:00                                       down         false

$ talosctl get addresses -n 192.168.1.108
NODE            NAMESPACE   TYPE            ID                                  VERSION   ADDRESS                       LINK
192.168.1.108   network     AddressStatus   bond0/192.168.1.108/24              1         192.168.1.108/24              bond0
192.168.1.108   network     AddressStatus   bond0/fe80::20c:29ff:fe23:301b/64   2         fe80::20c:29ff:fe23:301b/64   bond0
192.168.1.108   network     AddressStatus   lo/127.0.0.1/8                      1         127.0.0.1/8                   lo
192.168.1.108   network     AddressStatus   lo/::1/128                          1         ::1/128                       lo

After issuing talosctl bootstrap, the VIP (192.168.1.240) is also added to the bond0 interface as expected:

$ talosctl get addresses -n 192.168.1.108
NODE            NAMESPACE   TYPE            ID                                  VERSION   ADDRESS                       LINK
192.168.1.108   network     AddressStatus   bond0/192.168.1.108/24              1         192.168.1.108/24              bond0
192.168.1.108   network     AddressStatus   bond0/192.168.1.240/32              1         192.168.1.240/32              bond0
192.168.1.108   network     AddressStatus   bond0/fe80::20c:29ff:fe23:301b/64   2         fe80::20c:29ff:fe23:301b/64   bond0
192.168.1.108   network     AddressStatus   lo/127.0.0.1/8                      1         127.0.0.1/8                   lo
192.168.1.108   network     AddressStatus   lo/::1/128                          1         ::1/128                       lo

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment