Source: Dev.to | Jan 11, 2026 (UTC)
minikube start kubectl get nodes
Enter fullscreen mode
Exit fullscreen mode

Expected:
minikube Ready
Enter fullscreen mode
Exit fullscreen mode
BASE APP (USED FOR ALL PROJECTS)
One app. Same Pods. Only networking changes.
apiVersion: apps/v1 kind: Deployment metadata: name: demo-app spec: replicas: 3 selector: matchLabels: app: demo template: metadata: labels: app: demo spec: containers: - name: app image: hashicorp/http-echo:0.2.3 args: - "-listen=:8080" - "-text=HELLO FROM POD" ports: - containerPort: 8080
Enter fullscreen mode
Exit fullscreen mode
kubectl apply -f deployment.yaml kubectl get pods
Enter fullscreen mode
Exit fullscreen mode
PROJECT 1 — ClusterIP (Internal Only)
✔ Services give stable internal networking
✔ Pod IPs change — Service never changes
apiVersion: v1 kind: Service metadata: name: demo-clusterip spec: selector: app: demo ports: - port: 80 targetPort: 8080
Enter fullscreen mode
Exit fullscreen mode
kubectl apply -f svc-clusterip.yaml kubectl get svc
Enter fullscreen mode
Exit fullscreen mode
kubectl run test --rm -it --image=busybox -- sh wget -qO- demo-clusterip
Enter fullscreen mode
Exit fullscreen mode
kubectl get endpoints demo-clusterip
Enter fullscreen mode
Exit fullscreen mode
Cause
Fix
kubectl get pods --show-labels kubectl edit svc demo-clusterip
Enter fullscreen mode
Exit fullscreen mode
ClusterIP is the backbone of Kubernetes.
If this fails — nothing works.
PROJECT 2 — NodePort (Why It Is Dangerous)
✔ NodePort opens ports
❌ Does NOT provide routing, HA, or stable IP
apiVersion: v1 kind: Service metadata: name: demo-nodeport spec: type: NodePort selector: app: demo ports: - port: 80 targetPort: 8080 nodePort: 30080
Enter fullscreen mode
Exit fullscreen mode
kubectl apply -f svc-nodeport.yaml kubectl get svc
Enter fullscreen mode
Exit fullscreen mode
minikube ip curl http://<MINIKUBE-IP>:30080
Enter fullscreen mode
Exit fullscreen mode
PROD ISSUE #1 — Random failures
kubectl delete pod -l app=demo
Enter fullscreen mode
Exit fullscreen mode
Still works?
YES → kube-proxy reroutes
Now imagine node deleted in cloud → ❌ DEAD
In Minikube:
✔ works
In cloud:
❌ security group missing port
Use
Verdict
Learning
✅
Debug
✅
Production
❌
PROJECT 3 — LoadBalancer (Minikube Style)
✔ Kubernetes requests LB
✔ Minikube simulates cloud LB
apiVersion: v1 kind: Service metadata: name: demo-lb spec: type: LoadBalancer selector: app: demo ports: - port: 80 targetPort: 8080
Enter fullscreen mode
Exit fullscreen mode
kubectl apply -f svc-lb.yaml kubectl get svc
Enter fullscreen mode
Exit fullscreen mode
VERY IMPORTANT (Minikube Only)
minikube tunnel
Enter fullscreen mode
Exit fullscreen mode
Keep terminal open.
Now:
kubectl get svc demo-lb
Enter fullscreen mode
Exit fullscreen mode
You will see:
EXTERNAL-IP: 127.0.0.1
Enter fullscreen mode
Exit fullscreen mode
curl http://127.0.0.1
Enter fullscreen mode
Exit fullscreen mode
PROD ISSUE #1 — EXTERNAL-IP pending
Cause
Fix
minikube tunnel
Enter fullscreen mode
Exit fullscreen mode
PROD ISSUE #2 — LB exists but no traffic
kubectl describe svc demo-lb kubectl get endpoints demo-lb
Enter fullscreen mode
Exit fullscreen mode
Cause
✔ Simple external apps
❌ Expensive in real cloud
❌ One LB per service
PROJECT 4 — Ingress (REAL PRODUCTION MODEL)
✔ Ingress is external traffic brain
✔ One IP → many apps
STEP 1 — Enable Ingress in Minikube
minikube addons enable ingress kubectl get pods -n ingress-nginx
Enter fullscreen mode
Exit fullscreen mode
Wait until:
ingress-nginx-controller Running
Enter fullscreen mode
Exit fullscreen mode
STEP 2 — ClusterIP for Ingress
apiVersion: v1 kind: Service metadata: name: demo-ingress-svc spec: selector: app: demo ports: - port: 80 targetPort: 8080
Enter fullscreen mode
Exit fullscreen mode
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: demo-ingress spec: rules: - host: demo.local http: paths: - path: / pathType: Prefix backend: service: name: demo-ingress-svc port: number: 80
Enter fullscreen mode
Exit fullscreen mode
minikube ip sudo nano /etc/hosts
Enter fullscreen mode
Exit fullscreen mode
Add:
<MINIKUBE-IP> demo.local
Enter fullscreen mode
Exit fullscreen mode
curl http://demo.local
Enter fullscreen mode
Exit fullscreen mode
PROD ISSUE #1 — 404 from Ingress
kubectl describe ingress demo-ingress
Enter fullscreen mode
Exit fullscreen mode
Cause
PROD ISSUE #2 — Ingress OK, app broken
kubectl get endpoints demo-ingress-svc kubectl get pods
Enter fullscreen mode
Exit fullscreen mode
Cause
PROD ISSUE #3 — Ingress controller down
kubectl get pods -n ingress-nginx kubectl logs -n ingress-nginx <controller-pod>
Enter fullscreen mode
Exit fullscreen mode
FINAL DEVOPS MENTAL MODEL (MINIKUBE OR PROD)
Client | v Ingress (routing rules) | v Service (ClusterIP) | v Pod
Enter fullscreen mode
Exit fullscreen mode
Component
Purpose
Who Provides It
ClusterIP
Internal networking
Kubernetes
NodePort
Port exposure
Kubernetes
LoadBalancer
External IP
Cloud / Minikube
Ingress
Routing + TLS
Kubernetes
Egress
Outbound traffic
Cloud / NAT
For further actions, you may consider blocking this person and/or reporting abuse
Залишити відповідь