Google microservices-demo release/ folder contains: ────────────────────────────────────────────────────────── kubernetes-manifests.yaml ← plain k8s: Deployments, Services istio-manifests.yaml ← Istio: VirtualService, Gateway, ServiceEntry kubernetes-manifests-with-istio.yaml ← combined version Without directory.include — ArgoCD applies EVERYTHING: ✓ Deployments, Services → applied fine ✗ VirtualService → SyncFailed: CRD not installed ✗ networking.istio.io/Gateway → SyncFailed: CRD not installed ✗ ServiceEntry → SyncFailed: CRD not installed With directory.include: "kubernetes-manifests.yaml": ✓ Deployments, Services → applied fine ✓ istio-manifests.yaml → SKIPPED (not in include pattern) → All 11 services deploy cleanly
We don't run Istio (a full service mesh) in this cluster — it would add significant
resource overhead on local VMs. The directory.include filter in the
ArgoCD Application tells ArgoCD to only process files matching the pattern, silently
ignoring everything else in the release/ directory.
# roles/online-boutique/files/boutique-ingress.yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: boutique-ingress namespace: online-boutique spec: ingressClassName: nginx rules: - host: app.lab.local http: paths: - path: / pathType: Prefix backend: service: name: frontend port: number: 80
app.lab.local hostname which is specific to this lab setup, not
part of the upstream Google manifests.
online-boutique namespace to exist (created by ArgoCD) before
applying this Ingress, since the namespace must exist first.
Browser: http://app.lab.local/cart │ │ hosts file: app.lab.local → 192.168.56.200 │ ▼ MetalLB: 192.168.56.200 (NGINX Ingress LoadBalancer IP) │ │ NGINX matches Host: app.lab.local → boutique-ingress │ ▼ frontend pod (Go HTTP server on :8080) │ │ gRPC calls to internal services: ├── productcatalogservice:3550 ├── cartservice:7070 ├── currencyservice:7000 ├── recommendationservice:8080 └── adservice:9555 │ ▼ HTML response back to browser
# All 11 services Running? kubectl get pods -n online-boutique # Ingress wired up? kubectl get ingress -n online-boutique # NAME HOSTS ADDRESS PORTS # boutique-ingress app.lab.local 192.168.56.200 80 # ArgoCD sync status kubectl get application online-boutique -n argocd # SYNC STATUS=Synced HEALTH STATUS=Healthy # Test from your laptop # Browser → http://app.lab.local (Online Boutique storefront) # Browser → http://argocd.lab.local (ArgoCD dashboard)
Phase 03 is complete when all pods show Running, the ArgoCD Application
shows Synced / Healthy, and you can browse the Online Boutique storefront
at http://app.lab.local. This running workload becomes the observability
target in Phase 04 — Prometheus will scrape its metrics and Grafana will display them.