Browse Source

Ip fija para el contenedor y credenciales por robot en harbor

Tino 1 tháng trước cách đây
mục cha
commit
a249cd24b0
4 tập tin đã thay đổi với 73 bổ sung và 40 xóa
  1. 14 25
      HARBOR-ROBOT.md
  2. 58 0
      k8s/Makefile
  3. 1 0
      k8s/service-ingress.yaml
  4. 0 15
      renuevaRobot.sh

+ 14 - 25
HARBOR-ROBOT.md

@@ -2,12 +2,12 @@
 
 ## El problema
 
-El secret `myregistrykey` del cluster guarda la contraseña personal de Harbor
-(en base64, que no es cifrado). Cualquiera con acceso al cluster puede leerla,
-y si se cambia la contraseña personal en Harbor, el despliegue deja de hacer
-pull sin motivo aparente.
+El secret `myregistrykey` del cluster guarda credenciales de Harbor (en
+base64, que no es cifrado). Si se usara la contraseña personal, cualquiera
+con acceso al cluster podría leerla, y al cambiarla en Harbor el despliegue
+dejaría de hacer pull sin motivo aparente.
 
-## La solución
+## La solución: un robot account
 
 Un *robot account* es un usuario artificial de Harbor pensado para máquinas:
 
@@ -17,33 +17,22 @@ Un *robot account* es un usuario artificial de Harbor pensado para máquinas:
 - Caducidad configurable
 - Revocable sin afectar al usuario real
 
-## Crear el robot account
+## Crear o renovar el secret en el cluster
 
 1. Entrar en Harbor → proyecto **reymota** → pestaña **Robot Accounts** →
-   **New Robot Account**
-2. Nombre: `regbrowser-pull`
-3. Expiración: según preferencia (p. ej. 1 año)
-4. Permisos: solo **Pull** sobre el proyecto
-5. Copiar el token que se muestra una sola vez (y el nombre de usuario
-   generado, con el formato `robot$reymota+regbrowser-pull`)
-
-## Sustituir el secret en el cluster
+   crear/renovar uno (p. ej. `regbrowser-pull`, permisos solo **Pull**) y
+   copiar el token
+2. Aplicar con Make:
 
 ```bash
-kubectl delete secret myregistrykey -n regbrowser
-kubectl create secret docker-registry myregistrykey \
-  --docker-server=harbor.reymota.es \
-  --docker-username='robot$reymota+regbrowser-pull' \
-  --docker-password='<token>' \
-  -n regbrowser
-
-# Reiniciar para que haga pull con las nuevas credenciales
-kubectl rollout restart deploy/regbrowser -n regbrowser
+make -C k8s robot-secret TOKEN='<token>'
 ```
 
+Esto crea/actualiza el secret `myregistrykey` en el namespace `regbrowser`
+y reinicia el deployment para verificar que el pull funciona.
+
 ## Verificar
 
 ```bash
-kubectl get pods -n regbrowser          # STATUS debe ser Running (no ImagePullBackOff)
-kubectl rollout status deploy/regbrowser -n regbrowser
+make -C k8s status    # STATUS debe ser Running (no ImagePullBackOff)
 ```

+ 58 - 0
k8s/Makefile

