fix(registry): use node-resolvable backend registry endpoint and add k3s registries runbook

This commit is contained in:
Ashwin Kumar 2026-04-11 21:59:50 +02:00
parent d2e0a11ed7
commit 96bc5aa42a
23 changed files with 158 additions and 54 deletions

View file

@ -17,7 +17,7 @@ spec:
spec: spec:
containers: containers:
- name: catering-services - name: catering-services
image: docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-catering-services image: registry.nxtgauge.internal:5000/nxtgauge-rust-catering-services
imagePullPolicy: Always imagePullPolicy: Always
ports: ports:
- containerPort: 9115 - containerPort: 9115

View file

@ -17,7 +17,7 @@ spec:
spec: spec:
containers: containers:
- name: companies - name: companies
image: docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-companies image: registry.nxtgauge.internal:5000/nxtgauge-rust-companies
imagePullPolicy: Always imagePullPolicy: Always
ports: ports:
- containerPort: 9102 - containerPort: 9102

View file

@ -17,7 +17,7 @@ spec:
spec: spec:
containers: containers:
- name: cron - name: cron
image: docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-cron image: registry.nxtgauge.internal:5000/nxtgauge-rust-cron
imagePullPolicy: Always imagePullPolicy: Always
envFrom: envFrom:
- configMapRef: - configMapRef:

View file

@ -17,7 +17,7 @@ spec:
spec: spec:
containers: containers:
- name: customers - name: customers
image: docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-customers image: registry.nxtgauge.internal:5000/nxtgauge-rust-customers
imagePullPolicy: Always imagePullPolicy: Always
ports: ports:
- containerPort: 9105 - containerPort: 9105

View file

@ -17,7 +17,7 @@ spec:
spec: spec:
containers: containers:
- name: developers - name: developers
image: docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-developers image: registry.nxtgauge.internal:5000/nxtgauge-rust-developers
imagePullPolicy: Always imagePullPolicy: Always
ports: ports:
- containerPort: 9110 - containerPort: 9110

View file

@ -17,7 +17,7 @@ spec:
spec: spec:
containers: containers:
- name: employees - name: employees
image: docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-employees image: registry.nxtgauge.internal:5000/nxtgauge-rust-employees
imagePullPolicy: Always imagePullPolicy: Always
ports: ports:
- containerPort: 9106 - containerPort: 9106

View file

@ -17,7 +17,7 @@ spec:
spec: spec:
containers: containers:
- name: fitness-trainers - name: fitness-trainers
image: docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-fitness-trainers image: registry.nxtgauge.internal:5000/nxtgauge-rust-fitness-trainers
imagePullPolicy: Always imagePullPolicy: Always
ports: ports:
- containerPort: 9114 - containerPort: 9114

View file

@ -17,7 +17,7 @@ spec:
spec: spec:
containers: containers:
- name: gateway - name: gateway
image: docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-gateway image: registry.nxtgauge.internal:5000/nxtgauge-rust-gateway
imagePullPolicy: Always imagePullPolicy: Always
ports: ports:
- containerPort: 9100 - containerPort: 9100

View file

@ -17,7 +17,7 @@ spec:
spec: spec:
containers: containers:
- name: graphic-designers - name: graphic-designers
image: docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-graphic-designers image: registry.nxtgauge.internal:5000/nxtgauge-rust-graphic-designers
imagePullPolicy: Always imagePullPolicy: Always
ports: ports:
- containerPort: 9112 - containerPort: 9112

View file

@ -17,7 +17,7 @@ spec:
spec: spec:
containers: containers:
- name: job-seekers - name: job-seekers
image: docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-job-seekers image: registry.nxtgauge.internal:5000/nxtgauge-rust-job-seekers
imagePullPolicy: Always imagePullPolicy: Always
ports: ports:
- containerPort: 9104 - containerPort: 9104

View file

@ -17,7 +17,7 @@ spec:
spec: spec:
containers: containers:
- name: makeup-artists - name: makeup-artists
image: docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-makeup-artists image: registry.nxtgauge.internal:5000/nxtgauge-rust-makeup-artists
imagePullPolicy: Always imagePullPolicy: Always
ports: ports:
- containerPort: 9109 - containerPort: 9109

View file

