Cambiar el controlador de Gateway¶
El HomeLab publica sus servicios con Gateway API
(Gateway y HTTPRoute), no con Ingress. Hay un solo Gateway, llamado
homelab (namespace gateway), con un listener HTTP (80) y uno HTTPS (443)
para *.homelab.local. Cada app se engancha con su propio HTTPRoute
(argocd/route, vcluster/route).
Quien atiende ese Gateway es un controlador a la vez; los tres comparten las IP 80/443 de MetalLB y no pueden convivir:
| Application | Controlador | Notas |
|---|---|---|
kong (predeterminado) |
Kong Ingress Controller (KIC) | Usa el Kong que instala el chart (modo unmanaged) |
traefik |
Traefik | Solo Gateway API: sin Ingress ni IngressRoute |
nginx-gateway |
NGINX Gateway Fabric | Necesita también nginx-gateway-helm-repo (registro OCI del chart) |
El Gateway de cada uno está en gateway/<kong|traefik|nginx>/ del repo
gitops; GatewayClass, puertos y
anotaciones cambian de uno a otro, los HTTPRoute no.
Cómo funciona el TLS¶
- cert-manager (
cert-manager) y una CA propia (cert-manager-config,ClusterIssuer homelab-ca) emiten el certificado. ElGatewaylleva la anotacióncert-manager.io/cluster-issuer: homelab-cay cert-manager crea solo el Secrethomelab-tls. - El Gateway termina el TLS y habla HTTP con los servicios. Por eso
argocd-servercorre conserver.insecure(enargocd/config) y elHTTPRouteapunta a su puerto 80. El diff del pipeline degitopsusa--plaintextpor el mismo motivo. -
Para que el navegador confíe en la CA, importa su certificado raíz:
Cambiar de controlador¶
- En
bootstrap/root-appset.yaml(repogitops), comenta el controlador actual y descomenta el nuevo (ynginx-gateway-helm-reposi es NGINX). Haz push. -
Vuelve a aplicar el ApplicationSet (ArgoCD no lo gestiona):
-
Las Applications de los controladores llevan el finalizer de ArgoCD: al comentar la app,
homelab-rootborra la Application y sus recursos (el Gateway y las IP quedan libres para el nuevo). Espera a que desaparezca: -
Verifica que el Gateway quede programado y con IP:
Tiene que mostrar
PROGRAMMED=True, una dirección entre192.168.23.200y.220, y losHTTPRouteconAccepted.
Primera vez (viniendo de ingress-nginx)¶
ingress-nginx y el Ingress de ArgoCD ya no existen en gitops. Sus
Applications desaparecen al volver a aplicar el ApplicationSet, pero lo que
crearon queda en el clúster:
kubectl -n argocd delete ingress argocd-server
kubectl delete namespace ingress-nginx
kubectl delete clusterrole,clusterrolebinding,ingressclass,validatingwebhookconfiguration \
-l app.kubernetes.io/instance=ingress-nginx
Aplica primero el cambio de argocd (activa server.insecure): hasta que el
Gateway esté Programmed, entra a ArgoCD con
kubectl port-forward svc/argocd-server -n argocd 8080:80 (http://localhost:8080).
Si falla¶
| Síntoma | Revisar |
|---|---|
Gateway sin dirección o PROGRAMMED=False |
kubectl describe gateway homelab -n gateway: GatewayClass inexistente (controlador no activo) o CRDs de Gateway API ausentes (gateway-api sin sincronizar) |
| Dos controladores activos | Comenta uno: se pelean por las IP de MetalLB |
El Gateway no tiene certificado (homelab-tls no existe) |
kubectl describe certificate -n gateway; cert-manager-config debe estar Healthy |
HTTPRoute sin Accepted |
kubectl describe httproute -n argocd argocd-server: parentRefs debe apuntar a homelab en gateway |
| Con Kong, el listener queda sin programar | KIC enlaza el Gateway con los puertos del Kong del chart; revisa kubectl describe gateway y los puertos del Service kong-gateway-proxy |
ArgoCD responde too many redirects o error de protocolo |
server.insecure no se aplicó: kubectl -n argocd get cm argocd-cmd-params-cm -o yaml |