mirror of
https://github.com/siderolabs/talos.git
synced 2025-10-17 02:21:13 +02:00
Fixes #4138 When KubeSpan is enabled, Talos automatically generates or loads KubeSpan identity which consists of Wireguard key pair. ULA address is calculated based on ClusterID and first NIC MAC address. Some code was borrowed from #3577. Example: ``` $ talosctl -n 172.20.0.2 get ksi NODE NAMESPACE TYPE ID VERSION ADDRESS PUBLICKEY 172.20.0.2 kubespan KubeSpanIdentity local 1 fd71:6e1d:86be:6302:e871:1bff:feb2:ccee/128 Oak2fBEWngBhwslBxDVgnRNHXs88OAp4kjroSX0uqUE= ``` Additional changes: * `--with-kubespan` flag for `talosctl cluster create` for quick testing * validate that cluster discovery (and KubeSpan) requires ClusterID and ClusterSecret. Signed-off-by: Andrey Smirnov <andrey.smirnov@talos-systems.com> Signed-off-by: Seán C McCord <ulexus@gmail.com> Co-authored-by: Seán C McCord <ulexus@gmail.com>
32 lines
840 B
Go
32 lines
840 B
Go
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
package kubespan
|
|
|
|
import (
|
|
"fmt"
|
|
"net"
|
|
|
|
"github.com/mdlayher/netx/eui64"
|
|
"inet.af/netaddr"
|
|
)
|
|
|
|
func wgEUI64(prefix netaddr.IPPrefix, mac net.HardwareAddr) (out netaddr.IPPrefix, err error) {
|
|
if prefix.IsZero() {
|
|
return out, fmt.Errorf("cannot calculate IP from zero prefix")
|
|
}
|
|
|
|
stdIP, err := eui64.ParseMAC(prefix.IPNet().IP, mac)
|
|
if err != nil {
|
|
return out, fmt.Errorf("failed to parse MAC into EUI-64 address: %w", err)
|
|
}
|
|
|
|
ip, ok := netaddr.FromStdIP(stdIP)
|
|
if !ok {
|
|
return out, fmt.Errorf("failed to parse intermediate standard IP %q: %w", stdIP.String(), err)
|
|
}
|
|
|
|
return netaddr.IPPrefixFrom(ip, ip.BitLen()), nil
|
|
}
|