@ -17,7 +17,7 @@ spec:
spec: spec:
containers: containers:
- name: payments - name: payments
image: docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-payments image: registry.nxtgauge.internal:5000/nxtgauge-rust-payments
imagePullPolicy: Always imagePullPolicy: Always
ports: ports:
- containerPort: 9116 - containerPort: 9116

View file

@ -17,7 +17,7 @@ spec:
spec: spec:
containers: containers:
- name: photographers - name: photographers
image: docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-photographers image: registry.nxtgauge.internal:5000/nxtgauge-rust-photographers
imagePullPolicy: Always imagePullPolicy: Always
ports: ports:
- containerPort: 9107 - containerPort: 9107

View file

@ -17,7 +17,7 @@ spec:
spec: spec:
containers: containers:
- name: social-media-managers - name: social-media-managers
image: docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-social-media-managers image: registry.nxtgauge.internal:5000/nxtgauge-rust-social-media-managers
imagePullPolicy: Always imagePullPolicy: Always
ports: ports:
- containerPort: 9113 - containerPort: 9113

View file

@ -17,7 +17,7 @@ spec:
spec: spec:
containers: containers:
- name: tutors - name: tutors
image: docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-tutors image: registry.nxtgauge.internal:5000/nxtgauge-rust-tutors
imagePullPolicy: Always imagePullPolicy: Always
ports: ports:
- containerPort: 9108 - containerPort: 9108

View file

@ -17,7 +17,7 @@ spec:
spec: spec:
containers: containers:
- name: ugc-content-creators - name: ugc-content-creators
image: docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-ugc-content-creators image: registry.nxtgauge.internal:5000/nxtgauge-rust-ugc-content-creators
imagePullPolicy: Always imagePullPolicy: Always
ports: ports:
- containerPort: 9117 - containerPort: 9117

View file

@ -17,7 +17,7 @@ spec:
spec: spec:
containers: containers:
- name: users - name: users
image: docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-users image: registry.nxtgauge.internal:5000/nxtgauge-rust-users
imagePullPolicy: Always imagePullPolicy: Always
ports: ports:
- containerPort: 9101 - containerPort: 9101

View file

@ -17,7 +17,7 @@ spec:
spec: spec:
containers: containers:
- name: video-editors - name: video-editors
image: docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-video-editors image: registry.nxtgauge.internal:5000/nxtgauge-rust-video-editors
imagePullPolicy: Always imagePullPolicy: Always
ports: ports:
- containerPort: 9111 - containerPort: 9111

View file

@ -5,39 +5,39 @@ resources:
patchesStrategicMerge: patchesStrategicMerge:
- replicas-patch.yaml - replicas-patch.yaml
images: images:
- name: docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-gateway - name: registry.nxtgauge.internal:5000/nxtgauge-rust-gateway
newTag: high-performance-latest newTag: high-performance-latest
- name: docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-users - name: registry.nxtgauge.internal:5000/nxtgauge-rust-users
newTag: high-performance-latest newTag: high-performance-latest
- name: docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-companies - name: registry.nxtgauge.internal:5000/nxtgauge-rust-companies
newTag: high-performance-latest newTag: high-performance-latest
- name: docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-job-seekers - name: registry.nxtgauge.internal:5000/nxtgauge-rust-job-seekers
newTag: high-performance-latest newTag: high-performance-latest
- name: docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-customers - name: registry.nxtgauge.internal:5000/nxtgauge-rust-customers
newTag: high-performance-latest newTag: high-performance-latest
- name: docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-payments - name: registry.nxtgauge.internal:5000/nxtgauge-rust-payments
newTag: high-performance-latest newTag: high-performance-latest
- name: docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-employees - name: registry.nxtgauge.internal:5000/nxtgauge-rust-employees
newTag: high-performance-latest newTag: high-performance-latest
- name: docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-photographers - name: registry.nxtgauge.internal:5000/nxtgauge-rust-photographers
newTag: high-performance-latest newTag: high-performance-latest
- name: docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-makeup-artists - name: registry.nxtgauge.internal:5000/nxtgauge-rust-makeup-artists
newTag: high-performance-latest newTag: high-performance-latest
- name: docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-tutors - name: registry.nxtgauge.internal:5000/nxtgauge-rust-tutors
newTag: high-performance-latest newTag: high-performance-latest
- name: docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-developers - name: registry.nxtgauge.internal:5000/nxtgauge-rust-developers
newTag: high-performance-latest newTag: high-performance-latest
- name: docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-video-editors - name: registry.nxtgauge.internal:5000/nxtgauge-rust-video-editors
newTag: high-performance-latest newTag: high-performance-latest
- name: docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-graphic-designers - name: registry.nxtgauge.internal:5000/nxtgauge-rust-graphic-designers
newTag: high-performance-latest newTag: high-performance-latest
- name: docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-social-media-managers - name: registry.nxtgauge.internal:5000/nxtgauge-rust-social-media-managers
newTag: high-performance-latest newTag: high-performance-latest
- name: docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-fitness-trainers - name: registry.nxtgauge.internal:5000/nxtgauge-rust-fitness-trainers
newTag: high-performance-latest newTag: high-performance-latest
- name: docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-catering-services - name: registry.nxtgauge.internal:5000/nxtgauge-rust-catering-services
newTag: high-performance-latest newTag: high-performance-latest
- name: docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-ugc-content-creators - name: registry.nxtgauge.internal:5000/nxtgauge-rust-ugc-content-creators
newTag: high-performance-latest newTag: high-performance-latest
- name: docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-cron - name: registry.nxtgauge.internal:5000/nxtgauge-rust-cron
newTag: high-performance-latest newTag: high-performance-latest

