Skip to content

Requirements (self-hosted Nest)

This page describes the network architecture and connectivity requirements when self-hosting Nest.

Architecture

The following image depicts the involved components and their connectivity flows. To illustrate it with examples, we have chosen the 10.0.0.0/8 RFC1918 range and the domain corp.local as an example – please adapt it to your setup.

Requirements (self-hosted)

Customer-provided Services

As shown in the picture above, meltcloud requires the following services to be provided by the customer:

  • DHCP-Server: to provide IP addresses, routes, DNS & NTP servers for all Machines. See Details below for the required fields. Nest itself doesn't use DHCP and is statically addressed.
  • DNS: to register the internal hostnames (*.meltcloud.corp.local) and to resolve all internal and external destinations
  • NTP-Server: to synchronize time of Machines. Strongly recommended to avoid issues with TLS client certificates. If none provided, Machines will fall back to *.flatcar.pool.ntp.org.
  • BGP Peer: only when Nest is installed with BGP announcements instead of L2. A switch or router configured to accept a BGP session from each Nest instance, so that the Nest can announce its VIPs.
  • Object Store (S3): optional, to store Foundry artifacts and packages (to avoid storing them on the Nest appliance)
  • Backup Store (S3): to store Foundry and control plane backups for disaster recovery purposes
  • Egress Internet Connectivity (unless Airgapped): Connectivity to artifacts.meltcloud.io or monitoring.meltcloud.io. An HTTP forward proxy can be used.

Port Matrix

The following table shows all required connectivity according to the image above:

IDSourceDestinationPorts/ProtocolsReasonRequiredComment
1Subnet Nest (10.0.1.0/24)artifacts.meltcloud.io (62.10.39.76)443/tcp (HTTPS)To download package updatesYes, unless AirgappedDedicated IP (no CDN). HTTP proxy supported.
2Subnet Nest (10.0.1.0/24)monitoring.meltcloud.io (62.10.39.76)443/tcp (HTTPS)To push metrics data for remote supportYes, unless AirgappedDedicated IP (no CDN). HTTP proxy supported.
3Subnet Nest (10.0.1.0/24)live-s3.corp.local (10.0.0.100)443/tcp (HTTPS)To store Foundry artifacts on packagesNoTo avoid storing large files on Nest. Recommended for bigger setups/when S3 is available in-house.
4Subnet Nest (10.0.1.0/24)backup-s3.corp.local (10.0.0.110)443/tcp (HTTPS)To store Foundry and control plane backups for DRYesCan also be consumed as an additional service from meltcloud (if not available in-house)
5Subnet Nest (10.0.1.0/24)BGP-Peer(s) (10.0.0.2, 10.0.1.2)179/tcp (BGP)To announce the VIPs to the networkOnly with BGPNot required with L2 announcements. The peer is usually the switch the Nest is attached to
6Subnet Nest (10.0.1.0/24)BGP-Peer(s) (10.0.0.2, 10.0.1.2)3784/udp (BFD)To detect a failed peer in under a secondOnly with BFDOptional per peer. Without it a dead peer takes the BGP hold time, 90s by default
7Subnet Nest (10.0.1.0/24)DNS-Server (10.0.0.11)53/udp/tcp (DNS)To resolve hostnamesYes
8Subnet Nest (10.0.1.0/24)NTP-Server (10.0.0.12)123/udp (NTP)To synchronize timeNoIf unset, falls back to *.flatcar.pool.ntp.org
9Subnets Machines-* (10.0.2-3.0/24)DHCP-Server (10.0.0.10)67/udp (DHCP)To retrieve IPs, routes, DNS & NTP serverYes
10Subnets Machines-* (10.0.2-3.0/24)DNS-Server (10.0.0.11)53/udp/tcp (DNS)To resolve hostnamesYes
11Subnets Machines-* (10.0.2-3.0/24)NTP-Server (10.0.0.12)123/udp (NTP)To synchronize timeNoIf unset, falls back to *.flatcar.pool.ntp.org
12Subnets Machines-* (10.0.2-3.0/24)CSI-compliant IP Storage (10.0.0.200/24)NFS, iSCSI, ...For persistent volumesNoDepends on vendor/technology
13Subnets Machines-* (10.0.2-3.0/24)Foundry, *.meltcloud.corp.local (10.0.1.30)443/tcp (HTTPS)Agent <> Foundry interaction, downloading of packagesYesUses TLS Client Certificates
14Subnets Machines-* (10.0.2-3.0/24)Foundry, agent.meltcloud.corp.local (10.0.1.30)8133/tcp (HTTPS)Tunnelled TLS traffic for in-cluster Pod -> kube-apiserver traffic (as the SNI listener cannot be used for this traffic)YesSame IP as ID 12, different port
15Subnet Machines-prd (10.0.2.0/24)Kubernetes Control Plane prd-1, <prd-1-uuid>.k8s.meltcloud.corp.local (10.0.1.40)6443/tcp, 8132/tcp (HTTPS)Kubelet -> kube-apiserver and konnectivity trafficYesUses TLS Client Certificates. Every Cluster uses these same ports and is told apart by its hostname (SNI)
16Subnet Machines-tst (10.0.3.0/24)Kubernetes Control Plane tst-1, <tst-1-uuid>.k8s.meltcloud.corp.local (10.0.1.40)6443/tcp, 8132/tcp (HTTPS)Kubelet -> kube-apiserver and konnectivity trafficYesUses TLS Client Certificates. Every Cluster uses these same ports and is told apart by its hostname (SNI)
17platform engineerFoundry, *.meltcloud.corp.local (10.0.1.30)443/tcp (HTTPS)web or API interactionYesAllow Websockets if going over a HTTP proxy
18platform engineerKubernetes Control Plane prd-1, <prd-1-uuid>.k8s.meltcloud.corp.local (10.0.1.40)6443/tcp (HTTPS)kubectl interactionNoThe admin kubeconfig uses TLS Client Certificates, the user kubeconfig authenticates via OIDC

