-
-
Notifications
You must be signed in to change notification settings - Fork 317
Expand file tree
/
Copy pathcluster.sample.toml
More file actions
291 lines (227 loc) · 12.2 KB
/
Copy pathcluster.sample.toml
File metadata and controls
291 lines (227 loc) · 12.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
# =============================================================================
# Physical LAN that your Talos nodes live on. Defines the address space
# used for node IPs, the gateway/DNS/NTP servers nodes will use, and an
# optional VLAN tag for switch ports that aren't natively tagged.
# =============================================================================
[network]
# The CIDR block your nodes' IPs come from. Every node's `address`, the Kube
# API VIP, and the gateway VIPs (internal/dns/external) must all sit inside
# this range.
# REQUIRED. Example: "192.168.1.0/24"
node_cidr = ""
# Upstream DNS servers Talos nodes use for name resolution. Defaults to
# Cloudflare (1.1.1.1 / 1.0.0.1). Override if you run an internal resolver
# (Pi-hole, Unbound, AdGuard) or want a different public provider.
# OPTIONAL. Default: ["1.1.1.1", "1.0.0.1"]
# dns_servers = ["1.1.1.1", "1.0.0.1"]
# Upstream NTP servers. Defaults to Cloudflare's anycast NTP. Most homelabs
# don't need to change this.
# OPTIONAL. Default: ["162.159.200.1", "162.159.200.123"]
# ntp_servers = ["162.159.200.1", "162.159.200.123"]
# Default gateway IP that nodes use to reach the rest of your LAN/WAN.
# Defaults to the first usable host in node_cidr (e.g. 192.168.1.1 for
# 192.168.1.0/24), which is correct for most home routers. Override if your
# router lives at a non-standard address inside the subnet.
# OPTIONAL. Default: first IP in node_cidr
# default_gateway = ""
# 802.1Q VLAN tag to apply to the Talos node interface. Only set this if
# your switch ports are configured as trunks (passing tagged traffic to the
# nodes); access ports already untag VLAN traffic. Must be 1-4094.
# REF: https://www.talos.dev/latest/advanced/advanced-networking/#vlans
# OPTIONAL.
# vlan_tag = ""
# =============================================================================
# Cluster-internal control plane and overlay networks. The pod and service
# CIDRs are in-cluster only — they don't have to be routable on your LAN
# and never appear on the wire outside the nodes.
# =============================================================================
[kubernetes]
# CIDR Cilium hands out to pods. /16 gives ~64K pod IPs, which is well beyond
# what a homelab needs but matches the upstream default. Must NOT overlap
# with node_cidr or svc_cidr.
# OPTIONAL. Default: "10.42.0.0/16"
# pod_cidr = "10.42.0.0/16"
# CIDR for ClusterIP services (the virtual IPs `kubectl get svc` shows).
# Same /16 reasoning as pod_cidr. Must NOT overlap with node_cidr or
# pod_cidr.
# OPTIONAL. Default: "10.43.0.0/16"
# svc_cidr = "10.43.0.0/16"
# ClusterIP for the CoreDNS Service. Must be inside svc_cidr.
# OPTIONAL. Default: the 10th IP in svc_cidr
# coredns_addr = ""
[kubernetes.api]
# Virtual IP for the Kubernetes API server. kubectl, flux, and every other
# client connect here on port 6443. Must be an unused IP inside
# network.node_cidr — kube-vip floats it across controller nodes.
# REQUIRED.
addr = ""
# Additional Subject Alternative Names to put on the Kube API cert. Useful
# if you want to call the API by hostname (e.g. via a CNAME or local
# /etc/hosts entry) instead of the raw IP.
# OPTIONAL. Example: ["mycluster.example.com"]
# tls_sans = ["mycluster.example.com"]
# =============================================================================
# LoadBalancer IPs that Cilium hands out to the cluster's edge gateways.
# Each must be an unused address inside network.node_cidr, and all four
# (these three plus kubernetes.api.addr) must be distinct.
# =============================================================================
[gateways]
# IP for the `envoy-internal` gateway — used by HTTPRoutes intended for
# private/in-network access only. Most apps use this gateway by default.
# REQUIRED.
internal = ""
# IP for `k8s_gateway`, which serves DNS for cluster-managed hostnames.
# Point your home DNS server's conditional forwarder for domain.name
# at this IP to enable split-DNS resolution from your LAN.
# REQUIRED.
dns = ""
# IP for the `envoy-external` gateway — sits behind the ingress path (e.g.
# the cloudflared tunnel) and handles traffic exposed to the public
# internet. HTTPRoutes that reference this gateway become reachable via
# your public domain.
# REQUIRED unless ingress.mode is "none" (internal-only cluster).
external = ""
# =============================================================================
# The Git repo Flux will sync from. This is the single source of truth
# for everything in your cluster — once bootstrapped, changes are made by
# pushing to this repo. Any Git host works: GitHub, GitLab, Gitea,
# Forgejo, Codeberg or self-hosted.
# =============================================================================
[repository]
# Full clone URL of the repository this cluster will pull from.
# Must be the repo you cloned this template into.
# Use `https://` if the repo is publicly readable (or `http://` for a
# LAN-local git server). Use `ssh://git@` if it is
# private: the template then wires up a deploy key (`deploy.key.pub`) so
# Flux can clone over SSH; see the README for the extra setup step.
# REQUIRED. Examples:
# "https://github.com/onedr0p/home-ops.git"
# "ssh://git@gitlab.com/onedr0p/home-ops.git"
# "ssh://git@git.example.com/k8s/home-ops.git"
url = ""
# Branch Flux watches. Changes pushed to this branch get reconciled into the
# cluster.
# OPTIONAL. Default: "main"
# branch = "main"
# Webhook payload format the Flux webhook Receiver verifies, so pushes are
# reconciled instantly. Gitea and Forgejo emulate GitHub webhooks, so keep
# "github" for them. Use "generic-hmac" for anything else that signs with
# HMAC; see https://fluxcd.io/flux/components/notification/receivers/
# Use "none" to skip the webhook entirely (e.g. your Git host cannot reach
# the cluster); Flux then only polls on an interval.
# OPTIONAL. Default: "github".
# Allowed: "github" | "gitlab" | "generic-hmac" | "none"
# webhook_provider = "github"
# SSH host keys for your Git host (`ssh-keyscan -t ed25519,ecdsa,rsa <host>`
# output). Only used with `ssh://` URLs. Keys for github.com, gitlab.com and
# codeberg.org are bundled; REQUIRED for any other host.
# OPTIONAL. Example:
# known_hosts = """
# git.example.com ssh-ed25519 AAAA...
# """
# known_hosts = ""
# =============================================================================
# The domain your cluster's hostnames live under. Used for every rendered
# hostname (echo, flux-webhook, internal split DNS) and the wildcard
# certificate, regardless of DNS provider.
# =============================================================================
[domain]
# REQUIRED. Example: "example.com"
name = ""
# =============================================================================
# Public DNS authority and certificate issuance. With "cloudflare",
# external-dns publishes records automatically and cert-manager issues a
# Let's Encrypt wildcard via ACME DNS-01. With "none", nothing is
# published and the wildcard certificate is issued by an in-cluster
# self-signed CA instead (internal-only cluster).
# =============================================================================
[dns]
# OPTIONAL. Default: "cloudflare". Allowed: "cloudflare" | "none"
# provider = "cloudflare"
# Cloudflare API token (NOT the global API key) with `Zone - DNS - Edit` and
# `Account - Cloudflare Tunnel - Read` permissions, scoped to the zone
# above. See the README for token creation steps.
# REQUIRED when provider is "cloudflare"; must be empty otherwise.
token = ""
# =============================================================================
# How the public internet reaches the cluster's external gateway. With
# "cloudflare-tunnel", cloudflared connects outbound so no ports are
# forwarded (requires dns.provider = "cloudflare" and
# cloudflare-tunnel.json). With "direct", you forward TCP 443 (and
# optionally 80) on your router to gateways.external and point an
# `external.<domain>` DNS record at your WAN address (A record or DDNS
# CNAME) yourself; per-app records are still published automatically.
# With "none", nothing is exposed and apps are only reachable on your
# LAN via the internal gateway.
# =============================================================================
[ingress]
# OPTIONAL. Default: "cloudflare-tunnel" when dns.provider is "cloudflare",
# otherwise "none". Allowed: "cloudflare-tunnel" | "direct" | "none"
# mode = "cloudflare-tunnel"
# =============================================================================
# CNI configuration. Defaults are sane for most homelab setups; touch
# this section only if you need BGP peering or a different LB mode.
# =============================================================================
[cilium]
# How Cilium's load balancer handles return traffic. `dsr` (Direct Server
# Return) preserves the client IP and is faster, but requires a switch
# fabric that won't drop asymmetric flows. `snat` masquerades the client
# and is the safe default for unknown topologies.
# REF: https://docs.cilium.io/en/stable/network/kubernetes/kubeproxy-free/
# OPTIONAL. Default: "dsr". Allowed: "dsr" | "snat"
# loadbalancer_mode = "dsr"
# Cilium BGP peering — advertises Service IPs to your upstream router so
# LoadBalancer addresses become reachable from anywhere on your LAN
# (rather than only via L2 ARP). Set ALL THREE fields below to enable;
# leaving any blank disables BGP entirely.
# REF: https://docs.cilium.io/en/latest/network/bgp-control-plane/bgp-control-plane/
[cilium.bgp]
# IP of your BGP-speaking router. The cluster peers with it from each node.
# OPTIONAL. Example: "192.168.1.1"
# router_addr = ""
# ASN your router uses for BGP. Anything in the private range (64512-65534)
# is fine if you're not peering with the public internet.
# OPTIONAL. Example: "64513"
# router_asn = ""
# ASN the cluster's nodes use for BGP. Pick a different value than
# router_asn so peering is eBGP rather than iBGP.
# OPTIONAL. Example: "64514"
# node_asn = ""
# =============================================================================
# Talos Image Factory settings shared by all nodes.
# =============================================================================
[talos]
# Default schematic for every node that doesn't set its own schematic_id.
# The 64-character hex string from your build at https://factory.talos.dev/
# OPTIONAL if every node sets schematic_id itself.
schematic_id = ""
# =============================================================================
# One [[nodes]] table per physical machine or VM in the cluster. At least
# one controller (controller=true) is required; worker nodes are optional.
# For HA, use 3 controllers.
#
# Discover hardware details from a node already booted into Talos
# maintenance mode:
# talosctl get disks -n <node-ip> --insecure
# talosctl get links -n <node-ip> --insecure
# Schematic ID is the 64-character hex string from your build at:
# https://factory.talos.dev/
#
# The block below is a template — copy it once per node, uncomment, and
# fill in the values.
# =============================================================================
# [[nodes]]
# name = "k8s-0" # Hostname; must match [a-z0-9-]+ (not "global"/"controller"/"worker").
# address = "192.168.1.10" # Static IP; must be inside network.node_cidr.
# controller = true # true = control-plane (etcd + API server), false = worker.
# disk = "/dev/nvme0n1" # Block device or /dev/disk/by-id/... symlink to install Talos onto.
# mac_addr = "aa:bb:cc:dd:ee:ff" # Primary NIC MAC.
#
# # Optional when [talos] sets a cluster-wide default:
# schematic_id = "376567988ad370138ad8b2698212367b8edcb69b5fd68c80be1f2ec7d603b4ba" # 64-hex from factory.talos.dev.
#
# # Optional advanced fields (each independently uncommentable):
# mtu = 1500 # Set only for jumbo frames / non-1500 MTUs (1450-9000).
# secureboot = false # UEFI SecureBoot — requires a SecureBoot-enabled schematic.
# encrypt_disk = false # TPM-bound full-disk encryption.
# kernel_modules = ["nvidia", "nvidia_uvm"] # Only for schematics shipping matching extensions.