View file

@ -5,24 +5,24 @@ metadata:
namespace: argocd namespace: argocd
annotations: annotations:
argocd-image-updater.argoproj.io/image-list: >- argocd-image-updater.argoproj.io/image-list: >-
gateway=docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-gateway:high-performance-latest, gateway=registry.nxtgauge.internal:5000/nxtgauge-rust-gateway:high-performance-latest,
users=docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-users:high-performance-latest, users=registry.nxtgauge.internal:5000/nxtgauge-rust-users:high-performance-latest,
companies=docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-companies:high-performance-latest, companies=registry.nxtgauge.internal:5000/nxtgauge-rust-companies:high-performance-latest,
job-seekers=docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-job-seekers:high-performance-latest, job-seekers=registry.nxtgauge.internal:5000/nxtgauge-rust-job-seekers:high-performance-latest,
customers=docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-customers:high-performance-latest, customers=registry.nxtgauge.internal:5000/nxtgauge-rust-customers:high-performance-latest,
payments=docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-payments:high-performance-latest, payments=registry.nxtgauge.internal:5000/nxtgauge-rust-payments:high-performance-latest,
employees=docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-employees:high-performance-latest, employees=registry.nxtgauge.internal:5000/nxtgauge-rust-employees:high-performance-latest,
photographers=docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-photographers:high-performance-latest, photographers=registry.nxtgauge.internal:5000/nxtgauge-rust-photographers:high-performance-latest,
makeup-artists=docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-makeup-artists:high-performance-latest, makeup-artists=registry.nxtgauge.internal:5000/nxtgauge-rust-makeup-artists:high-performance-latest,
tutors=docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-tutors:high-performance-latest, tutors=registry.nxtgauge.internal:5000/nxtgauge-rust-tutors:high-performance-latest,
developers=docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-developers:high-performance-latest, developers=registry.nxtgauge.internal:5000/nxtgauge-rust-developers:high-performance-latest,
video-editors=docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-video-editors:high-performance-latest, video-editors=registry.nxtgauge.internal:5000/nxtgauge-rust-video-editors:high-performance-latest,
graphic-designers=docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-graphic-designers:high-performance-latest, graphic-designers=registry.nxtgauge.internal:5000/nxtgauge-rust-graphic-designers:high-performance-latest,
social-media-managers=docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-social-media-managers:high-performance-latest, social-media-managers=registry.nxtgauge.internal:5000/nxtgauge-rust-social-media-managers:high-performance-latest,
fitness-trainers=docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-fitness-trainers:high-performance-latest, fitness-trainers=registry.nxtgauge.internal:5000/nxtgauge-rust-fitness-trainers:high-performance-latest,
catering-services=docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-catering-services:high-performance-latest, catering-services=registry.nxtgauge.internal:5000/nxtgauge-rust-catering-services:high-performance-latest,
ugc-content-creators=docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-ugc-content-creators:high-performance-latest, ugc-content-creators=registry.nxtgauge.internal:5000/nxtgauge-rust-ugc-content-creators:high-performance-latest,
cron=docker-registry.registry.svc.cluster.local:5000/nxtgauge-rust-cron:high-performance-latest cron=registry.nxtgauge.internal:5000/nxtgauge-rust-cron:high-performance-latest
argocd-image-updater.argoproj.io/gateway.update-strategy: digest argocd-image-updater.argoproj.io/gateway.update-strategy: digest
argocd-image-updater.argoproj.io/gateway.allow-tags: regexp:^high-performance-latest$ argocd-image-updater.argoproj.io/gateway.allow-tags: regexp:^high-performance-latest$
argocd-image-updater.argoproj.io/users.update-strategy: digest argocd-image-updater.argoproj.io/users.update-strategy: digest

