--- # Shared connection + cluster facts for every k3s node. # cloud-init created this login user (tofu var login_user); it has NOPASSWD sudo. ansible_user: k3s # The kube-apiserver endpoint the whole stack agrees on: the primary's REAL node IP. # NOTE: ansible_host is now the pfSense NAT SSH target (192.168.2.102:225x), NOT the node # IP — so we read the real 192.168.1.x from k3s_node_ip instead. Used for k3s --tls-san / # secondary --server AND for Cilium k8sServiceHost so the Ansible bootstrap and the Flux # HelmRelease stay in PARITY (docs/02 contract). k3s_api_host: "{{ hostvars[groups['k3s_primary'][0]]['k3s_node_ip'] }}" k3s_api_port: 6443 # Control-plane HA VIP floated by kube-vip (roles/kube_vip). A stable failover # endpoint for the kube-apiserver, fronted by an operator pfSense port-forward at # 192.168.1.49:6443. Shared here so BOTH kube_vip AND the k3s_server tls-san list # agree on the address (the serving cert must carry this IP or TLS via the VIP # fails to validate). kube_vip_address: "192.168.1.49" # Controller (dev container) reaches the kube-API DIRECTLY via the pfSense NAT # (192.168.2.50:6443 -> kube-vip VIP 192.168.1.49:6443) — no SSH tunnel. TLS is # validated against the VIP via tls-server-name (the VIP IP is in the serving cert's # tls-san list, so TLS through the NAT validates). Only the controller kubeconfig uses # these; k8sServiceHost (in-cluster) stays the real node IP. cluster_controller_api_server: "https://192.168.2.50:6443" cluster_controller_tls_server_name: "{{ kube_vip_address }}"