@@ -0,0 +1,58 @@
+# RegBrowser - tareas de construcción y despliegue en Kubernetes
+#
+# Uso:   make -C k8s <objetivo>
+# Ej.:   make -C k8s deploy
+
+IMAGE     := harbor.reymota.es/reymota/regbrowser:latest
+NAMESPACE := regbrowser
+DEPLOY    := regbrowser
+
+.DEFAULT_GOAL := help
+.PHONY: help build push deploy robot-secret restart status logs uninstall purge
+
+help: ## Muestra esta ayuda
+	@grep -E '^[a-zA-Z_-]+:.*?## ' $(MAKEFILE_LIST) | \
+	awk 'BEGIN {FS = ":.*?## "}; {printf "  \033[36m%-12s\033[0m %s\n", $$1, $$2}'
+
+build: ## Construye la imagen Docker desde la raíz del proyecto
+	docker build -t $(IMAGE) ..
+
+push: build ## Sube la imagen a Harbor
+	docker push $(IMAGE)
+
+robot-secret: ## Crea/renueva el pull secret del robot account. Uso: make -C k8s robot-secret TOKEN='<token>'
+	@test -n "$(TOKEN)" || { echo "Error: falta TOKEN. Uso: make -C k8s robot-secret TOKEN='<token>'"; exit 1; }
+	kubectl create secret docker-registry myregistrykey \
+		--docker-server=harbor.reymota.es \
+		--docker-username='robot$$reymota+regbrowser-pull' \
+		--docker-password='$(TOKEN)' \
+		-n $(NAMESPACE) --dry-run=client -o yaml | kubectl apply -f -
+	kubectl rollout restart deploy/$(DEPLOY) -n $(NAMESPACE)
+	kubectl rollout status deploy/$(DEPLOY) -n $(NAMESPACE) --timeout=180s
+
+deploy: ## Aplica los manifiestos y espera a que esté disponible
+	kubectl apply -f namespace.yaml
+	@if ! kubectl get secret myregistrykey -n $(NAMESPACE) >/dev/null 2>&1; then \
+		echo ">> Falta el pull secret; créalo con: make -C k8s robot-secret TOKEN='<token>'"; \
+		exit 1; \
+	fi
+	kubectl apply -f secrets.yaml -f pvc.yaml -f deployment.yaml -f service-ingress.yaml
+	kubectl rollout status deploy/$(DEPLOY) -n $(NAMESPACE) --timeout=180s
+
+restart: ## Reinicia el deployment (para hacer pull de la última imagen)
+	kubectl rollout restart deploy/$(DEPLOY) -n $(NAMESPACE)
+	kubectl rollout status deploy/$(DEPLOY) -n $(NAMESPACE) --timeout=180s
+
+status: ## Estado de pods, service, ingress y pvc
+	kubectl get pods,svc,ingress,pvc -n $(NAMESPACE)
+
+logs: ## Sigue los logs del pod
+	kubectl logs -f deploy/$(DEPLOY) -n $(NAMESPACE)
+
+uninstall: ## Elimina la app (deployment, service, ingress, secrets) conservando namespace y BD
+	kubectl delete deployment/$(DEPLOY) service/regbrowser ingress/regbrowser \
+		secret/myregistrykey secret/regbrowser-secrets \
+		-n $(NAMESPACE) --ignore-not-found
+
+purge: ## Elimina TODO incluida la BD (borra el namespace completo). ¡La BD se pierde!
+	kubectl delete namespace $(NAMESPACE) --ignore-not-found

+ 1 - 0
k8s/service-ingress.yaml

@@ -7,6 +7,7 @@ metadata:
     app: regbrowser
 spec:
   type: ClusterIP
+  clusterIP: 10.43.57.232
   selector:
     app: regbrowser
   ports:

+ 0 - 15
renuevaRobot.sh

@@ -1,15 +0,0 @@
-
-kubectl delete secret myregistrykey -n regbrowser
-kubectl create secret docker-registry myregistrykey \
-  --docker-server=harbor.reymota.es \
-  --docker-username='robot$reymota+regbrowser-pull' \
-  --docker-password='MP2MMTKY4s1H0PfYvCJo69kMnPtqvBEz' \
-  -n regbrowser
-
-# Reiniciar para que haga pull con las nuevas credenciales
-kubectl rollout restart deploy/regbrowser -n regbrowser
-
-## Verificar
-
-kubectl get pods -n regbrowser          # STATUS debe ser Running (no ImagePullBackOff)
-kubectl rollout status deploy/regbrowser -n regbrowser