55
ops/k3s/README.md Normal file
View file

@ -0,0 +1,55 @@
# k3s Local Registry Node Configuration
This repo now uses `registry.nxtgauge.internal:5000` for backend images.
## Why
Image pulls happen on k3s nodes via containerd, not inside cluster DNS context.
Using `*.svc.cluster.local` for image pulls can fail with DNS lookup errors from node runtime.
## Required node config
Each node must have `/etc/rancher/k3s/registries.yaml` configured to trust and use the registry.
Template file:
- `ops/k3s/registries.yaml`
## Apply to all nodes
1. Export required env vars:
```bash
export K3S_NODES="node1 node2 node3"
export REGISTRY_USERNAME="<registry-user>"
export REGISTRY_PASSWORD="<registry-pass>"
```
2. Apply config and restart k3s on each node:
```bash
./ops/k3s/apply-registries.sh
```
## Manual steps (if needed)
On each node:
1. Copy `registries.yaml` to `/etc/rancher/k3s/registries.yaml`
2. Restart runtime:
```bash
sudo systemctl restart k3s
# or for agents
sudo systemctl restart k3s-agent
```
3. Verify pod pulls:
```bash
kubectl -n nxtgauge get pods
kubectl -n nxtgauge describe pod <failing-pod>
```
## Notes
- Ensure DNS for `registry.nxtgauge.internal` resolves from every k3s node.
- If DNS is not available, use a stable node-reachable IP:port and update:
- backend GitOps manifests
- backend Woodpecker registry push target
- `ops/k3s/registries.yaml`

37
ops/k3s/apply-registries.sh Executable file
View file

@ -0,0 +1,37 @@
#!/usr/bin/env bash
set -euo pipefail
# Usage:
# export K3S_NODES="node1 node2 node3"
# export REGISTRY_USERNAME="..."
# export REGISTRY_PASSWORD="..."
# ./ops/k3s/apply-registries.sh
if [[ -z "${K3S_NODES:-}" ]]; then
echo "K3S_NODES is required (space-separated ssh targets)"
exit 1
fi
if [[ -z "${REGISTRY_USERNAME:-}" || -z "${REGISTRY_PASSWORD:-}" ]]; then
echo "REGISTRY_USERNAME and REGISTRY_PASSWORD are required"
exit 1
fi
TMP_FILE="$(mktemp)"
sed \
-e "s#\${REGISTRY_USERNAME}#${REGISTRY_USERNAME}#g" \
-e "s#\${REGISTRY_PASSWORD}#${REGISTRY_PASSWORD}#g" \
"$(dirname "$0")/registries.yaml" > "$TMP_FILE"
for node in ${K3S_NODES}; do
echo "Applying registry config on ${node}"
scp "$TMP_FILE" "${node}:/tmp/registries.yaml"
ssh "$node" "sudo mkdir -p /etc/rancher/k3s && sudo mv /tmp/registries.yaml /etc/rancher/k3s/registries.yaml && sudo systemctl restart k3s || sudo systemctl restart k3s-agent"
echo "Waiting for ${node} to recover..."
sleep 8
done
rm -f "$TMP_FILE"
echo "Done: registries.yaml applied and k3s restarted on all nodes."

12
ops/k3s/registries.yaml Normal file
View file

@ -0,0 +1,12 @@
mirrors:
"registry.nxtgauge.internal:5000":
endpoint:
- "http://registry.nxtgauge.internal:5000"
configs:
"registry.nxtgauge.internal:5000":
tls:
insecure_skip_verify: true
auth:
username: "${REGISTRY_USERNAME}"
password: "${REGISTRY_PASSWORD}"