DNS Entries & TLS Certificates

The following hostnames must resolve to the IPs below. Foundry also requires TLS server certificates for some of its hostnames; those certificates have to be provided (i.e. from a Customer or Public CA).

For the Foundry hostnames we recommend using wildcards (for DNS and TLS Certificates). If that is not possible, you can also create the specific entries as found in the list below (except for the Cluster hostnames, where a wildcard DNS entry is required).

HostnameResolves toUsed forRecommended DNS EntryRecommended TLS CertificateCertificate Issued By
app.meltcloud.corp.localFoundry (10.0.1.30)Web browser and Terraform access*.meltcloud.corp.localSAN *.meltcloud.corp.localCustomer or Public CA
agent.meltcloud.corp.localFoundry (10.0.1.30)Agent -> API access, Pod tunnel on 8133*.meltcloud.corp.localSAN *.meltcloud.corp.localCustomer or Public CA
pkg.meltcloud.corp.localFoundry (10.0.1.30)Reading local packages for Machines*.meltcloud.corp.localSAN *.meltcloud.corp.localCustomer or Public CA
pkg-push.meltcloud.corp.localFoundry (10.0.1.30)Pushing local packages for Machines*.meltcloud.corp.localSAN *.meltcloud.corp.localCustomer or Public CA
s3.meltcloud.corp.localFoundry (10.0.1.30)S3 API, only when using the built-in object store*.meltcloud.corp.localSAN *.meltcloud.corp.localCustomer or Public CA
<prd-1-uuid>.k8s.meltcloud.corp.localHosted Control Planes (10.0.1.40)kube-apiserver and konnectivity*.k8s.meltcloud.corp.local (Wildcard required)n/aAuto-generated

Machine Network Configuration via DHCP

Machines require DHCP to configure IP addresses and environment-specific settings like routes, DNS and NTP servers.

Through DHCP, the following parameters must be provided:

  • IP address and subnet: primary network identity of the host
  • Default gateway and static routes: customized routing for specific environments
  • DNS servers and search domains: name resolution configuration
  • NTP servers: time synchronization sources

Example Kea DHCP configuration

json
{
  "Dhcp4": {
    "subnet4": [
      {
        "subnet": "10.10.10.0/24",
        "pools": [
          { "pool": "10.10.10.100 - 10.10.10.200" }
        ],
        "option-data": [
          { "name": "routers", "data": "10.10.10.1" }, // sets default gw / route
          { "name": "domain-name", "data": "lab.example.com" }, // dns search domain
          { "name": "domain-name-servers", "data": "10.10.10.53, 10.10.10.54" }, // dns servers
          { "name": "ntp-servers", "data": "10.10.10.60" }, //  ntp source
        ]
      }
    ]
  }
}