This commit is contained in:
Mike McFetridge
2026-07-20 09:23:17 -04:00
parent c1315882da
commit 72272e4006
3179 changed files with 562960 additions and 14 deletions
+36
View File
@@ -0,0 +1,36 @@
<%- if create_namespace %>
---
apiVersion: v1
kind: Namespace
metadata:
name: << namespace >>
<%- endif %>
---
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: << pool_name >>
namespace: << namespace >>
spec:
addresses:
- << address_range >>
autoAssign: << auto_assign | lower >>
avoidBuggyIPs: << avoid_buggy_ips | lower >>
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: << advertisement_name >>
namespace: << namespace >>
spec:
ipAddressPools:
- << pool_name >>
<%- if node_selector_enabled %>
nodeSelectors:
- matchLabels:
<< node_selector_key >>: << node_selector_value >>
<%- endif %>
<%- if bind_interfaces_enabled %>
interfaces:
- << bind_interface >>
<%- endif %>
+153
View File
@@ -0,0 +1,153 @@
{
"slug": "metallb",
"kind": "kubernetes",
"metadata": {
"name": "MetalLB Layer2 Bootstrap",
"description": "Practical MetalLB bootstrap manifests for the common homelab path: an IPAddressPool plus L2Advertisement for bare-metal LoadBalancer services.",
"tags": [],
"icon": {
"provider": "simple-icons",
"id": "kubernetes"
},
"draft": true,
"version": {
"name": "0.15.2",
"source_dep_name": "manual/metallb"
}
},
"variables": [
{
"title": "General",
"name": "general",
"items": [
{
"name": "namespace",
"type": "str",
"title": "MetalLB namespace",
"required": false,
"default": "metallb-system",
"description": "Namespace where MetalLB custom resources live.",
"config": {
"placeholder": "metallb-system"
}
},
{
"name": "create_namespace",
"type": "bool",
"title": "Create namespace",
"required": false,
"default": false,
"description": "Render the MetalLB namespace manifest before the pool configuration."
},
{
"name": "pool_name",
"type": "str",
"title": "Pool name",
"required": false,
"default": "homelab-pool",
"config": {
"placeholder": "homelab-pool"
}
},
{
"name": "advertisement_name",
"type": "str",
"title": "Advertisement name",
"required": false,
"default": "homelab-l2",
"config": {
"placeholder": "homelab-l2"
}
}
]
},
{
"title": "Address Pool",
"name": "pool",
"items": [
{
"name": "address_range",
"type": "str",
"title": "Address range",
"required": false,
"default": "192.168.1.240-192.168.1.250",
"description": "Single IP, CIDR, or start-end range reserved for LoadBalancer services.",
"config": {
"placeholder": "192.168.1.240-192.168.1.250"
}
},
{
"name": "auto_assign",
"type": "bool",
"title": "Auto assign",
"required": false,
"default": true,
"description": "Allow MetalLB to assign IPs automatically from this pool."
},
{
"name": "avoid_buggy_ips",
"type": "bool",
"title": "Avoid buggy IPs",
"required": false,
"default": false,
"description": "Skip .0 and .255 style addresses for networks with broken consumer gear."
}
]
},
{
"title": "Layer2 Advertisement",
"name": "layer2",
"items": [
{
"name": "bind_interfaces_enabled",
"type": "bool",
"title": "Bind interfaces",
"required": false,
"default": false,
"description": "Restrict ARP announcements to a specific host interface."
},
{
"name": "bind_interface",
"type": "str",
"title": "Interface name",
"required": false,
"default": "eth0",
"description": "Interface used for Layer2 announcements when interface binding is enabled.",
"config": {
"placeholder": "eth0"
}
},
{
"name": "node_selector_enabled",
"type": "bool",
"title": "Node selector",
"required": false,
"default": false,
"description": "Limit announcements to nodes with a specific label."
},
{
"name": "node_selector_key",
"type": "str",
"title": "Node selector key",
"required": false,
"default": "kubernetes.io/hostname",
"description": "Node label key used when node selection is enabled.",
"config": {
"placeholder": "kubernetes.io/hostname"
}
},
{
"name": "node_selector_value",
"type": "str",
"title": "Node selector value",
"required": false,
"default": "k3s-server-1",
"description": "Node label value used when node selection is enabled.",
"config": {
"placeholder": "k3s-server-1"
}
}
]
}
]
}