fix: route image resolution to internal cluster dns service registry

This commit is contained in:
jv 2026-05-19 09:46:26 -05:00
parent abf3d6ce8c
commit ed46acc154
3 changed files with 50 additions and 10 deletions

View File

@ -27,7 +27,7 @@ spec:
topologyKey: "kubernetes.io/hostname" topologyKey: "kubernetes.io/hostname"
containers: containers:
- name: php-app - name: php-app
image: 192.168.100.68:30500/my-php-app:v1 image: local-registry-svc.container-registry.svc.cluster.local:5000/php-website:latest
imagePullPolicy: Always imagePullPolicy: Always
ports: ports:
- containerPort: 80 - containerPort: 80
@ -42,6 +42,6 @@ spec:
ports: ports:
- port: 80 - port: 80
targetPort: 80 targetPort: 80
nodePort: 30080 nodePort: 30080
selector: selector:
app: php-website app: php-website

View File

@ -13,6 +13,10 @@ provider "kubernetes" {
} }
resource "kubernetes_manifest" "container_registry" { resource "kubernetes_manifest" "container_registry" {
field_manager {
force_conflicts = true
}
manifest = { manifest = {
apiVersion = "argoproj.io/v1alpha1" apiVersion = "argoproj.io/v1alpha1"
kind = "Application" kind = "Application"
@ -23,7 +27,6 @@ resource "kubernetes_manifest" "container_registry" {
spec = { spec = {
project = "default" project = "default"
source = { source = {
# Targets your laptop's private IP and filesystem path via SSH
repoURL = "ssh://jv@192.168.100.68/home/jv/git-server/my-homelab-configs.git" repoURL = "ssh://jv@192.168.100.68/home/jv/git-server/my-homelab-configs.git"
targetRevision = "HEAD" targetRevision = "HEAD"
path = "apps/container-registry" path = "apps/container-registry"
@ -45,6 +48,11 @@ resource "kubernetes_manifest" "container_registry" {
resource "kubernetes_manifest" "production_website" { resource "kubernetes_manifest" "production_website" {
depends_on = [kubernetes_manifest.container_registry] depends_on = [kubernetes_manifest.container_registry]
field_manager {
force_conflicts = true
}
manifest = { manifest = {
apiVersion = "argoproj.io/v1alpha1" apiVersion = "argoproj.io/v1alpha1"
kind = "Application" kind = "Application"
@ -55,7 +63,6 @@ resource "kubernetes_manifest" "production_website" {
spec = { spec = {
project = "default" project = "default"
source = { source = {
# Targets your laptop's private IP and filesystem path via SSH
repoURL = "ssh://jv@192.168.100.68/home/jv/git-server/my-homelab-configs.git" repoURL = "ssh://jv@192.168.100.68/home/jv/git-server/my-homelab-configs.git"
targetRevision = "HEAD" targetRevision = "HEAD"
path = "apps/website" path = "apps/website"

45
lab.sh
View File

@ -1,10 +1,24 @@
up() { up() {
echo "Deploying the homelab infrastructure..." echo "Deploying the homelab infrastructure..."
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
cat <<EOF > /tmp/buildx-config.toml
[registry."127.0.0.1:30500"]
http = true
[registry."localhost:30500"]
http = true
EOF
docker buildx rm lab-builder 2>/dev/null || true
docker buildx create --name lab-builder --driver docker-container --driver-opt network=host --config /tmp/buildx-config.toml --use
docker buildx inspect --bootstrap
cd bootstrap/cluster cd bootstrap/cluster
tofu init tofu init
tofu apply -auto-approve tofu apply -auto-approve
cd ../platform cd ../platform
tofu init tofu init
tofu apply -auto-approve tofu apply -auto-approve
@ -12,8 +26,24 @@ up() {
cd ../apps cd ../apps
tofu init tofu init
tofu apply -auto-approve tofu apply -auto-approve
cd ../.. cd ../..
until kubectl get deployment local-registry -n container-registry -o jsonpath='{.status.availableReplicas}' 2>/dev/null | grep -q '^[1-9]'; do
echo "Waiting for local-registry pods to initialize..."
sleep 5
done
docker buildx build \
--network host \
--platform linux/amd64,linux/arm64 \
-t "127.0.0.1:30500/php-website:latest" \
-f apps/website/Dockerfile \
apps/website/ \
--push
kubectl patch application php-web-app -n argocd --type merge -p '{"metadata":{"annotations":{"argocd.argoproj.io/refresh":"sync"}}}'
echo "Deployment successfully completed!" echo "Deployment successfully completed!"
} }
@ -27,16 +57,16 @@ nuke() {
sudo kubeadm reset --force || true sudo kubeadm reset --force || true
sudo systemctl stop containerd 2>/dev/null || true sudo systemctl stop containerd 2>/dev/null || true
sudo killall containerd-shim-runc-v2 2>/dev/null || true sudo killall containerd-shim-runc-v2 2>/dev/null || true
sudo umount /var/lib/containerd/srun/* 2>/dev/null || true sudo umount /var/lib/containerd/srun/* 2>/dev/null || true
sudo rm -rf /var/lib/containerd/* /run/containerd/* sudo rm -rf /var/lib/containerd/* /run/containerd/*
sudo rm -rf /etc/kubernetes/ /var/lib/etcd/ /var/lib/kubelet/ /var/lib/cni/ /etc/cni/net.d /home/jv/.kube/ sudo rm -rf /etc/kubernetes/ /var/lib/etcd/ /var/lib/kubelet/ /var/lib/cni/ /etc/cni/net.d /home/jv/.kube/
sudo iptables -F && sudo iptables -t nat -F && sudo iptables -t mangle -F && sudo iptables -X sudo iptables -F && sudo iptables -t nat -F && sudo iptables -t mangle -F && sudo iptables -X
sudo ip link delete cilium_host 2>/dev/null || true sudo ip link delete cilium_host 2>/dev/null || true
sudo ip link delete cilium_net 2>/dev/null || true sudo ip link delete cilium_net 2>/dev/null || true
sudo ip link delete cilium_vxlan 2>/dev/null || true sudo ip link delete cilium_vxlan 2>/dev/null || true
sudo systemctl start containerd sudo systemctl start containerd
echo "--> Eviscerating remote Kubernetes components (Raspberry Pi)..." echo "--> Eviscerating remote Kubernetes components (Raspberry Pi)..."
@ -47,6 +77,9 @@ nuke() {
sudo iptables -F && sudo iptables -t nat -F && sudo iptables -t mangle -F && sudo iptables -X sudo iptables -F && sudo iptables -t nat -F && sudo iptables -t mangle -F && sudo iptables -X
EOF EOF
docker buildx rm lab-builder 2>/dev/null || true
rm -f /tmp/buildx-config.toml || true
echo "--> Deleting OpenTofu tracking state files..." echo "--> Deleting OpenTofu tracking state files..."
rm -rf bootstrap/cluster/terraform.tfstate* rm -rf bootstrap/cluster/terraform.tfstate*
rm -rf bootstrap/cluster/.terraform/ rm -rf bootstrap/cluster/.terraform/