# Getting Started Quick start guide for working with the API Gateway infrastructure and applications. ## Prerequisites - Access to Kubernetes cluster with `kubectl` configured - Access to Gateway Dashboard - CLI tools installed (optional, for command-line configuration) - Git repository access for application code ## Quick Start - Local Development ### 1. Clone Repository ```bash git clone cd ``` ### 2. Run Applications Locally **Web Application**: ```bash cd web pip install -r requirements.txt python main.py # Access at http://localhost:8000 ``` **API Application**: ```bash cd api pip install -r requirements.txt python main.py # Swagger UI at http://localhost:8000/docs ``` ### 3. Build Docker Images ```bash # Web application docker build -t web-app ./web # API application docker build -t api-app ./api ``` ## Deploying to Kubernetes ### 1. Prepare Namespace ```bash # Create namespace if it doesn't exist kubectl create namespace # Verify gateway components are running kubectl get pods -n ``` **Expected Components**: - ✅ Dashboard pod running - ✅ Developer Portal pod running - ✅ Data Plane Manager pod running - ✅ Gateway pods running (multiple replicas) - ✅ Database pod running ### 2. Create Kubernetes Manifests **deployment.yaml**: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: web namespace: spec: replicas: 2 selector: matchLabels: app: web template: metadata: labels: app: web spec: containers: - name: web image: /web:latest ports: - containerPort: 8000 name: http livenessProbe: httpGet: path: /health port: 8000 readinessProbe: httpGet: path: /health port: 8000 --- apiVersion: v1 kind: Service metadata: name: web-service namespace: spec: type: ClusterIP ports: - port: 80 targetPort: 8000 name: http selector: app: web ``` ### 3. Deploy Applications ```bash kubectl apply -f deployment.yaml # Check deployment status kubectl get deployments -n kubectl get pods -n -l app=web ``` ### 4. Configure Container Registry Access (if needed) ```bash # Create registry secret kubectl create secret docker-registry registry-secret \ --docker-server= \ --docker-username= \ --docker-password= \ -n # Add to deployment spec: template: spec: imagePullSecrets: - name: registry-secret ``` ## Configuring Gateway Routes ### Method 1: Using CLI Tools **1. Create configuration file** (`config.yaml`): ```yaml services: - name: web-service upstream: name: web-upstream scheme: http type: roundrobin discovery_type: kubernetes service_name: /web-service:http routes: - name: web-route uris: - /* hosts: - app.domain.com plugins: redirect: http_to_https: true ``` **2. Sync configuration**: ```bash sync -f config.yaml \ --server \ --token \ --gateway-group default ``` **3. Verify sync**: ```bash # Expected output: [CLI] › ✔ success Create service: "web-service" [CLI] › ✔ success Create route: "web-route" ``` ### Method 2: Using Dashboard Web UI **1. Access Dashboard**: - URL: Gateway Dashboard URL - Login with credentials **2. Configure Service Discovery** (one-time setup): - Navigate: **Settings → Service Registry** - Click: **Add Service Registry** - Select: **Kubernetes** - Configure: ``` Name: kubernetes-cluster API Server: https://kubernetes.default.svc.cluster.local:443 Token Path: /var/run/secrets/kubernetes.io/serviceaccount/token Namespace Filter: ``` - Save and verify status shows "Connected" **3. Create Service**: - Navigate: **Services** - Click: **Create Service** - Name: `web-service` - Upstream Type: **Service Discovery** - Discovery Type: **Kubernetes** - Service Name: `/web-service:http` **4. Create Route**: - In the service page, go to **Routes** tab - Click: **Create Route** - Name: `web-route` - Host: `app.domain.com` - Path: `/*` - Methods: GET, POST, PUT, DELETE - Add Plugin: **redirect** → `http_to_https: true` **5. Publish Route**: - Find route in the Routes tab - Click: **Publish** - Select gateway group: **default** - Confirm ## Creating Ingress for External Access **ingress.yaml**: ```yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: app-ingress namespace: spec: ingressClassName: nginx tls: - hosts: - app.domain.com secretName: app-tls rules: - host: app.domain.com http: paths: - path: / pathType: Prefix backend: service: name: gateway-service port: number: 80 ``` **Important**: Backend points to Gateway service, not application service directly. ```bash kubectl apply -f ingress.yaml ``` ## Verifying Service Discovery RBAC Gateway needs permissions to discover Kubernetes services: ```bash # Check current permissions kubectl auth can-i list endpoints --as=system:serviceaccount::default -n # If needed, create ClusterRoleBinding kubectl create clusterrolebinding gateway-discovery \ --clusterrole=view \ --serviceaccount=:default ``` ## Testing the Deployment ### 1. Test DNS Resolution ```bash # Add to /etc/hosts or configure DNS echo " app.domain.com" | sudo tee -a /etc/hosts ``` ### 2. Test HTTP to HTTPS Redirect ```bash curl -I http://app.domain.com # Expected: # HTTP/1.1 301 Moved Permanently # Location: https://app.domain.com ``` ### 3. Test Application Access ```bash # Web application curl https://app.domain.com # API health check curl https://app.domain.com/api/health ``` ### 4. Verify Service Discovery ```bash # Scale deployment kubectl scale deployment web -n --replicas=5 # Check endpoints kubectl get endpoints -n web-service # Gateway automatically discovers all 5 pod endpoints # No configuration change needed ``` ## Accessing Gateway Dashboard ### Local Access (port-forward) ```bash kubectl port-forward -n svc/dashboard-service 7080:7080 # Access at http://localhost:7080 ``` ### Public Access Direct access via configured URLs: - **Dashboard**: Management interface URL - **Developer Portal**: Developer portal URL ## CI/CD Pipeline Setup ### 1. Configure Repository Token In repository settings: 1. Go to **Settings → Secrets** 2. Add authentication token 3. Configure with appropriate permissions 4. Enable container registry access ### 2. Push to Trigger Build ```bash git add . git commit -m "Deploy applications" git push origin main ``` The pipeline will: - Build Docker images - Push to container registry - Tag with branch/version ### 3. Update Kubernetes Deployment ```bash # Manually trigger rollout kubectl rollout restart deployment/web -n kubectl rollout restart deployment/api -n # Or update image in deployment kubectl set image deployment/web web=/web:latest -n ``` ## Common Tasks ### View Logs ```bash # Application logs kubectl logs -n -l app=web --tail=50 -f # Gateway logs kubectl logs -n -l app.kubernetes.io/name=gateway --tail=50 -f # Dashboard logs kubectl logs -n -l app=dashboard --tail=50 -f ``` ### Check Route Configuration **Via CLI**: ```bash dump \ --server \ --token ``` **Via Dashboard**: - Navigate: **Services → → Routes** - View route details and publication status ### Update Route Configuration ```bash # Edit config file vim config.yaml # Sync changes sync -f config.yaml \ --server \ --token \ --gateway-group default ``` ### Monitor Gateway Metrics **Prometheus**: ```bash kubectl port-forward -n svc/prometheus-server 9090:9090 # Access at http://localhost:9090 ``` **Dashboard Metrics**: - Navigate: **Monitoring** in Gateway Dashboard - View request rates, latency, error rates ## Next Steps - [Configure advanced routing](api7-configuration.md) - [Set up monitoring and alerts](monitoring.md) - [Review troubleshooting guide](troubleshooting.md) - [Learn about the architecture](architecture.md) --- *You're now ready to deploy and manage applications with the API Gateway infrastructure!*