f31552e192
Replaces the isc-dhcpd PXE-boot VM with the kea-operator + an HA kea pair, GitOps-managed. Deploys on a new, unused anycast IP so nothing is cut over yet; the production cutover off the current dhcpd address (198.18.19.18) is a separate later task. - Add `apps/base/dhcp-system`: namespace, kea-operator RBAC + Deployment (v0.1.0), VPA, and the 4 kea.unkin.net CRDs pulled from the operator repo at tag v0.1.0. - Add CRs translating the legacy dhcpd config (source: puppet `roles/infra/dhcp/server.yaml`): KeaCluster `kea` (2 replicas, hot-standby HA, main.unkin.net, 1200/86400 leases, AU ntp pool); five KeaSubnets 198.18.13-17.0/24 with .200-.220 pools, gateways .254 except .17->.1, next-server 198.18.19.19; Legacy/UEFI-64 PXE client classes; KeaAPI. - DHCP-advertised DNS points at the in-cluster bind-resolvers cluster (PureLB 198.18.200.7), not the legacy 198.18.19.15 forwarder. - Pin the DHCP LoadBalancer Service to the free common-pool IP 198.18.200.10 via PureLB. - KeaAPI bearer token is operator-generated (no plain Secret committed). - Commit generated kea.unkin.net JSON schemas for kubeconform; register dhcp-system in the platform ApplicationSet + AppProject. Client-class object names are lowercased (`legacy`/`uefi-64`) to satisfy RFC1123 since the operator renders the kea class name from metadata.name. https://claude.ai/code/session_01JUoARVdmhxKQHyyyp1pxeT --------- Co-authored-by: Ben Vincent <neotheo@gmail.com> Reviewed-on: #333 Co-authored-by: Ben Vincent <ben@unkin.net> Co-committed-by: Ben Vincent <ben@unkin.net>
100 lines
3.3 KiB
YAML
100 lines
3.3 KiB
YAML
---
|
|
apiVersion: argoproj.io/v1alpha1
|
|
kind: AppProject
|
|
metadata:
|
|
name: platform
|
|
namespace: argocd
|
|
spec:
|
|
description: Platform infrastructure and core services
|
|
sourceRepos:
|
|
- https://git.unkin.net/unkin/argocd-apps
|
|
- https://artifactapi.k8s.syd1.au.unkin.net/api/v1/virtual/helm
|
|
- https://purelb.github.io/purelb/charts
|
|
- oci://gcr.io/k8s-staging-nfd/charts
|
|
- oci://ghcr.io/woodpecker-ci/helm/woodpecker
|
|
- oci://ghcr.io/netbox-community/netbox-chart/netbox
|
|
- oci://docker.gitea.com/charts
|
|
destinations:
|
|
- namespace: '*-system'
|
|
server: https://kubernetes.default.svc
|
|
- namespace: 'artifactapi'
|
|
server: https://kubernetes.default.svc
|
|
- namespace: 'age-api'
|
|
server: https://kubernetes.default.svc
|
|
- namespace: 'authentik'
|
|
server: https://kubernetes.default.svc
|
|
- namespace: 'bind-internal'
|
|
server: https://kubernetes.default.svc
|
|
- namespace: 'bind-external'
|
|
server: https://kubernetes.default.svc
|
|
- namespace: 'cert-manager'
|
|
server: https://kubernetes.default.svc
|
|
- namespace: 'certificates'
|
|
server: https://kubernetes.default.svc
|
|
- namespace: 'consul'
|
|
server: https://kubernetes.default.svc
|
|
- namespace: 'dhcp-system'
|
|
server: https://kubernetes.default.svc
|
|
- namespace: 'encapi'
|
|
server: https://kubernetes.default.svc
|
|
- namespace: 'externaldns'
|
|
server: https://kubernetes.default.svc
|
|
- namespace: 'gitea'
|
|
server: https://kubernetes.default.svc
|
|
- namespace: 'jfrog'
|
|
server: https://kubernetes.default.svc
|
|
- namespace: 'kanidm'
|
|
server: https://kubernetes.default.svc
|
|
- namespace: 'netbox'
|
|
server: https://kubernetes.default.svc
|
|
- namespace: 'node-feature-discovery'
|
|
server: https://kubernetes.default.svc
|
|
- namespace: 'pdbmux'
|
|
server: https://kubernetes.default.svc
|
|
- namespace: 'priority-classes'
|
|
server: https://kubernetes.default.svc
|
|
- namespace: 'purelb'
|
|
server: https://kubernetes.default.svc
|
|
- namespace: 'puppet'
|
|
server: https://kubernetes.default.svc
|
|
- namespace: 'reposync'
|
|
server: https://kubernetes.default.svc
|
|
- namespace: 'vault'
|
|
server: https://kubernetes.default.svc
|
|
- namespace: 'woodpecker'
|
|
server: https://kubernetes.default.svc
|
|
clusterResourceWhitelist:
|
|
- group: ''
|
|
kind: Namespace
|
|
- group: 'rbac.authorization.k8s.io'
|
|
kind: ClusterRole
|
|
- group: 'rbac.authorization.k8s.io'
|
|
kind: ClusterRoleBinding
|
|
- group: 'apiextensions.k8s.io'
|
|
kind: CustomResourceDefinition
|
|
- group: 'admissionregistration.k8s.io'
|
|
kind: MutatingWebhookConfiguration
|
|
- group: 'admissionregistration.k8s.io'
|
|
kind: ValidatingWebhookConfiguration
|
|
- group: 'scheduling.k8s.io'
|
|
kind: PriorityClass
|
|
- group: 'purelb.io'
|
|
kind: '*'
|
|
- group: 'nfd.k8s-sigs.io'
|
|
kind: NodeFeatureRule
|
|
- group: 'deviceplugin.intel.com'
|
|
kind: '*'
|
|
- group: 'cert-manager.io'
|
|
kind: Certificate
|
|
- group: 'cert-manager.io'
|
|
kind: Issuer
|
|
- group: 'cert-manager.io'
|
|
kind: ClusterIssuer
|
|
- group: 'gateway.networking.k8s.io'
|
|
kind: GatewayClass
|
|
- group: 'networking.k8s.io'
|
|
kind: IngressClass
|
|
namespaceResourceWhitelist:
|
|
- group: '*'
|
|
kind: '*'
|