> ## Documentation Index
> Fetch the complete documentation index at: https://docs.siderolabs.com/llms.txt
> Use this file to discover all available pages before exploring further.

> Config defines the v1alpha1.Config Talos machine configuration document.

# MachineConfig

export const VersionWarningBanner = () => {
  const latestVersion = "v1.13";
  const [latestUrl, setLatestUrl] = useState(null);
  const [currentVersion, setCurrentVersion] = useState(null);
  const [isBeta, setIsBeta] = useState(false);
  const parseVersion = v => v.replace("v", "").split(".").map(Number);
  const isGreaterVersion = (a, b) => {
    const [aMajor, aMinor] = parseVersion(a);
    const [bMajor, bMinor] = parseVersion(b);
    if (aMajor > bMajor) return true;
    if (aMajor === bMajor && aMinor > bMinor) return true;
    return false;
  };
  useEffect(() => {
    if (typeof window === "undefined") return;
    const {pathname, hash, search} = window.location;
    const match = pathname.match(/\/talos\/(v\d+\.\d+)\//);
    if (!match) return;
    const detectedVersion = match[1];
    if (detectedVersion === latestVersion) return;
    setCurrentVersion(detectedVersion);
    if (isGreaterVersion(detectedVersion, latestVersion)) {
      setIsBeta(true);
    }
    const newPath = pathname.replace(`/talos/${detectedVersion}/`, `/talos/${latestVersion}/`);
    setLatestUrl(`${newPath}${search}${hash}`);
  }, []);
  if (!latestUrl || !currentVersion) return null;
  return <div className="not-prose sticky top-6 z-50 my-6">
      <div className="border border-yellow-500/30 bg-yellow-500/10 px-4 py-3 rounded-xl">
        <div className="text-sm">
          {isBeta ? <>
              ⚠️ You are viewing a <strong>beta version</strong> of Talos ({currentVersion}).
              This version may be unstable.
              <a href={latestUrl} className="ml-2 underline text-yellow-400 hover:text-yellow-300 font-medium">
                View latest stable version {latestVersion} →
              </a>
            </> : <>
              ⚠️ You are viewing an older version of Talos ({currentVersion}).
              <a href={latestUrl} className="ml-2 underline text-yellow-400 hover:text-yellow-300 font-medium">
                View the latest version {latestVersion} →
              </a>
            </>}
        </div>
      </div>
    </div>;
};

<VersionWarningBanner />

```yaml theme={null}
version: v1alpha1
machine: # ...
cluster: # ...
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`version`</td>
      <td>string</td>
      <td>Indicates the schema used to decode the contents.</td>
      <td>`v1alpha1`<br /></td>
    </tr>

    <tr>
      <td>`debug`</td>
      <td>bool</td>

      <td />

      <td>`true`<br />`yes`<br />`false`<br />`no`<br /></td>
    </tr>

    <tr>
      <td>`machine`</td>
      <td><a href="#machine">MachineConfig</a></td>
      <td>Provides machine specific configuration options.</td>

      <td />
    </tr>

    <tr>
      <td>`cluster`</td>
      <td><a href="#cluster">ClusterConfig</a></td>
      <td>Provides cluster specific configuration options.</td>

      <td />
    </tr>
  </tbody>
</table>

## machine

MachineConfig represents the machine-specific config values.

```yaml theme={null}
machine:
    type: controlplane
    # InstallConfig represents the installation options for preparing a node.
    install:
        disk: /dev/sda # The disk used for installations.
        # Allows for supplying extra kernel args via the bootloader.
        extraKernelArgs:
            - console=ttyS1
            - panic=10
        image: ghcr.io/siderolabs/installer:latest # Allows for supplying the image used to perform the installation.
        wipe: false # Indicates if the installation disk should be wiped at installation time.

        # # Look up disk using disk attributes like model, size, serial and others.
        # diskSelector:
        #     size: 4GB # Disk size.
        #     model: WDC* # Disk model `/sys/block/{"<"}dev{">"}/device/model`.
        #     busPath: /pci0000:00/0000:00:17.0/ata1/host0/target0:0:0/0:0:0:0 # Disk bus path.

        # # Allows for supplying additional system extension images to install on top of base Talos image.
        # extensions:
        #     - image: ghcr.io/siderolabs/gvisor:20220117.0-v1.0.0 # System extension image.
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`type`</td>
      <td>string</td>

      <td />

      <td>`controlplane`<br />`worker`<br /></td>
    </tr>

    <tr>
      <td>`token`</td>
      <td>string</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`ca`</td>
      <td>PEMEncodedCertificateAndKey</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`acceptedCAs`</td>
      <td>\[]PEMEncodedCertificate</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`certSANs`</td>
      <td>\[]string</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`controlPlane`</td>
      <td><a href="#controlplane">MachineControlPlaneConfig</a></td>
      <td>Provides machine specific control plane configuration options.</td>

      <td />
    </tr>

    <tr>
      <td>`kubelet`</td>
      <td><a href="#kubelet">KubeletConfig</a></td>
      <td>Used to provide additional options to the kubelet.</td>

      <td />
    </tr>

    <tr>
      <td>`pods`</td>
      <td>\[]Unstructured</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`network`</td>
      <td><a href="#network">NetworkConfig</a></td>
      <td>Provides machine specific network configuration options.</td>

      <td />
    </tr>

    <tr>
      <td>`disks`</td>
      <td><a href="#disks%5B%5D">MachineDisk</a></td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`install`</td>
      <td><a href="#install">InstallConfig</a></td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`files`</td>
      <td><a href="#files%5B%5D">MachineFile</a></td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`env`</td>
      <td>Env</td>

      <td />

      <td>`GRPC_GO_LOG_VERBOSITY_LEVEL`<br />`GRPC_GO_LOG_SEVERITY_LEVEL`<br />`http_proxy`<br />`https_proxy`<br />`no_proxy`<br /></td>
    </tr>

    <tr>
      <td>`time`</td>
      <td><a href="#time">TimeConfig</a></td>
      <td>Used to configure the machine's time settings.</td>

      <td />
    </tr>

    <tr>
      <td>`sysctls`</td>
      <td>map\[string]string</td>
      <td>Used to configure the machine's sysctls.</td>

      <td />
    </tr>

    <tr>
      <td>`sysfs`</td>
      <td>map\[string]string</td>
      <td>Used to configure the machine's sysfs.</td>

      <td />
    </tr>

    <tr>
      <td>`registries`</td>
      <td><a href="#registries">RegistriesConfig</a></td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`systemDiskEncryption`</td>
      <td><a href="#systemdiskencryption">SystemDiskEncryptionConfig</a></td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`features`</td>
      <td><a href="#features">FeaturesConfig</a></td>
      <td>Features describe individual Talos features that can be switched on or off.</td>

      <td />
    </tr>

    <tr>
      <td>`udev`</td>
      <td><a href="#udev">UdevConfig</a></td>
      <td>Configures the udev system.</td>

      <td />
    </tr>

    <tr>
      <td>`logging`</td>
      <td><a href="#logging">LoggingConfig</a></td>
      <td>Configures the logging system.</td>

      <td />
    </tr>

    <tr>
      <td>`kernel`</td>
      <td><a href="#kernel">KernelConfig</a></td>
      <td>Configures the kernel.</td>

      <td />
    </tr>

    <tr>
      <td>`seccompProfiles`</td>
      <td><a href="#seccompprofiles%5B%5D">MachineSeccompProfile</a></td>
      <td>Configures the seccomp profiles for the machine.</td>

      <td />
    </tr>

    <tr>
      <td>`nodeLabels`</td>
      <td>map\[string]string</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`nodeAnnotations`</td>
      <td>map\[string]string</td>
      <td>Configures the node annotations for the machine.</td>

      <td />
    </tr>

    <tr>
      <td>`nodeTaints`</td>
      <td>map\[string]string</td>

      <td />

      <td />
    </tr>
  </tbody>
</table>

### controlPlane

MachineControlPlaneConfig machine specific configuration options.

```yaml theme={null}
machine:
    controlPlane:
        # Controller manager machine specific configuration options.
        controllerManager:
            disabled: false # Disable kube-controller-manager on the node.
        # Scheduler machine specific configuration options.
        scheduler:
            disabled: true # Disable kube-scheduler on the node.
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`controllerManager`</td>
      <td><a href="#controllermanager">MachineControllerManagerConfig</a></td>
      <td>Controller manager machine specific configuration options.</td>

      <td />
    </tr>

    <tr>
      <td>`scheduler`</td>
      <td><a href="#scheduler">MachineSchedulerConfig</a></td>
      <td>Scheduler machine specific configuration options.</td>

      <td />
    </tr>
  </tbody>
</table>

#### controllerManager

MachineControllerManagerConfig represents the machine specific ControllerManager config values.

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`disabled`</td>
      <td>bool</td>
      <td>Disable kube-controller-manager on the node.</td>

      <td />
    </tr>
  </tbody>
</table>

#### scheduler

MachineSchedulerConfig represents the machine specific Scheduler config values.

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`disabled`</td>
      <td>bool</td>
      <td>Disable kube-scheduler on the node.</td>

      <td />
    </tr>
  </tbody>
</table>

### kubelet

KubeletConfig represents the kubelet config values.

```yaml theme={null}
machine:
    kubelet:
        image: ghcr.io/siderolabs/kubelet:v1.31.4 # The `image` field is an optional reference to an alternative kubelet image.
        # The `extraArgs` field is used to provide additional flags to the kubelet.
        extraArgs:
            feature-gates: ServerSideApply=true

        # # The `ClusterDNS` field is an optional reference to an alternative kubelet clusterDNS ip list.
        # clusterDNS:
        #     - 10.96.0.10
        #     - 169.254.2.53

        # # The `extraMounts` field is used to add additional mounts to the kubelet container.
        # extraMounts:
        #     - destination: /var/lib/example # Destination is the absolute path where the mount will be placed in the container.
        #       type: bind # Type specifies the mount kind.
        #       source: /var/lib/example # Source specifies the source path of the mount.
        #       # Options are fstab style mount options.
        #       options:
        #         - bind
        #         - rshared
        #         - rw

        # # The `extraConfig` field is used to provide kubelet configuration overrides.
        # extraConfig:
        #     serverTLSBootstrap: true

        # # The `KubeletCredentialProviderConfig` field is used to provide kubelet credential configuration.
        # credentialProviderConfig:
        #     apiVersion: kubelet.config.k8s.io/v1
        #     kind: CredentialProviderConfig
        #     providers:
        #         - apiVersion: credentialprovider.kubelet.k8s.io/v1
        #           defaultCacheDuration: 12h
        #           matchImages:
        #             - '*.dkr.ecr.*.amazonaws.com'
        #             - '*.dkr.ecr.*.amazonaws.com.cn'
        #             - '*.dkr.ecr-fips.*.amazonaws.com'
        #             - '*.dkr.ecr.us-iso-east-1.c2s.ic.gov'
        #             - '*.dkr.ecr.us-isob-east-1.sc2s.sgov.gov'
        #           name: ecr-credential-provider

        # # The `nodeIP` field is used to configure `--node-ip` flag for the kubelet.
        # nodeIP:
        #     # The `validSubnets` field configures the networks to pick kubelet node IP from.
        #     validSubnets:
        #         - 10.0.0.0/8
        #         - '!10.0.0.3/32'
        #         - fdc7::/16
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`image`</td>
      <td>string</td>
      <td>The `image` field is an optional reference to an alternative kubelet image.</td>

      <td />
    </tr>

    <tr>
      <td>`clusterDNS`</td>
      <td>\[]string</td>
      <td>The `ClusterDNS` field is an optional reference to an alternative kubelet clusterDNS ip list.</td>

      <td />
    </tr>

    <tr>
      <td>`extraArgs`</td>
      <td>map\[string]string</td>
      <td>The `extraArgs` field is used to provide additional flags to the kubelet.</td>

      <td />
    </tr>

    <tr>
      <td>`extraMounts`</td>
      <td><a href="#extramounts%5B%5D">ExtraMount</a></td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`extraConfig`</td>
      <td>Unstructured</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`credentialProviderConfig`</td>
      <td>Unstructured</td>
      <td>The `KubeletCredentialProviderConfig` field is used to provide kubelet credential configuration.</td>

      <td />
    </tr>

    <tr>
      <td>`defaultRuntimeSeccompProfileEnabled`</td>
      <td>bool</td>
      <td>Enable container runtime default Seccomp profile.</td>
      <td>`true`<br />`yes`<br />`false`<br />`no`<br /></td>
    </tr>

    <tr>
      <td>`registerWithFQDN`</td>
      <td>bool</td>

      <td />

      <td>`true`<br />`yes`<br />`false`<br />`no`<br /></td>
    </tr>

    <tr>
      <td>`nodeIP`</td>
      <td><a href="#nodeip">KubeletNodeIPConfig</a></td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`skipNodeRegistration`</td>
      <td>bool</td>

      <td />

      <td>`true`<br />`yes`<br />`false`<br />`no`<br /></td>
    </tr>

    <tr>
      <td>`disableManifestsDirectory`</td>
      <td>bool</td>

      <td />

      <td>`true`<br />`yes`<br />`false`<br />`no`<br /></td>
    </tr>
  </tbody>
</table>

#### extraMounts\[]

ExtraMount wraps OCI Mount specification.

```yaml theme={null}
machine:
    kubelet:
        extraMounts:
            - destination: /var/lib/example # Destination is the absolute path where the mount will be placed in the container.
              type: bind # Type specifies the mount kind.
              source: /var/lib/example # Source specifies the source path of the mount.
              # Options are fstab style mount options.
              options:
                - bind
                - rshared
                - rw
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`destination`</td>
      <td>string</td>
      <td>Destination is the absolute path where the mount will be placed in the container.</td>

      <td />
    </tr>

    <tr>
      <td>`type`</td>
      <td>string</td>
      <td>Type specifies the mount kind.</td>

      <td />
    </tr>

    <tr>
      <td>`source`</td>
      <td>string</td>
      <td>Source specifies the source path of the mount.</td>

      <td />
    </tr>

    <tr>
      <td>`options`</td>
      <td>\[]string</td>
      <td>Options are fstab style mount options.</td>

      <td />
    </tr>

    <tr>
      <td>`uidMappings`</td>
      <td><a href="#uidmappings%5B%5D">LinuxIDMapping</a></td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`gidMappings`</td>
      <td><a href="#gidmappings%5B%5D">LinuxIDMapping</a></td>

      <td />

      <td />
    </tr>
  </tbody>
</table>

##### uidMappings\[]

LinuxIDMapping represents the Linux ID mapping.

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`containerID`</td>
      <td>uint32</td>
      <td>ContainerID is the starting UID/GID in the container.</td>

      <td />
    </tr>

    <tr>
      <td>`hostID`</td>
      <td>uint32</td>
      <td>HostID is the starting UID/GID on the host to be mapped to 'ContainerID'.</td>

      <td />
    </tr>

    <tr>
      <td>`size`</td>
      <td>uint32</td>
      <td>Size is the number of IDs to be mapped.</td>

      <td />
    </tr>
  </tbody>
</table>

##### gidMappings\[]

LinuxIDMapping represents the Linux ID mapping.

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`containerID`</td>
      <td>uint32</td>
      <td>ContainerID is the starting UID/GID in the container.</td>

      <td />
    </tr>

    <tr>
      <td>`hostID`</td>
      <td>uint32</td>
      <td>HostID is the starting UID/GID on the host to be mapped to 'ContainerID'.</td>

      <td />
    </tr>

    <tr>
      <td>`size`</td>
      <td>uint32</td>
      <td>Size is the number of IDs to be mapped.</td>

      <td />
    </tr>
  </tbody>
</table>

#### nodeIP

KubeletNodeIPConfig represents the kubelet node IP configuration.

```yaml theme={null}
machine:
    kubelet:
        nodeIP:
            # The `validSubnets` field configures the networks to pick kubelet node IP from.
            validSubnets:
                - 10.0.0.0/8
                - '!10.0.0.3/32'
                - fdc7::/16
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`validSubnets`</td>
      <td>\[]string</td>

      <td />

      <td />
    </tr>
  </tbody>
</table>

### network

NetworkConfig represents the machine's networking config values.

```yaml theme={null}
machine:
    network:
        hostname: worker-1 # Used to statically set the hostname for the machine.
        # `interfaces` is used to define the network interface configuration.
        interfaces:
            - interface: enp0s1 # The interface name.
              # Assigns static IP addresses to the interface.
              addresses:
                - 192.168.2.0/24
              # A list of routes associated with the interface.
              routes:
                - network: 0.0.0.0/0 # The route's network (destination).
                  gateway: 192.168.2.1 # The route's gateway (if empty, creates link scope route).
                  metric: 1024 # The optional metric for the route.
              mtu: 1500 # The interface's MTU.

              # # Picks a network device using the selector.

              # # select a device with bus prefix 00:*.
              # deviceSelector:
              #     busPath: 00:* # PCI, USB bus prefix, supports matching by wildcard.
              # # select a device with mac address matching `*:f0:ab` and `virtio` kernel driver.
              # deviceSelector:
              #     hardwareAddr: '*:f0:ab' # Device hardware address, supports matching by wildcard.
              #     driver: virtio # Kernel driver, supports matching by wildcard.
              # # select a device with bus prefix 00:*, a device with mac address matching `*:f0:ab` and `virtio` kernel driver.
              # deviceSelector:
              #     - busPath: 00:* # PCI, USB bus prefix, supports matching by wildcard.
              #     - hardwareAddr: '*:f0:ab' # Device hardware address, supports matching by wildcard.
              #       driver: virtio # Kernel driver, supports matching by wildcard.

              # # Bond specific options.
              # bond:
              #     # The interfaces that make up the bond.
              #     interfaces:
              #         - enp2s0
              #         - enp2s1
              #     # Picks a network device using the selector.
              #     deviceSelectors:
              #         - busPath: 00:* # PCI, USB bus prefix, supports matching by wildcard.
              #         - hardwareAddr: '*:f0:ab' # Device hardware address, supports matching by wildcard.
              #           driver: virtio # Kernel driver, supports matching by wildcard.
              #     mode: 802.3ad # A bond option.
              #     lacpRate: fast # A bond option.

              # # Bridge specific options.
              # bridge:
              #     # The interfaces that make up the bridge.
              #     interfaces:
              #         - enxda4042ca9a51
              #         - enxae2a6774c259
              #     # A bridge option.
              #     stp:
              #         enabled: true # Whether Spanning Tree Protocol (STP) is enabled.

              # # Indicates if DHCP should be used to configure the interface.
              # dhcp: true

              # # DHCP specific options.
              # dhcpOptions:
              #     routeMetric: 1024 # The priority of all routes received via DHCP.

              # # Wireguard specific configuration.

              # # wireguard server example
              # wireguard:
              #     privateKey: ABCDEF... # Specifies a private key configuration (base64 encoded).
              #     listenPort: 51111 # Specifies a device's listening port.
              #     # Specifies a list of peer configurations to apply to a device.
              #     peers:
              #         - publicKey: ABCDEF... # Specifies the public key of this peer.
              #           endpoint: 192.168.1.3 # Specifies the endpoint of this peer entry.
              #           # AllowedIPs specifies a list of allowed IP addresses in CIDR notation for this peer.
              #           allowedIPs:
              #             - 192.168.1.0/24
              # # wireguard peer example
              # wireguard:
              #     privateKey: ABCDEF... # Specifies a private key configuration (base64 encoded).
              #     # Specifies a list of peer configurations to apply to a device.
              #     peers:
              #         - publicKey: ABCDEF... # Specifies the public key of this peer.
              #           endpoint: 192.168.1.2:51822 # Specifies the endpoint of this peer entry.
              #           persistentKeepaliveInterval: 10s # Specifies the persistent keepalive interval for this peer.
              #           # AllowedIPs specifies a list of allowed IP addresses in CIDR notation for this peer.
              #           allowedIPs:
              #             - 192.168.1.0/24

              # # Virtual (shared) IP address configuration.

              # # layer2 vip example
              # vip:
              #     ip: 172.16.199.55 # Specifies the IP address to be used.
        # Used to statically set the nameservers for the machine.
        nameservers:
            - 9.8.7.6
            - 8.7.6.5

        # # Allows for extra entries to be added to the `/etc/hosts` file
        # extraHostEntries:
        #     - ip: 192.168.1.100 # The IP of the host.
        #       # The host alias.
        #       aliases:
        #         - example
        #         - example.domain.tld

        # # Configures KubeSpan feature.
        # kubespan:
        #     enabled: true # Enable the KubeSpan feature.
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`hostname`</td>
      <td>string</td>
      <td>Used to statically set the hostname for the machine.</td>

      <td />
    </tr>

    <tr>
      <td>`interfaces`</td>
      <td><a href="#interfaces%5B%5D">Device</a></td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`nameservers`</td>
      <td>\[]string</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`extraHostEntries`</td>
      <td><a href="#extrahostentries%5B%5D">ExtraHost</a></td>
      <td>Allows for extra entries to be added to the `/etc/hosts` file</td>

      <td />
    </tr>

    <tr>
      <td>`kubespan`</td>
      <td><a href="#kubespan">NetworkKubeSpan</a></td>
      <td>Configures KubeSpan feature.</td>

      <td />
    </tr>

    <tr>
      <td>`disableSearchDomain`</td>
      <td>bool</td>

      <td />

      <td>`true`<br />`yes`<br />`false`<br />`no`<br /></td>
    </tr>
  </tbody>
</table>

#### interfaces\[]

Device represents a network interface.

```yaml theme={null}
machine:
    network:
        interfaces:
            - interface: enp0s1 # The interface name.
              # Assigns static IP addresses to the interface.
              addresses:
                - 192.168.2.0/24
              # A list of routes associated with the interface.
              routes:
                - network: 0.0.0.0/0 # The route's network (destination).
                  gateway: 192.168.2.1 # The route's gateway (if empty, creates link scope route).
                  metric: 1024 # The optional metric for the route.
              mtu: 1500 # The interface's MTU.

              # # Picks a network device using the selector.

              # # select a device with bus prefix 00:*.
              # deviceSelector:
              #     busPath: 00:* # PCI, USB bus prefix, supports matching by wildcard.
              # # select a device with mac address matching `*:f0:ab` and `virtio` kernel driver.
              # deviceSelector:
              #     hardwareAddr: '*:f0:ab' # Device hardware address, supports matching by wildcard.
              #     driver: virtio # Kernel driver, supports matching by wildcard.
              # # select a device with bus prefix 00:*, a device with mac address matching `*:f0:ab` and `virtio` kernel driver.
              # deviceSelector:
              #     - busPath: 00:* # PCI, USB bus prefix, supports matching by wildcard.
              #     - hardwareAddr: '*:f0:ab' # Device hardware address, supports matching by wildcard.
              #       driver: virtio # Kernel driver, supports matching by wildcard.

              # # Bond specific options.
              # bond:
              #     # The interfaces that make up the bond.
              #     interfaces:
              #         - enp2s0
              #         - enp2s1
              #     # Picks a network device using the selector.
              #     deviceSelectors:
              #         - busPath: 00:* # PCI, USB bus prefix, supports matching by wildcard.
              #         - hardwareAddr: '*:f0:ab' # Device hardware address, supports matching by wildcard.
              #           driver: virtio # Kernel driver, supports matching by wildcard.
              #     mode: 802.3ad # A bond option.
              #     lacpRate: fast # A bond option.

              # # Bridge specific options.
              # bridge:
              #     # The interfaces that make up the bridge.
              #     interfaces:
              #         - enxda4042ca9a51
              #         - enxae2a6774c259
              #     # A bridge option.
              #     stp:
              #         enabled: true # Whether Spanning Tree Protocol (STP) is enabled.

              # # Indicates if DHCP should be used to configure the interface.
              # dhcp: true

              # # DHCP specific options.
              # dhcpOptions:
              #     routeMetric: 1024 # The priority of all routes received via DHCP.

              # # Wireguard specific configuration.

              # # wireguard server example
              # wireguard:
              #     privateKey: ABCDEF... # Specifies a private key configuration (base64 encoded).
              #     listenPort: 51111 # Specifies a device's listening port.
              #     # Specifies a list of peer configurations to apply to a device.
              #     peers:
              #         - publicKey: ABCDEF... # Specifies the public key of this peer.
              #           endpoint: 192.168.1.3 # Specifies the endpoint of this peer entry.
              #           # AllowedIPs specifies a list of allowed IP addresses in CIDR notation for this peer.
              #           allowedIPs:
              #             - 192.168.1.0/24
              # # wireguard peer example
              # wireguard:
              #     privateKey: ABCDEF... # Specifies a private key configuration (base64 encoded).
              #     # Specifies a list of peer configurations to apply to a device.
              #     peers:
              #         - publicKey: ABCDEF... # Specifies the public key of this peer.
              #           endpoint: 192.168.1.2:51822 # Specifies the endpoint of this peer entry.
              #           persistentKeepaliveInterval: 10s # Specifies the persistent keepalive interval for this peer.
              #           # AllowedIPs specifies a list of allowed IP addresses in CIDR notation for this peer.
              #           allowedIPs:
              #             - 192.168.1.0/24

              # # Virtual (shared) IP address configuration.

              # # layer2 vip example
              # vip:
              #     ip: 172.16.199.55 # Specifies the IP address to be used.
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`interface`</td>
      <td>string</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`deviceSelector`</td>
      <td><a href="#deviceselector">NetworkDeviceSelector</a></td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`addresses`</td>
      <td>\[]string</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`routes`</td>
      <td><a href="#routes%5B%5D">Route</a></td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`bond`</td>
      <td><a href="#bond">Bond</a></td>
      <td>Bond specific options.</td>

      <td />
    </tr>

    <tr>
      <td>`bridge`</td>
      <td><a href="#bridge">Bridge</a></td>
      <td>Bridge specific options.</td>

      <td />
    </tr>

    <tr>
      <td>`vlans`</td>
      <td><a href="#vlans%5B%5D">Vlan</a></td>
      <td>VLAN specific options.</td>

      <td />
    </tr>

    <tr>
      <td>`mtu`</td>
      <td>int</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`dhcp`</td>
      <td>bool</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`ignore`</td>
      <td>bool</td>
      <td>Indicates if the interface should be ignored (skips configuration).</td>

      <td />
    </tr>

    <tr>
      <td>`dummy`</td>
      <td>bool</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`dhcpOptions`</td>
      <td><a href="#dhcpoptions">DHCPOptions</a></td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`wireguard`</td>
      <td><a href="#wireguard">DeviceWireguardConfig</a></td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`vip`</td>
      <td><a href="#vip">DeviceVIPConfig</a></td>
      <td>Virtual (shared) IP address configuration.</td>

      <td />
    </tr>
  </tbody>
</table>

##### deviceSelector

NetworkDeviceSelector struct describes network device selector.

```yaml theme={null}
machine:
    network:
        interfaces:
            - deviceSelector:
                busPath: 00:* # PCI, USB bus prefix, supports matching by wildcard.
```

```yaml theme={null}
machine:
    network:
        interfaces:
            - deviceSelector:
                hardwareAddr: '*:f0:ab' # Device hardware address, supports matching by wildcard.
                driver: virtio # Kernel driver, supports matching by wildcard.
```

```yaml theme={null}
machine:
    network:
        interfaces:
            - deviceSelector:
                - busPath: 00:* # PCI, USB bus prefix, supports matching by wildcard.
                - hardwareAddr: '*:f0:ab' # Device hardware address, supports matching by wildcard.
                  driver: virtio # Kernel driver, supports matching by wildcard.
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`busPath`</td>
      <td>string</td>
      <td>PCI, USB bus prefix, supports matching by wildcard.</td>

      <td />
    </tr>

    <tr>
      <td>`hardwareAddr`</td>
      <td>string</td>
      <td>Device hardware address, supports matching by wildcard.</td>

      <td />
    </tr>

    <tr>
      <td>`pciID`</td>
      <td>string</td>
      <td>PCI ID (vendor ID, product ID), supports matching by wildcard.</td>

      <td />
    </tr>

    <tr>
      <td>`driver`</td>
      <td>string</td>
      <td>Kernel driver, supports matching by wildcard.</td>

      <td />
    </tr>

    <tr>
      <td>`physical`</td>
      <td>bool</td>
      <td>Select only physical devices.</td>

      <td />
    </tr>
  </tbody>
</table>

##### routes\[]

Route represents a network route.

```yaml theme={null}
machine:
    network:
        interfaces:
            - routes:
                - network: 0.0.0.0/0 # The route's network (destination).
                  gateway: 10.5.0.1 # The route's gateway (if empty, creates link scope route).
                - network: 10.2.0.0/16 # The route's network (destination).
                  gateway: 10.2.0.1 # The route's gateway (if empty, creates link scope route).
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`network`</td>
      <td>string</td>
      <td>The route's network (destination).</td>

      <td />
    </tr>

    <tr>
      <td>`gateway`</td>
      <td>string</td>
      <td>The route's gateway (if empty, creates link scope route).</td>

      <td />
    </tr>

    <tr>
      <td>`source`</td>
      <td>string</td>
      <td>The route's source address (optional).</td>

      <td />
    </tr>

    <tr>
      <td>`metric`</td>
      <td>uint32</td>
      <td>The optional metric for the route.</td>

      <td />
    </tr>

    <tr>
      <td>`mtu`</td>
      <td>uint32</td>
      <td>The optional MTU for the route.</td>

      <td />
    </tr>
  </tbody>
</table>

##### bond

Bond contains the various options for configuring a bonded interface.

```yaml theme={null}
machine:
    network:
        interfaces:
            - bond:
                # The interfaces that make up the bond.
                interfaces:
                    - enp2s0
                    - enp2s1
                mode: 802.3ad # A bond option.
                lacpRate: fast # A bond option.

                # # Picks a network device using the selector.

                # # select a device with bus prefix 00:*, a device with mac address matching `*:f0:ab` and `virtio` kernel driver.
                # deviceSelectors:
                #     - busPath: 00:* # PCI, USB bus prefix, supports matching by wildcard.
                #     - hardwareAddr: '*:f0:ab' # Device hardware address, supports matching by wildcard.
                #       driver: virtio # Kernel driver, supports matching by wildcard.
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`interfaces`</td>
      <td>\[]string</td>
      <td>The interfaces that make up the bond.</td>

      <td />
    </tr>

    <tr>
      <td>`deviceSelectors`</td>
      <td><a href="#deviceselectors%5B%5D">NetworkDeviceSelector</a></td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`arpIPTarget`</td>
      <td>\[]string</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`mode`</td>
      <td>string</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`xmitHashPolicy`</td>
      <td>string</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`lacpRate`</td>
      <td>string</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`adActorSystem`</td>
      <td>string</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`arpValidate`</td>
      <td>string</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`arpAllTargets`</td>
      <td>string</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`primary`</td>
      <td>string</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`primaryReselect`</td>
      <td>string</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`failOverMac`</td>
      <td>string</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`adSelect`</td>
      <td>string</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`miimon`</td>
      <td>uint32</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`updelay`</td>
      <td>uint32</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`downdelay`</td>
      <td>uint32</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`arpInterval`</td>
      <td>uint32</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`resendIgmp`</td>
      <td>uint32</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`minLinks`</td>
      <td>uint32</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`lpInterval`</td>
      <td>uint32</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`packetsPerSlave`</td>
      <td>uint32</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`numPeerNotif`</td>
      <td>uint8</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`tlbDynamicLb`</td>
      <td>uint8</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`allSlavesActive`</td>
      <td>uint8</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`useCarrier`</td>
      <td>bool</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`adActorSysPrio`</td>
      <td>uint16</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`adUserPortKey`</td>
      <td>uint16</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`peerNotifyDelay`</td>
      <td>uint32</td>

      <td />

      <td />
    </tr>
  </tbody>
</table>

###### deviceSelectors\[]

NetworkDeviceSelector struct describes network device selector.

```yaml theme={null}
machine:
    network:
        interfaces:
            - bond:
                deviceSelectors:
                    busPath: 00:* # PCI, USB bus prefix, supports matching by wildcard.
```

```yaml theme={null}
machine:
    network:
        interfaces:
            - bond:
                deviceSelectors:
                    hardwareAddr: '*:f0:ab' # Device hardware address, supports matching by wildcard.
                    driver: virtio # Kernel driver, supports matching by wildcard.
```

```yaml theme={null}
machine:
    network:
        interfaces:
            - bond:
                deviceSelectors:
                    - busPath: 00:* # PCI, USB bus prefix, supports matching by wildcard.
                    - hardwareAddr: '*:f0:ab' # Device hardware address, supports matching by wildcard.
                      driver: virtio # Kernel driver, supports matching by wildcard.
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`busPath`</td>
      <td>string</td>
      <td>PCI, USB bus prefix, supports matching by wildcard.</td>

      <td />
    </tr>

    <tr>
      <td>`hardwareAddr`</td>
      <td>string</td>
      <td>Device hardware address, supports matching by wildcard.</td>

      <td />
    </tr>

    <tr>
      <td>`pciID`</td>
      <td>string</td>
      <td>PCI ID (vendor ID, product ID), supports matching by wildcard.</td>

      <td />
    </tr>

    <tr>
      <td>`driver`</td>
      <td>string</td>
      <td>Kernel driver, supports matching by wildcard.</td>

      <td />
    </tr>

    <tr>
      <td>`physical`</td>
      <td>bool</td>
      <td>Select only physical devices.</td>

      <td />
    </tr>
  </tbody>
</table>

##### bridge

Bridge contains the various options for configuring a bridge interface.

```yaml theme={null}
machine:
    network:
        interfaces:
            - bridge:
                # The interfaces that make up the bridge.
                interfaces:
                    - enxda4042ca9a51
                    - enxae2a6774c259
                # A bridge option.
                stp:
                    enabled: true # Whether Spanning Tree Protocol (STP) is enabled.
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`interfaces`</td>
      <td>\[]string</td>
      <td>The interfaces that make up the bridge.</td>

      <td />
    </tr>

    <tr>
      <td>`stp`</td>
      <td><a href="#stp">STP</a></td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`vlan`</td>
      <td><a href="#vlan">BridgeVLAN</a></td>

      <td />

      <td />
    </tr>
  </tbody>
</table>

###### stp

STP contains the various options for configuring the STP properties of a bridge interface.

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`enabled`</td>
      <td>bool</td>
      <td>Whether Spanning Tree Protocol (STP) is enabled.</td>

      <td />
    </tr>
  </tbody>
</table>

###### vlan

BridgeVLAN contains the various options for configuring the VLAN properties of a bridge interface.

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`vlanFiltering`</td>
      <td>bool</td>
      <td>Whether VLAN filtering is enabled.</td>

      <td />
    </tr>
  </tbody>
</table>

##### vlans\[]

Vlan represents vlan settings for a device.

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`addresses`</td>
      <td>\[]string</td>
      <td>The addresses in CIDR notation or as plain IPs to use.</td>

      <td />
    </tr>

    <tr>
      <td>`routes`</td>
      <td><a href="#routes%5B%5D">Route</a></td>
      <td>A list of routes associated with the VLAN.</td>

      <td />
    </tr>

    <tr>
      <td>`dhcp`</td>
      <td>bool</td>
      <td>Indicates if DHCP should be used.</td>

      <td />
    </tr>

    <tr>
      <td>`vlanId`</td>
      <td>uint16</td>
      <td>The VLAN's ID.</td>

      <td />
    </tr>

    <tr>
      <td>`mtu`</td>
      <td>uint32</td>
      <td>The VLAN's MTU.</td>

      <td />
    </tr>

    <tr>
      <td>`vip`</td>
      <td><a href="#vip">DeviceVIPConfig</a></td>
      <td>The VLAN's virtual IP address configuration.</td>

      <td />
    </tr>

    <tr>
      <td>`dhcpOptions`</td>
      <td><a href="#dhcpoptions">DHCPOptions</a></td>

      <td />

      <td />
    </tr>
  </tbody>
</table>

###### routes\[]

Route represents a network route.

```yaml theme={null}
machine:
    network:
        interfaces:
            - vlans:
                - routes:
                    - network: 0.0.0.0/0 # The route's network (destination).
                      gateway: 10.5.0.1 # The route's gateway (if empty, creates link scope route).
                    - network: 10.2.0.0/16 # The route's network (destination).
                      gateway: 10.2.0.1 # The route's gateway (if empty, creates link scope route).
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`network`</td>
      <td>string</td>
      <td>The route's network (destination).</td>

      <td />
    </tr>

    <tr>
      <td>`gateway`</td>
      <td>string</td>
      <td>The route's gateway (if empty, creates link scope route).</td>

      <td />
    </tr>

    <tr>
      <td>`source`</td>
      <td>string</td>
      <td>The route's source address (optional).</td>

      <td />
    </tr>

    <tr>
      <td>`metric`</td>
      <td>uint32</td>
      <td>The optional metric for the route.</td>

      <td />
    </tr>

    <tr>
      <td>`mtu`</td>
      <td>uint32</td>
      <td>The optional MTU for the route.</td>

      <td />
    </tr>
  </tbody>
</table>

###### vip

DeviceVIPConfig contains settings for configuring a Virtual Shared IP on an interface.

```yaml theme={null}
machine:
    network:
        interfaces:
            - vlans:
                - vip:
                    ip: 172.16.199.55 # Specifies the IP address to be used.
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`ip`</td>
      <td>string</td>
      <td>Specifies the IP address to be used.</td>

      <td />
    </tr>

    <tr>
      <td>`equinixMetal`</td>
      <td><a href="#equinixmetal">VIPEquinixMetalConfig</a></td>
      <td>Specifies the Equinix Metal API settings to assign VIP to the node.</td>

      <td />
    </tr>

    <tr>
      <td>`hcloud`</td>
      <td><a href="#hcloud">VIPHCloudConfig</a></td>
      <td>Specifies the Hetzner Cloud API settings to assign VIP to the node.</td>

      <td />
    </tr>
  </tbody>
</table>

###### equinixMetal

VIPEquinixMetalConfig contains settings for Equinix Metal VIP management.

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`apiToken`</td>
      <td>string</td>
      <td>Specifies the Equinix Metal API Token.</td>

      <td />
    </tr>
  </tbody>
</table>

###### hcloud

VIPHCloudConfig contains settings for Hetzner Cloud VIP management.

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`apiToken`</td>
      <td>string</td>
      <td>Specifies the Hetzner Cloud API Token.</td>

      <td />
    </tr>
  </tbody>
</table>

###### dhcpOptions

DHCPOptions contains options for configuring the DHCP settings for a given interface.

```yaml theme={null}
machine:
    network:
        interfaces:
            - vlans:
                - dhcpOptions:
                    routeMetric: 1024 # The priority of all routes received via DHCP.
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`routeMetric`</td>
      <td>uint32</td>
      <td>The priority of all routes received via DHCP.</td>

      <td />
    </tr>

    <tr>
      <td>`ipv4`</td>
      <td>bool</td>
      <td>Enables DHCPv4 protocol for the interface (default is enabled).</td>

      <td />
    </tr>

    <tr>
      <td>`ipv6`</td>
      <td>bool</td>
      <td>Enables DHCPv6 protocol for the interface (default is disabled).</td>

      <td />
    </tr>

    <tr>
      <td>`duidv6`</td>
      <td>string</td>
      <td>Set client DUID (hex string).</td>

      <td />
    </tr>
  </tbody>
</table>

##### dhcpOptions

DHCPOptions contains options for configuring the DHCP settings for a given interface.

```yaml theme={null}
machine:
    network:
        interfaces:
            - dhcpOptions:
                routeMetric: 1024 # The priority of all routes received via DHCP.
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`routeMetric`</td>
      <td>uint32</td>
      <td>The priority of all routes received via DHCP.</td>

      <td />
    </tr>

    <tr>
      <td>`ipv4`</td>
      <td>bool</td>
      <td>Enables DHCPv4 protocol for the interface (default is enabled).</td>

      <td />
    </tr>

    <tr>
      <td>`ipv6`</td>
      <td>bool</td>
      <td>Enables DHCPv6 protocol for the interface (default is disabled).</td>

      <td />
    </tr>

    <tr>
      <td>`duidv6`</td>
      <td>string</td>
      <td>Set client DUID (hex string).</td>

      <td />
    </tr>
  </tbody>
</table>

##### wireguard

DeviceWireguardConfig contains settings for configuring Wireguard network interface.

```yaml theme={null}
machine:
    network:
        interfaces:
            - wireguard:
                privateKey: ABCDEF... # Specifies a private key configuration (base64 encoded).
                listenPort: 51111 # Specifies a device's listening port.
                # Specifies a list of peer configurations to apply to a device.
                peers:
                    - publicKey: ABCDEF... # Specifies the public key of this peer.
                      endpoint: 192.168.1.3 # Specifies the endpoint of this peer entry.
                      # AllowedIPs specifies a list of allowed IP addresses in CIDR notation for this peer.
                      allowedIPs:
                        - 192.168.1.0/24
```

```yaml theme={null}
machine:
    network:
        interfaces:
            - wireguard:
                privateKey: ABCDEF... # Specifies a private key configuration (base64 encoded).
                # Specifies a list of peer configurations to apply to a device.
                peers:
                    - publicKey: ABCDEF... # Specifies the public key of this peer.
                      endpoint: 192.168.1.2:51822 # Specifies the endpoint of this peer entry.
                      persistentKeepaliveInterval: 10s # Specifies the persistent keepalive interval for this peer.
                      # AllowedIPs specifies a list of allowed IP addresses in CIDR notation for this peer.
                      allowedIPs:
                        - 192.168.1.0/24
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`privateKey`</td>
      <td>string</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`listenPort`</td>
      <td>int</td>
      <td>Specifies a device's listening port.</td>

      <td />
    </tr>

    <tr>
      <td>`firewallMark`</td>
      <td>int</td>
      <td>Specifies a device's firewall mark.</td>

      <td />
    </tr>

    <tr>
      <td>`peers`</td>
      <td><a href="#peers%5B%5D">DeviceWireguardPeer</a></td>
      <td>Specifies a list of peer configurations to apply to a device.</td>

      <td />
    </tr>
  </tbody>
</table>

###### peers\[]

DeviceWireguardPeer a WireGuard device peer configuration.

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`publicKey`</td>
      <td>string</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`endpoint`</td>
      <td>string</td>
      <td>Specifies the endpoint of this peer entry.</td>

      <td />
    </tr>

    <tr>
      <td>`persistentKeepaliveInterval`</td>
      <td>Duration</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`allowedIPs`</td>
      <td>\[]string</td>
      <td>AllowedIPs specifies a list of allowed IP addresses in CIDR notation for this peer.</td>

      <td />
    </tr>
  </tbody>
</table>

##### vip

DeviceVIPConfig contains settings for configuring a Virtual Shared IP on an interface.

```yaml theme={null}
machine:
    network:
        interfaces:
            - vip:
                ip: 172.16.199.55 # Specifies the IP address to be used.
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`ip`</td>
      <td>string</td>
      <td>Specifies the IP address to be used.</td>

      <td />
    </tr>

    <tr>
      <td>`equinixMetal`</td>
      <td><a href="#equinixmetal">VIPEquinixMetalConfig</a></td>
      <td>Specifies the Equinix Metal API settings to assign VIP to the node.</td>

      <td />
    </tr>

    <tr>
      <td>`hcloud`</td>
      <td><a href="#hcloud">VIPHCloudConfig</a></td>
      <td>Specifies the Hetzner Cloud API settings to assign VIP to the node.</td>

      <td />
    </tr>
  </tbody>
</table>

###### equinixMetal

VIPEquinixMetalConfig contains settings for Equinix Metal VIP management.

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`apiToken`</td>
      <td>string</td>
      <td>Specifies the Equinix Metal API Token.</td>

      <td />
    </tr>
  </tbody>
</table>

###### hcloud

VIPHCloudConfig contains settings for Hetzner Cloud VIP management.

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`apiToken`</td>
      <td>string</td>
      <td>Specifies the Hetzner Cloud API Token.</td>

      <td />
    </tr>
  </tbody>
</table>

#### extraHostEntries\[]

ExtraHost represents a host entry in /etc/hosts.

```yaml theme={null}
machine:
    network:
        extraHostEntries:
            - ip: 192.168.1.100 # The IP of the host.
              # The host alias.
              aliases:
                - example
                - example.domain.tld
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`ip`</td>
      <td>string</td>
      <td>The IP of the host.</td>

      <td />
    </tr>

    <tr>
      <td>`aliases`</td>
      <td>\[]string</td>
      <td>The host alias.</td>

      <td />
    </tr>
  </tbody>
</table>

#### kubespan

NetworkKubeSpan struct describes KubeSpan configuration.

```yaml theme={null}
machine:
    network:
        kubespan:
            enabled: true # Enable the KubeSpan feature.
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`enabled`</td>
      <td>bool</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`advertiseKubernetesNetworks`</td>
      <td>bool</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`allowDownPeerBypass`</td>
      <td>bool</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`harvestExtraEndpoints`</td>
      <td>bool</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`mtu`</td>
      <td>uint32</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`filters`</td>
      <td><a href="#filters">KubeSpanFilters</a></td>

      <td />

      <td />
    </tr>
  </tbody>
</table>

##### filters

KubeSpanFilters struct describes KubeSpan advanced network addresses filtering.

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`endpoints`</td>
      <td>\[]string</td>

      <td />

      <td />
    </tr>
  </tbody>
</table>

### disks\[]

MachineDisk represents the options available for partitioning, formatting, and
mounting extra disks.

```yaml theme={null}
machine:
    disks:
        - device: /dev/sdb # The name of the disk to use.
          # A list of partitions to create on the disk.
          partitions:
            - mountpoint: /var/mnt/extra # Where to mount the partition.

              # # The size of partition: either bytes or human readable representation. If `size:` is omitted, the partition is sized to occupy the full disk.

              # # Human readable representation.
              # size: 100 MB
              # # Precise value in bytes.
              # size: 1073741824
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`device`</td>
      <td>string</td>
      <td>The name of the disk to use.</td>

      <td />
    </tr>

    <tr>
      <td>`partitions`</td>
      <td><a href="#partitions%5B%5D">DiskPartition</a></td>
      <td>A list of partitions to create on the disk.</td>

      <td />
    </tr>
  </tbody>
</table>

#### partitions\[]

DiskPartition represents the options for a disk partition.

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`size`</td>
      <td>DiskSize</td>
      <td>The size of partition: either bytes or human readable representation. If `size:` is omitted, the partition is sized to occupy the full disk.</td>

      <td />
    </tr>

    <tr>
      <td>`mountpoint`</td>
      <td>string</td>
      <td>Where to mount the partition.</td>

      <td />
    </tr>
  </tbody>
</table>

### install

InstallConfig represents the installation options for preparing a node.

```yaml theme={null}
machine:
    install:
        disk: /dev/sda # The disk used for installations.
        # Allows for supplying extra kernel args via the bootloader.
        extraKernelArgs:
            - console=ttyS1
            - panic=10
        image: ghcr.io/siderolabs/installer:latest # Allows for supplying the image used to perform the installation.
        wipe: false # Indicates if the installation disk should be wiped at installation time.

        # # Look up disk using disk attributes like model, size, serial and others.
        # diskSelector:
        #     size: 4GB # Disk size.
        #     model: WDC* # Disk model `/sys/block/{"<"}dev{">"}/device/model`.
        #     busPath: /pci0000:00/0000:00:17.0/ata1/host0/target0:0:0/0:0:0:0 # Disk bus path.

        # # Allows for supplying additional system extension images to install on top of base Talos image.
        # extensions:
        #     - image: ghcr.io/siderolabs/gvisor:20220117.0-v1.0.0 # System extension image.
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`disk`</td>
      <td>string</td>
      <td>The disk used for installations.</td>

      <td />
    </tr>

    <tr>
      <td>`diskSelector`</td>
      <td><a href="#diskselector">InstallDiskSelector</a></td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`extraKernelArgs`</td>
      <td>\[]string</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`image`</td>
      <td>string</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`extensions`</td>
      <td><a href="#extensions%5B%5D">InstallExtensionConfig</a></td>
      <td>Allows for supplying additional system extension images to install on top of base Talos image.</td>

      <td />
    </tr>

    <tr>
      <td>`wipe`</td>
      <td>bool</td>

      <td />

      <td>`true`<br />`yes`<br />`false`<br />`no`<br /></td>
    </tr>

    <tr>
      <td>`legacyBIOSSupport`</td>
      <td>bool</td>

      <td />

      <td />
    </tr>
  </tbody>
</table>

#### diskSelector

InstallDiskSelector represents a disk query parameters for the install disk lookup.

```yaml theme={null}
machine:
    install:
        diskSelector:
            size: '>= 1TB' # Disk size.
            model: WDC* # Disk model `/sys/block/{"<"}dev{">"}/device/model`.

            # # Disk bus path.
            # busPath: /pci0000:00/0000:00:17.0/ata1/host0/target0:0:0/0:0:0:0
            # busPath: /pci0000:00/*
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`size`</td>
      <td>InstallDiskSizeMatcher</td>
      <td>Disk size.</td>

      <td />
    </tr>

    <tr>
      <td>`name`</td>
      <td>string</td>
      <td>Disk name `/sys/block/{"<"}dev{">"}/device/name`.</td>

      <td />
    </tr>

    <tr>
      <td>`model`</td>
      <td>string</td>
      <td>Disk model `/sys/block/{"<"}dev{">"}/device/model`.</td>

      <td />
    </tr>

    <tr>
      <td>`serial`</td>
      <td>string</td>
      <td>Disk serial number `/sys/block/{"<"}dev{">"}/serial`.</td>

      <td />
    </tr>

    <tr>
      <td>`modalias`</td>
      <td>string</td>
      <td>Disk modalias `/sys/block/{"<"}dev{">"}/device/modalias`.</td>

      <td />
    </tr>

    <tr>
      <td>`uuid`</td>
      <td>string</td>
      <td>Disk UUID `/sys/block/{"<"}dev{">"}/uuid`.</td>

      <td />
    </tr>

    <tr>
      <td>`wwid`</td>
      <td>string</td>
      <td>Disk WWID `/sys/block/{"<"}dev{">"}/wwid`.</td>

      <td />
    </tr>

    <tr>
      <td>`type`</td>
      <td>InstallDiskType</td>
      <td>Disk Type.</td>
      <td>`ssd`<br />`hdd`<br />`nvme`<br />`sd`<br /></td>
    </tr>

    <tr>
      <td>`busPath`</td>
      <td>string</td>
      <td>Disk bus path.</td>

      <td />
    </tr>
  </tbody>
</table>

#### extensions\[]

InstallExtensionConfig represents a configuration for a system extension.

```yaml theme={null}
machine:
    install:
        extensions:
            - image: ghcr.io/siderolabs/gvisor:20220117.0-v1.0.0 # System extension image.
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`image`</td>
      <td>string</td>
      <td>System extension image.</td>

      <td />
    </tr>
  </tbody>
</table>

### files\[]

MachineFile represents a file to write to disk.

```yaml theme={null}
machine:
    files:
        - content: '...' # The contents of the file.
          permissions: 0o666 # The file's permissions in octal.
          path: /tmp/file.txt # The path of the file.
          op: append # The operation to use
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`content`</td>
      <td>string</td>
      <td>The contents of the file.</td>

      <td />
    </tr>

    <tr>
      <td>`permissions`</td>
      <td>FileMode</td>
      <td>The file's permissions in octal.</td>

      <td />
    </tr>

    <tr>
      <td>`path`</td>
      <td>string</td>
      <td>The path of the file.</td>

      <td />
    </tr>

    <tr>
      <td>`op`</td>
      <td>string</td>
      <td>The operation to use</td>
      <td>`create`<br />`append`<br />`overwrite`<br /></td>
    </tr>
  </tbody>
</table>

### time

TimeConfig represents the options for configuring time on a machine.

```yaml theme={null}
machine:
    time:
        disabled: false # Indicates if the time service is disabled for the machine.
        # description: |
        servers:
            - time.cloudflare.com
        bootTimeout: 2m0s # Specifies the timeout when the node time is considered to be in sync unlocking the boot sequence.
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`disabled`</td>
      <td>bool</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`servers`</td>
      <td>\[]string</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`bootTimeout`</td>
      <td>Duration</td>

      <td />

      <td />
    </tr>
  </tbody>
</table>

### registries

RegistriesConfig represents the image pull options.

```yaml theme={null}
machine:
    registries:
        # Specifies mirror configuration for each registry host namespace.
        mirrors:
            docker.io:
                # List of endpoints (URLs) for registry mirrors to use.
                endpoints:
                    - https://registry.local
        # Specifies TLS & auth configuration for HTTPS image registries.
        config:
            registry.local:
                # The TLS configuration for the registry.
                tls:
                    # Enable mutual TLS authentication with the registry.
                    clientIdentity:
                        crt: LS0tIEVYQU1QTEUgQ0VSVElGSUNBVEUgLS0t
                        key: LS0tIEVYQU1QTEUgS0VZIC0tLQ==
                # The auth configuration for this registry.
                auth:
                    username: username # Optional registry authentication.
                    password: password # Optional registry authentication.
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`mirrors`</td>
      <td><a href="#-">map\[string]RegistryMirrorConfig</a></td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`config`</td>
      <td><a href="#-">map\[string]RegistryConfig</a></td>

      <td />

      <td />
    </tr>
  </tbody>
</table>

#### mirrors.\*

RegistryMirrorConfig represents mirror configuration for a registry.

```yaml theme={null}
machine:
    registries:
        mirrors:
            ghcr.io:
                # List of endpoints (URLs) for registry mirrors to use.
                endpoints:
                    - https://registry.insecure
                    - https://ghcr.io/v2/
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`endpoints`</td>
      <td>\[]string</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`overridePath`</td>
      <td>bool</td>

      <td />

      <td />
    </tr>
  </tbody>
</table>

#### config.\*

RegistryConfig specifies auth & TLS config per registry.

```yaml theme={null}
machine:
    registries:
        config:
            registry.insecure:
                # The TLS configuration for the registry.
                tls:
                    insecureSkipVerify: true # Skip TLS server certificate verification (not recommended).

                    # # Enable mutual TLS authentication with the registry.
                    # clientIdentity:
                    #     crt: LS0tIEVYQU1QTEUgQ0VSVElGSUNBVEUgLS0t
                    #     key: LS0tIEVYQU1QTEUgS0VZIC0tLQ==

                # # The auth configuration for this registry.
                # auth:
                #     username: username # Optional registry authentication.
                #     password: password # Optional registry authentication.
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`tls`</td>
      <td><a href="#tls">RegistryTLSConfig</a></td>
      <td>The TLS configuration for the registry.</td>

      <td />
    </tr>

    <tr>
      <td>`auth`</td>
      <td><a href="#auth">RegistryAuthConfig</a></td>

      <td />

      <td />
    </tr>
  </tbody>
</table>

##### tls

RegistryTLSConfig specifies TLS config for HTTPS registries.

```yaml theme={null}
machine:
    registries:
        config:
            example.com:
                tls:
                    # Enable mutual TLS authentication with the registry.
                    clientIdentity:
                        crt: LS0tIEVYQU1QTEUgQ0VSVElGSUNBVEUgLS0t
                        key: LS0tIEVYQU1QTEUgS0VZIC0tLQ==
```

```yaml theme={null}
machine:
    registries:
        config:
            example.com:
                tls:
                    insecureSkipVerify: true # Skip TLS server certificate verification (not recommended).

                    # # Enable mutual TLS authentication with the registry.
                    # clientIdentity:
                    #     crt: LS0tIEVYQU1QTEUgQ0VSVElGSUNBVEUgLS0t
                    #     key: LS0tIEVYQU1QTEUgS0VZIC0tLQ==
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`clientIdentity`</td>
      <td>PEMEncodedCertificateAndKey</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`ca`</td>
      <td>Base64Bytes</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`insecureSkipVerify`</td>
      <td>bool</td>
      <td>Skip TLS server certificate verification (not recommended).</td>

      <td />
    </tr>
  </tbody>
</table>

##### auth

RegistryAuthConfig specifies authentication configuration for a registry.

```yaml theme={null}
machine:
    registries:
        config:
            example.com:
                auth:
                    username: username # Optional registry authentication.
                    password: password # Optional registry authentication.
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`username`</td>
      <td>string</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`password`</td>
      <td>string</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`auth`</td>
      <td>string</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`identityToken`</td>
      <td>string</td>

      <td />

      <td />
    </tr>
  </tbody>
</table>

### systemDiskEncryption

SystemDiskEncryptionConfig specifies system disk partitions encryption settings.

```yaml theme={null}
machine:
    systemDiskEncryption:
        # Ephemeral partition encryption.
        ephemeral:
            provider: luks2 # Encryption provider to use for the encryption.
            # Defines the encryption keys generation and storage method.
            keys:
                - # Deterministically generated key from the node UUID and PartitionLabel.
                  nodeID: {}
                  slot: 0 # Key slot number for LUKS2 encryption.

                  # # KMS managed encryption key.
                  # kms:
                  #     endpoint: https://192.168.88.21:4443 # KMS endpoint to Seal/Unseal the key.

            # # Cipher kind to use for the encryption. Depends on the encryption provider.
            # cipher: aes-xts-plain64

            # # Defines the encryption sector size.
            # blockSize: 4096

            # # Additional --perf parameters for the LUKS2 encryption.
            # options:
            #     - no_read_workqueue
            #     - no_write_workqueue
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`state`</td>
      <td><a href="#state">EncryptionConfig</a></td>
      <td>State partition encryption.</td>

      <td />
    </tr>

    <tr>
      <td>`ephemeral`</td>
      <td><a href="#ephemeral">EncryptionConfig</a></td>
      <td>Ephemeral partition encryption.</td>

      <td />
    </tr>
  </tbody>
</table>

#### state

EncryptionConfig represents partition encryption settings.

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`provider`</td>
      <td>string</td>
      <td>Encryption provider to use for the encryption.</td>

      <td />
    </tr>

    <tr>
      <td>`keys`</td>
      <td><a href="#keys%5B%5D">EncryptionKey</a></td>
      <td>Defines the encryption keys generation and storage method.</td>

      <td />
    </tr>

    <tr>
      <td>`cipher`</td>
      <td>string</td>
      <td>Cipher kind to use for the encryption. Depends on the encryption provider.</td>
      <td>`aes-xts-plain64`<br />`xchacha12,aes-adiantum-plain64`<br />`xchacha20,aes-adiantum-plain64`<br /></td>
    </tr>

    <tr>
      <td>`keySize`</td>
      <td>uint</td>
      <td>Defines the encryption key length.</td>

      <td />
    </tr>

    <tr>
      <td>`blockSize`</td>
      <td>uint64</td>
      <td>Defines the encryption sector size.</td>

      <td />
    </tr>

    <tr>
      <td>`options`</td>
      <td>\[]string</td>
      <td>Additional --perf parameters for the LUKS2 encryption.</td>
      <td>`no_read_workqueue`<br />`no_write_workqueue`<br />`same_cpu_crypt`<br /></td>
    </tr>
  </tbody>
</table>

##### keys\[]

EncryptionKey represents configuration for disk encryption key.

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`static`</td>
      <td><a href="#static">EncryptionKeyStatic</a></td>
      <td>Key which value is stored in the configuration file.</td>

      <td />
    </tr>

    <tr>
      <td>`nodeID`</td>
      <td><a href="#nodeid">EncryptionKeyNodeID</a></td>
      <td>Deterministically generated key from the node UUID and PartitionLabel.</td>

      <td />
    </tr>

    <tr>
      <td>`kms`</td>
      <td><a href="#kms">EncryptionKeyKMS</a></td>
      <td>KMS managed encryption key.</td>

      <td />
    </tr>

    <tr>
      <td>`slot`</td>
      <td>int</td>
      <td>Key slot number for LUKS2 encryption.</td>

      <td />
    </tr>

    <tr>
      <td>`tpm`</td>
      <td><a href="#tpm">EncryptionKeyTPM</a></td>
      <td>Enable TPM based disk encryption.</td>

      <td />
    </tr>
  </tbody>
</table>

###### static

EncryptionKeyStatic represents throw away key type.

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`passphrase`</td>
      <td>string</td>
      <td>Defines the static passphrase value.</td>

      <td />
    </tr>
  </tbody>
</table>

###### nodeID

EncryptionKeyNodeID represents deterministically generated key from the node UUID and PartitionLabel.

###### kms

EncryptionKeyKMS represents a key that is generated and then sealed/unsealed by the KMS server.

```yaml theme={null}
machine:
    systemDiskEncryption:
        state:
            keys:
                - kms:
                    endpoint: https://192.168.88.21:4443 # KMS endpoint to Seal/Unseal the key.
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`endpoint`</td>
      <td>string</td>
      <td>KMS endpoint to Seal/Unseal the key.</td>

      <td />
    </tr>
  </tbody>
</table>

###### tpm

EncryptionKeyTPM represents a key that is generated and then sealed/unsealed by the TPM.

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`checkSecurebootStatusOnEnroll`</td>
      <td>bool</td>

      <td />

      <td />
    </tr>
  </tbody>
</table>

#### ephemeral

EncryptionConfig represents partition encryption settings.

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`provider`</td>
      <td>string</td>
      <td>Encryption provider to use for the encryption.</td>

      <td />
    </tr>

    <tr>
      <td>`keys`</td>
      <td><a href="#keys%5B%5D">EncryptionKey</a></td>
      <td>Defines the encryption keys generation and storage method.</td>

      <td />
    </tr>

    <tr>
      <td>`cipher`</td>
      <td>string</td>
      <td>Cipher kind to use for the encryption. Depends on the encryption provider.</td>
      <td>`aes-xts-plain64`<br />`xchacha12,aes-adiantum-plain64`<br />`xchacha20,aes-adiantum-plain64`<br /></td>
    </tr>

    <tr>
      <td>`keySize`</td>
      <td>uint</td>
      <td>Defines the encryption key length.</td>

      <td />
    </tr>

    <tr>
      <td>`blockSize`</td>
      <td>uint64</td>
      <td>Defines the encryption sector size.</td>

      <td />
    </tr>

    <tr>
      <td>`options`</td>
      <td>\[]string</td>
      <td>Additional --perf parameters for the LUKS2 encryption.</td>
      <td>`no_read_workqueue`<br />`no_write_workqueue`<br />`same_cpu_crypt`<br /></td>
    </tr>
  </tbody>
</table>

##### keys\[]

EncryptionKey represents configuration for disk encryption key.

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`static`</td>
      <td><a href="#static">EncryptionKeyStatic</a></td>
      <td>Key which value is stored in the configuration file.</td>

      <td />
    </tr>

    <tr>
      <td>`nodeID`</td>
      <td><a href="#nodeid">EncryptionKeyNodeID</a></td>
      <td>Deterministically generated key from the node UUID and PartitionLabel.</td>

      <td />
    </tr>

    <tr>
      <td>`kms`</td>
      <td><a href="#kms">EncryptionKeyKMS</a></td>
      <td>KMS managed encryption key.</td>

      <td />
    </tr>

    <tr>
      <td>`slot`</td>
      <td>int</td>
      <td>Key slot number for LUKS2 encryption.</td>

      <td />
    </tr>

    <tr>
      <td>`tpm`</td>
      <td><a href="#tpm">EncryptionKeyTPM</a></td>
      <td>Enable TPM based disk encryption.</td>

      <td />
    </tr>
  </tbody>
</table>

###### static

EncryptionKeyStatic represents throw away key type.

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`passphrase`</td>
      <td>string</td>
      <td>Defines the static passphrase value.</td>

      <td />
    </tr>
  </tbody>
</table>

###### nodeID

EncryptionKeyNodeID represents deterministically generated key from the node UUID and PartitionLabel.

###### kms

EncryptionKeyKMS represents a key that is generated and then sealed/unsealed by the KMS server.

```yaml theme={null}
machine:
    systemDiskEncryption:
        ephemeral:
            keys:
                - kms:
                    endpoint: https://192.168.88.21:4443 # KMS endpoint to Seal/Unseal the key.
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`endpoint`</td>
      <td>string</td>
      <td>KMS endpoint to Seal/Unseal the key.</td>

      <td />
    </tr>
  </tbody>
</table>

###### tpm

EncryptionKeyTPM represents a key that is generated and then sealed/unsealed by the TPM.

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`checkSecurebootStatusOnEnroll`</td>
      <td>bool</td>

      <td />

      <td />
    </tr>
  </tbody>
</table>

### features

FeaturesConfig describes individual Talos features that can be switched on or off.

```yaml theme={null}
machine:
    features:
        rbac: true # Enable role-based access control (RBAC).

        # # Configure Talos API access from Kubernetes pods.
        # kubernetesTalosAPIAccess:
        #     enabled: true # Enable Talos API access from Kubernetes pods.
        #     # The list of Talos API roles which can be granted for access from Kubernetes pods.
        #     allowedRoles:
        #         - os:reader
        #     # The list of Kubernetes namespaces Talos API access is available from.
        #     allowedKubernetesNamespaces:
        #         - kube-system
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`rbac`</td>
      <td>bool</td>
      <td>Enable role-based access control (RBAC).</td>

      <td />
    </tr>

    <tr>
      <td>`stableHostname`</td>
      <td>bool</td>
      <td>Enable stable default hostname.</td>

      <td />
    </tr>

    <tr>
      <td>`kubernetesTalosAPIAccess`</td>
      <td><a href="#kubernetestalosapiaccess">KubernetesTalosAPIAccessConfig</a></td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`apidCheckExtKeyUsage`</td>
      <td>bool</td>
      <td>Enable checks for extended key usage of client certificates in apid.</td>

      <td />
    </tr>

    <tr>
      <td>`diskQuotaSupport`</td>
      <td>bool</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`kubePrism`</td>
      <td><a href="#kubeprism">KubePrism</a></td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`hostDNS`</td>
      <td><a href="#hostdns">HostDNSConfig</a></td>
      <td>Configures host DNS caching resolver.</td>

      <td />
    </tr>
  </tbody>
</table>

#### kubernetesTalosAPIAccess

KubernetesTalosAPIAccessConfig describes the configuration for the Talos API access from Kubernetes pods.

```yaml theme={null}
machine:
    features:
        kubernetesTalosAPIAccess:
            enabled: true # Enable Talos API access from Kubernetes pods.
            # The list of Talos API roles which can be granted for access from Kubernetes pods.
            allowedRoles:
                - os:reader
            # The list of Kubernetes namespaces Talos API access is available from.
            allowedKubernetesNamespaces:
                - kube-system
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`enabled`</td>
      <td>bool</td>
      <td>Enable Talos API access from Kubernetes pods.</td>

      <td />
    </tr>

    <tr>
      <td>`allowedRoles`</td>
      <td>\[]string</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`allowedKubernetesNamespaces`</td>
      <td>\[]string</td>
      <td>The list of Kubernetes namespaces Talos API access is available from.</td>

      <td />
    </tr>
  </tbody>
</table>

#### kubePrism

KubePrism describes the configuration for the KubePrism load balancer.

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`enabled`</td>
      <td>bool</td>
      <td>Enable KubePrism support - will start local load balancing proxy.</td>

      <td />
    </tr>

    <tr>
      <td>`port`</td>
      <td>int</td>
      <td>KubePrism port.</td>

      <td />
    </tr>
  </tbody>
</table>

#### hostDNS

HostDNSConfig describes the configuration for the host DNS resolver.

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`enabled`</td>
      <td>bool</td>
      <td>Enable host DNS caching resolver.</td>

      <td />
    </tr>

    <tr>
      <td>`forwardKubeDNSToHost`</td>
      <td>bool</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`resolveMemberNames`</td>
      <td>bool</td>

      <td />

      <td />
    </tr>
  </tbody>
</table>

### udev

UdevConfig describes how the udev system should be configured.

```yaml theme={null}
machine:
    udev:
        # List of udev rules to apply to the udev system
        rules:
            - SUBSYSTEM=="drm", KERNEL=="renderD*", GROUP="44", MODE="0660"
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`rules`</td>
      <td>\[]string</td>
      <td>List of udev rules to apply to the udev system</td>

      <td />
    </tr>
  </tbody>
</table>

### logging

LoggingConfig struct configures Talos logging.

```yaml theme={null}
machine:
    logging:
        # Logging destination.
        destinations:
            - endpoint: tcp://1.2.3.4:12345 # Where to send logs. Supported protocols are "tcp" and "udp".
              format: json_lines # Logs format.
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`destinations`</td>
      <td><a href="#destinations%5B%5D">LoggingDestination</a></td>
      <td>Logging destination.</td>

      <td />
    </tr>
  </tbody>
</table>

#### destinations\[]

LoggingDestination struct configures Talos logging destination.

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`endpoint`</td>
      <td><a href="#endpoint">Endpoint</a></td>
      <td>Where to send logs. Supported protocols are "tcp" and "udp".</td>

      <td />
    </tr>

    <tr>
      <td>`format`</td>
      <td>string</td>
      <td>Logs format.</td>
      <td>`json_lines`<br /></td>
    </tr>

    <tr>
      <td>`extraTags`</td>
      <td>map\[string]string</td>
      <td>Extra tags (key-value) pairs to attach to every log message sent.</td>

      <td />
    </tr>
  </tbody>
</table>

##### endpoint

Endpoint represents the endpoint URL parsed out of the machine config.

```yaml theme={null}
machine:
    logging:
        destinations:
            - endpoint: https://1.2.3.4:6443
```

```yaml theme={null}
machine:
    logging:
        destinations:
            - endpoint: https://cluster1.internal:6443
```

```yaml theme={null}
machine:
    logging:
        destinations:
            - endpoint: udp://127.0.0.1:12345
```

```yaml theme={null}
machine:
    logging:
        destinations:
            - endpoint: tcp://1.2.3.4:12345
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody />
</table>

### kernel

KernelConfig struct configures Talos Linux kernel.

```yaml theme={null}
machine:
    kernel:
        # Kernel modules to load.
        modules:
            - name: brtfs # Module name.
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`modules`</td>
      <td><a href="#modules%5B%5D">KernelModuleConfig</a></td>
      <td>Kernel modules to load.</td>

      <td />
    </tr>
  </tbody>
</table>

#### modules\[]

KernelModuleConfig struct configures Linux kernel modules to load.

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`name`</td>
      <td>string</td>
      <td>Module name.</td>

      <td />
    </tr>

    <tr>
      <td>`parameters`</td>
      <td>\[]string</td>
      <td>Module parameters, changes applied after reboot.</td>

      <td />
    </tr>
  </tbody>
</table>

### seccompProfiles\[]

MachineSeccompProfile defines seccomp profiles for the machine.

```yaml theme={null}
machine:
    seccompProfiles:
        - name: audit.json # The `name` field is used to provide the file name of the seccomp profile.
          # The `value` field is used to provide the seccomp profile.
          value:
            defaultAction: SCMP_ACT_LOG
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`name`</td>
      <td>string</td>
      <td>The `name` field is used to provide the file name of the seccomp profile.</td>

      <td />
    </tr>

    <tr>
      <td>`value`</td>
      <td>Unstructured</td>
      <td>The `value` field is used to provide the seccomp profile.</td>

      <td />
    </tr>
  </tbody>
</table>

## cluster

ClusterConfig represents the cluster-wide config values.

```yaml theme={null}
cluster:
    # ControlPlaneConfig represents the control plane configuration options.
    controlPlane:
        endpoint: https://1.2.3.4 # Endpoint is the canonical controlplane endpoint, which can be an IP address or a DNS hostname.
        localAPIServerPort: 443 # The port that the API server listens on internally.
    clusterName: talos.local
    # ClusterNetworkConfig represents kube networking configuration options.
    network:
        # The CNI used.
        cni:
            name: flannel # Name of CNI to use.
        dnsDomain: cluster.local # The domain used by Kubernetes DNS.
        # The pod subnet CIDR.
        podSubnets:
            - 10.244.0.0/16
        # The service subnet CIDR.
        serviceSubnets:
            - 10.96.0.0/12
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`id`</td>
      <td>string</td>
      <td>Globally unique identifier for this cluster (base64 encoded random 32 bytes).</td>

      <td />
    </tr>

    <tr>
      <td>`secret`</td>
      <td>string</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`controlPlane`</td>
      <td><a href="#controlplane">ControlPlaneConfig</a></td>
      <td>Provides control plane specific configuration options.</td>

      <td />
    </tr>

    <tr>
      <td>`clusterName`</td>
      <td>string</td>
      <td>Configures the cluster's name.</td>

      <td />
    </tr>

    <tr>
      <td>`network`</td>
      <td><a href="#network">ClusterNetworkConfig</a></td>
      <td>Provides cluster specific network configuration options.</td>

      <td />
    </tr>

    <tr>
      <td>`token`</td>
      <td>string</td>
      <td>The [bootstrap token](https://kubernetes.io/docs/reference/access-authn-authz/bootstrap-tokens/) used to join the cluster.</td>

      <td />
    </tr>

    <tr>
      <td>`aescbcEncryptionSecret`</td>
      <td>string</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`secretboxEncryptionSecret`</td>
      <td>string</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`ca`</td>
      <td>PEMEncodedCertificateAndKey</td>
      <td>The base64 encoded root certificate authority used by Kubernetes.</td>

      <td />
    </tr>

    <tr>
      <td>`acceptedCAs`</td>
      <td>\[]PEMEncodedCertificate</td>
      <td>The list of base64 encoded accepted certificate authorities used by Kubernetes.</td>

      <td />
    </tr>

    <tr>
      <td>`aggregatorCA`</td>
      <td>PEMEncodedCertificateAndKey</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`serviceAccount`</td>
      <td>PEMEncodedKey</td>
      <td>The base64 encoded private key for service account token generation.</td>

      <td />
    </tr>

    <tr>
      <td>`apiServer`</td>
      <td><a href="#apiserver">APIServerConfig</a></td>
      <td>API server specific configuration options.</td>

      <td />
    </tr>

    <tr>
      <td>`controllerManager`</td>
      <td><a href="#controllermanager">ControllerManagerConfig</a></td>
      <td>Controller manager server specific configuration options.</td>

      <td />
    </tr>

    <tr>
      <td>`proxy`</td>
      <td><a href="#proxy">ProxyConfig</a></td>
      <td>Kube-proxy server-specific configuration options</td>

      <td />
    </tr>

    <tr>
      <td>`scheduler`</td>
      <td><a href="#scheduler">SchedulerConfig</a></td>
      <td>Scheduler server specific configuration options.</td>

      <td />
    </tr>

    <tr>
      <td>`discovery`</td>
      <td><a href="#discovery">ClusterDiscoveryConfig</a></td>
      <td>Configures cluster member discovery.</td>

      <td />
    </tr>

    <tr>
      <td>`etcd`</td>
      <td><a href="#etcd">EtcdConfig</a></td>
      <td>Etcd specific configuration options.</td>

      <td />
    </tr>

    <tr>
      <td>`coreDNS`</td>
      <td><a href="#coredns">CoreDNS</a></td>
      <td>Core DNS specific configuration options.</td>

      <td />
    </tr>

    <tr>
      <td>`externalCloudProvider`</td>
      <td><a href="#externalcloudprovider">ExternalCloudProviderConfig</a></td>
      <td>External cloud provider configuration.</td>

      <td />
    </tr>

    <tr>
      <td>`extraManifests`</td>
      <td>\[]string</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`extraManifestHeaders`</td>
      <td>map\[string]string</td>
      <td>A map of key value pairs that will be added while fetching the extraManifests.</td>

      <td />
    </tr>

    <tr>
      <td>`inlineManifests`</td>
      <td><a href="#inlinemanifests%5B%5D">ClusterInlineManifest</a></td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`adminKubeconfig`</td>
      <td><a href="#adminkubeconfig">AdminKubeconfigConfig</a></td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`allowSchedulingOnControlPlanes`</td>
      <td>bool</td>
      <td>Allows running workload on control-plane nodes.</td>
      <td>`true`<br />`yes`<br />`false`<br />`no`<br /></td>
    </tr>
  </tbody>
</table>

### controlPlane

ControlPlaneConfig represents the control plane configuration options.

```yaml theme={null}
cluster:
    controlPlane:
        endpoint: https://1.2.3.4 # Endpoint is the canonical controlplane endpoint, which can be an IP address or a DNS hostname.
        localAPIServerPort: 443 # The port that the API server listens on internally.
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`endpoint`</td>
      <td><a href="#endpoint">Endpoint</a></td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`localAPIServerPort`</td>
      <td>int</td>

      <td />

      <td />
    </tr>
  </tbody>
</table>

#### endpoint

Endpoint represents the endpoint URL parsed out of the machine config.

```yaml theme={null}
cluster:
    controlPlane:
        endpoint: https://1.2.3.4:6443
```

```yaml theme={null}
cluster:
    controlPlane:
        endpoint: https://cluster1.internal:6443
```

```yaml theme={null}
cluster:
    controlPlane:
        endpoint: udp://127.0.0.1:12345
```

```yaml theme={null}
cluster:
    controlPlane:
        endpoint: tcp://1.2.3.4:12345
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody />
</table>

### network

ClusterNetworkConfig represents kube networking configuration options.

```yaml theme={null}
cluster:
    network:
        # The CNI used.
        cni:
            name: flannel # Name of CNI to use.
        dnsDomain: cluster.local # The domain used by Kubernetes DNS.
        # The pod subnet CIDR.
        podSubnets:
            - 10.244.0.0/16
        # The service subnet CIDR.
        serviceSubnets:
            - 10.96.0.0/12
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`cni`</td>
      <td><a href="#cni">CNIConfig</a></td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`dnsDomain`</td>
      <td>string</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`podSubnets`</td>
      <td>\[]string</td>
      <td>The pod subnet CIDR.</td>

      <td />
    </tr>

    <tr>
      <td>`serviceSubnets`</td>
      <td>\[]string</td>
      <td>The service subnet CIDR.</td>

      <td />
    </tr>
  </tbody>
</table>

#### cni

CNIConfig represents the CNI configuration options.

```yaml theme={null}
cluster:
    network:
        cni:
            name: custom # Name of CNI to use.
            # URLs containing manifests to apply for the CNI.
            urls:
                - https://docs.projectcalico.org/archive/v3.20/manifests/canal.yaml
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`name`</td>
      <td>string</td>
      <td>Name of CNI to use.</td>
      <td>`flannel`<br />`custom`<br />`none`<br /></td>
    </tr>

    <tr>
      <td>`urls`</td>
      <td>\[]string</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`flannel`</td>
      <td><a href="#flannel">FlannelCNIConfig</a></td>

      <td />

      <td />
    </tr>
  </tbody>
</table>

##### flannel

FlannelCNIConfig represents the Flannel CNI configuration options.

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`extraArgs`</td>
      <td>\[]string</td>
      <td>Extra arguments for 'flanneld'.</td>

      <td />
    </tr>
  </tbody>
</table>

### apiServer

APIServerConfig represents the kube apiserver configuration options.

```yaml theme={null}
cluster:
    apiServer:
        image: registry.k8s.io/kube-apiserver:v1.31.4 # The container image used in the API server manifest.
        # Extra arguments to supply to the API server.
        extraArgs:
            feature-gates: ServerSideApply=true
            http2-max-streams-per-connection: "32"
        # Extra certificate subject alternative names for the API server's certificate.
        certSANs:
            - 1.2.3.4
            - 4.5.6.7

        # # Configure the API server admission plugins.
        # admissionControl:
        #     - name: PodSecurity # Name is the name of the admission controller.
        #       # Configuration is an embedded configuration object to be used as the plugin's
        #       configuration:
        #         apiVersion: pod-security.admission.config.k8s.io/v1alpha1
        #         defaults:
        #             audit: restricted
        #             audit-version: latest
        #             enforce: baseline
        #             enforce-version: latest
        #             warn: restricted
        #             warn-version: latest
        #         exemptions:
        #             namespaces:
        #                 - kube-system
        #             runtimeClasses: []
        #             usernames: []
        #         kind: PodSecurityConfiguration

        # # Configure the API server audit policy.
        # auditPolicy:
        #     apiVersion: audit.k8s.io/v1
        #     kind: Policy
        #     rules:
        #         - level: Metadata
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`image`</td>
      <td>string</td>
      <td>The container image used in the API server manifest.</td>

      <td />
    </tr>

    <tr>
      <td>`extraArgs`</td>
      <td>map\[string]string</td>
      <td>Extra arguments to supply to the API server.</td>

      <td />
    </tr>

    <tr>
      <td>`extraVolumes`</td>
      <td><a href="#extravolumes%5B%5D">VolumeMountConfig</a></td>
      <td>Extra volumes to mount to the API server static pod.</td>

      <td />
    </tr>

    <tr>
      <td>`env`</td>
      <td>Env</td>
      <td>The `env` field allows for the addition of environment variables for the control plane component.</td>

      <td />
    </tr>

    <tr>
      <td>`certSANs`</td>
      <td>\[]string</td>
      <td>Extra certificate subject alternative names for the API server's certificate.</td>

      <td />
    </tr>

    <tr>
      <td>`disablePodSecurityPolicy`</td>
      <td>bool</td>
      <td>Disable PodSecurityPolicy in the API server and default manifests.</td>

      <td />
    </tr>

    <tr>
      <td>`admissionControl`</td>
      <td><a href="#admissioncontrol%5B%5D">AdmissionPluginConfig</a></td>
      <td>Configure the API server admission plugins.</td>

      <td />
    </tr>

    <tr>
      <td>`auditPolicy`</td>
      <td>Unstructured</td>
      <td>Configure the API server audit policy.</td>

      <td />
    </tr>

    <tr>
      <td>`resources`</td>
      <td><a href="#resources">ResourcesConfig</a></td>
      <td>Configure the API server resources.</td>

      <td />
    </tr>
  </tbody>
</table>

#### extraVolumes\[]

VolumeMountConfig struct describes extra volume mount for the static pods.

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`hostPath`</td>
      <td>string</td>
      <td>Path on the host.</td>

      <td />
    </tr>

    <tr>
      <td>`mountPath`</td>
      <td>string</td>
      <td>Path in the container.</td>

      <td />
    </tr>

    <tr>
      <td>`readonly`</td>
      <td>bool</td>
      <td>Mount the volume read only.</td>

      <td />
    </tr>
  </tbody>
</table>

#### admissionControl\[]

AdmissionPluginConfig represents the API server admission plugin configuration.

```yaml theme={null}
cluster:
    apiServer:
        admissionControl:
            - name: PodSecurity # Name is the name of the admission controller.
              # Configuration is an embedded configuration object to be used as the plugin's
              configuration:
                apiVersion: pod-security.admission.config.k8s.io/v1alpha1
                defaults:
                    audit: restricted
                    audit-version: latest
                    enforce: baseline
                    enforce-version: latest
                    warn: restricted
                    warn-version: latest
                exemptions:
                    namespaces:
                        - kube-system
                    runtimeClasses: []
                    usernames: []
                kind: PodSecurityConfiguration
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`name`</td>
      <td>string</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`configuration`</td>
      <td>Unstructured</td>

      <td />

      <td />
    </tr>
  </tbody>
</table>

#### resources

ResourcesConfig represents the pod resources.

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`requests`</td>
      <td>Unstructured</td>
      <td>Requests configures the reserved cpu/memory resources.</td>

      <td />
    </tr>

    <tr>
      <td>`limits`</td>
      <td>Unstructured</td>
      <td>Limits configures the maximum cpu/memory resources a container can use.</td>

      <td />
    </tr>
  </tbody>
</table>

### controllerManager

ControllerManagerConfig represents the kube controller manager configuration options.

```yaml theme={null}
cluster:
    controllerManager:
        image: registry.k8s.io/kube-controller-manager:v1.31.4 # The container image used in the controller manager manifest.
        # Extra arguments to supply to the controller manager.
        extraArgs:
            feature-gates: ServerSideApply=true
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`image`</td>
      <td>string</td>
      <td>The container image used in the controller manager manifest.</td>

      <td />
    </tr>

    <tr>
      <td>`extraArgs`</td>
      <td>map\[string]string</td>
      <td>Extra arguments to supply to the controller manager.</td>

      <td />
    </tr>

    <tr>
      <td>`extraVolumes`</td>
      <td><a href="#extravolumes%5B%5D">VolumeMountConfig</a></td>
      <td>Extra volumes to mount to the controller manager static pod.</td>

      <td />
    </tr>

    <tr>
      <td>`env`</td>
      <td>Env</td>
      <td>The `env` field allows for the addition of environment variables for the control plane component.</td>

      <td />
    </tr>

    <tr>
      <td>`resources`</td>
      <td><a href="#resources">ResourcesConfig</a></td>
      <td>Configure the controller manager resources.</td>

      <td />
    </tr>
  </tbody>
</table>

#### extraVolumes\[]

VolumeMountConfig struct describes extra volume mount for the static pods.

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`hostPath`</td>
      <td>string</td>
      <td>Path on the host.</td>

      <td />
    </tr>

    <tr>
      <td>`mountPath`</td>
      <td>string</td>
      <td>Path in the container.</td>

      <td />
    </tr>

    <tr>
      <td>`readonly`</td>
      <td>bool</td>
      <td>Mount the volume read only.</td>

      <td />
    </tr>
  </tbody>
</table>

#### resources

ResourcesConfig represents the pod resources.

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`requests`</td>
      <td>Unstructured</td>
      <td>Requests configures the reserved cpu/memory resources.</td>

      <td />
    </tr>

    <tr>
      <td>`limits`</td>
      <td>Unstructured</td>
      <td>Limits configures the maximum cpu/memory resources a container can use.</td>

      <td />
    </tr>
  </tbody>
</table>

### proxy

ProxyConfig represents the kube proxy configuration options.

```yaml theme={null}
cluster:
    proxy:
        image: registry.k8s.io/kube-proxy:v1.31.4 # The container image used in the kube-proxy manifest.
        mode: ipvs # proxy mode of kube-proxy.
        # Extra arguments to supply to kube-proxy.
        extraArgs:
            proxy-mode: iptables

        # # Disable kube-proxy deployment on cluster bootstrap.
        # disabled: false
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`disabled`</td>
      <td>bool</td>
      <td>Disable kube-proxy deployment on cluster bootstrap.</td>

      <td />
    </tr>

    <tr>
      <td>`image`</td>
      <td>string</td>
      <td>The container image used in the kube-proxy manifest.</td>

      <td />
    </tr>

    <tr>
      <td>`mode`</td>
      <td>string</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`extraArgs`</td>
      <td>map\[string]string</td>
      <td>Extra arguments to supply to kube-proxy.</td>

      <td />
    </tr>
  </tbody>
</table>

### scheduler

SchedulerConfig represents the kube scheduler configuration options.

```yaml theme={null}
cluster:
    scheduler:
        image: registry.k8s.io/kube-scheduler:v1.31.4 # The container image used in the scheduler manifest.
        # Extra arguments to supply to the scheduler.
        extraArgs:
            feature-gates: AllBeta=true
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`image`</td>
      <td>string</td>
      <td>The container image used in the scheduler manifest.</td>

      <td />
    </tr>

    <tr>
      <td>`extraArgs`</td>
      <td>map\[string]string</td>
      <td>Extra arguments to supply to the scheduler.</td>

      <td />
    </tr>

    <tr>
      <td>`extraVolumes`</td>
      <td><a href="#extravolumes%5B%5D">VolumeMountConfig</a></td>
      <td>Extra volumes to mount to the scheduler static pod.</td>

      <td />
    </tr>

    <tr>
      <td>`env`</td>
      <td>Env</td>
      <td>The `env` field allows for the addition of environment variables for the control plane component.</td>

      <td />
    </tr>

    <tr>
      <td>`resources`</td>
      <td><a href="#resources">ResourcesConfig</a></td>
      <td>Configure the scheduler resources.</td>

      <td />
    </tr>

    <tr>
      <td>`config`</td>
      <td>Unstructured</td>
      <td>Specify custom kube-scheduler configuration.</td>

      <td />
    </tr>
  </tbody>
</table>

#### extraVolumes\[]

VolumeMountConfig struct describes extra volume mount for the static pods.

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`hostPath`</td>
      <td>string</td>
      <td>Path on the host.</td>

      <td />
    </tr>

    <tr>
      <td>`mountPath`</td>
      <td>string</td>
      <td>Path in the container.</td>

      <td />
    </tr>

    <tr>
      <td>`readonly`</td>
      <td>bool</td>
      <td>Mount the volume read only.</td>

      <td />
    </tr>
  </tbody>
</table>

#### resources

ResourcesConfig represents the pod resources.

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`requests`</td>
      <td>Unstructured</td>
      <td>Requests configures the reserved cpu/memory resources.</td>

      <td />
    </tr>

    <tr>
      <td>`limits`</td>
      <td>Unstructured</td>
      <td>Limits configures the maximum cpu/memory resources a container can use.</td>

      <td />
    </tr>
  </tbody>
</table>

### discovery

ClusterDiscoveryConfig struct configures cluster membership discovery.

```yaml theme={null}
cluster:
    discovery:
        enabled: true # Enable the cluster membership discovery feature.
        # Configure registries used for cluster member discovery.
        registries:
            # Kubernetes registry uses Kubernetes API server to discover cluster members and stores additional information
            kubernetes: {}
            # Service registry is using an external service to push and pull information about cluster members.
            service:
                endpoint: https://discovery.talos.dev/ # External service endpoint.
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`enabled`</td>
      <td>bool</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`registries`</td>
      <td><a href="#registries">DiscoveryRegistriesConfig</a></td>
      <td>Configure registries used for cluster member discovery.</td>

      <td />
    </tr>
  </tbody>
</table>

#### registries

DiscoveryRegistriesConfig struct configures cluster membership discovery.

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`kubernetes`</td>
      <td><a href="#kubernetes">RegistryKubernetesConfig</a></td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`service`</td>
      <td><a href="#service">RegistryServiceConfig</a></td>
      <td>Service registry is using an external service to push and pull information about cluster members.</td>

      <td />
    </tr>
  </tbody>
</table>

##### kubernetes

RegistryKubernetesConfig struct configures Kubernetes discovery registry.

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`disabled`</td>
      <td>bool</td>
      <td>Disable Kubernetes discovery registry.</td>

      <td />
    </tr>
  </tbody>
</table>

##### service

RegistryServiceConfig struct configures Kubernetes discovery registry.

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`disabled`</td>
      <td>bool</td>
      <td>Disable external service discovery registry.</td>

      <td />
    </tr>

    <tr>
      <td>`endpoint`</td>
      <td>string</td>
      <td>External service endpoint.</td>

      <td />
    </tr>
  </tbody>
</table>

### etcd

EtcdConfig represents the etcd configuration options.

```yaml theme={null}
cluster:
    etcd:
        image: gcr.io/etcd-development/etcd:v3.5.17 # The container image used to create the etcd service.
        # The `ca` is the root certificate authority of the PKI.
        ca:
            crt: LS0tIEVYQU1QTEUgQ0VSVElGSUNBVEUgLS0t
            key: LS0tIEVYQU1QTEUgS0VZIC0tLQ==
        # Extra arguments to supply to etcd.
        extraArgs:
            election-timeout: "5000"

        # # The `advertisedSubnets` field configures the networks to pick etcd advertised IP from.
        # advertisedSubnets:
        #     - 10.0.0.0/8
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`image`</td>
      <td>string</td>
      <td>The container image used to create the etcd service.</td>

      <td />
    </tr>

    <tr>
      <td>`ca`</td>
      <td>PEMEncodedCertificateAndKey</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`extraArgs`</td>
      <td>map\[string]string</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`advertisedSubnets`</td>
      <td>\[]string</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`listenSubnets`</td>
      <td>\[]string</td>

      <td />

      <td />
    </tr>
  </tbody>
</table>

### coreDNS

CoreDNS represents the CoreDNS config values.

```yaml theme={null}
cluster:
    coreDNS:
        image: registry.k8s.io/coredns/coredns:v1.11.3 # The `image` field is an override to the default coredns image.
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`disabled`</td>
      <td>bool</td>
      <td>Disable coredns deployment on cluster bootstrap.</td>

      <td />
    </tr>

    <tr>
      <td>`image`</td>
      <td>string</td>
      <td>The `image` field is an override to the default coredns image.</td>

      <td />
    </tr>
  </tbody>
</table>

### externalCloudProvider

ExternalCloudProviderConfig contains external cloud provider configuration.

```yaml theme={null}
cluster:
    externalCloudProvider:
        enabled: true # Enable external cloud provider.
        # A list of urls that point to additional manifests for an external cloud provider.
        manifests:
            - https://raw.githubusercontent.com/kubernetes/cloud-provider-aws/v1.20.0-alpha.0/manifests/rbac.yaml
            - https://raw.githubusercontent.com/kubernetes/cloud-provider-aws/v1.20.0-alpha.0/manifests/aws-cloud-controller-manager-daemonset.yaml
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`enabled`</td>
      <td>bool</td>
      <td>Enable external cloud provider.</td>
      <td>`true`<br />`yes`<br />`false`<br />`no`<br /></td>
    </tr>

    <tr>
      <td>`manifests`</td>
      <td>\[]string</td>

      <td />

      <td />
    </tr>
  </tbody>
</table>

### inlineManifests\[]

ClusterInlineManifest struct describes inline bootstrap manifests for the user.

```yaml theme={null}
cluster:
    inlineManifests:
        - name: namespace-ci # Name of the manifest.
          contents: |- # Manifest contents as a string.
            apiVersion: v1
            kind: Namespace
            metadata:
            	name: ci
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`name`</td>
      <td>string</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>`contents`</td>
      <td>string</td>
      <td>Manifest contents as a string.</td>

      <td />
    </tr>
  </tbody>
</table>

### adminKubeconfig

AdminKubeconfigConfig contains admin kubeconfig settings.

```yaml theme={null}
cluster:
    adminKubeconfig:
        certLifetime: 1h0m0s # Admin kubeconfig certificate lifetime (default is 1 year).
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`certLifetime`</td>
      <td>Duration</td>

      <td />

      <td />
    </tr>
  </tbody>
</table>
