Lab 8.2 - Path-based Routing
Lab Objectives
By the end of this lab, you will be able to:
- Configure path-based routing.
- Route traffic to different applications based on the path.
- Understand the different pathTypes.
- Test routing with multiple paths.
Estimated Duration
45-60 minutes
Prerequisites
- kubectl installed and configured.
- Functional local Kubernetes cluster with Ingress Controller.
- Knowledge of Ingress (Lab 8.1).
Part 1: Deploying Multiple Applications
We will deploy two different applications to test path-based routing.
Step 1.1: Deploy the Frontend Application
Create frontend-deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: frontend
spec:
replicas: 2
selector:
matchLabels:
app: frontend
template:
metadata:
labels:
app: frontend
spec:
containers:
- name: nginx
image: nginx:1.20
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: frontend-service
spec:
selector:
app: frontend
ports:
- port: 80
targetPort: 80
Step 1.2: Deploy the Backend Application
Create backend-deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: backend
spec:
replicas: 2
selector:
matchLabels:
app: backend
template:
metadata:
labels:
app: backend
spec:
containers:
- name: httpd
image: httpd:2.4
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: backend-service
spec:
selector:
app: backend
ports:
- port: 80
targetPort: 80
Apply the deployments:
kubectl apply -f frontend-deployment.yaml
kubectl apply -f backend-deployment.yaml
Part 2: Configuring Ingress with Path-based Routing
Step 2.1: Create the Ingress with Multiple Paths
Create ingress-path-based.yaml:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: path-based-ingress
spec:
ingressClassName: nginx
rules:
- host: app.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: frontend-service
port:
number: 80
- path: /api
pathType: Prefix
backend:
service:
name: backend-service
port:
number: 80
- path: /backend
pathType: Prefix
backend:
service:
name: backend-service
port:
number: 80
Explanation:
/: Routes to the frontend (home page)./api: Routes to the backend./backend: Alternative route to the backend.
Apply the Ingress:
kubectl apply -f ingress-path-based.yaml
Part 3: Customizing Applications for Testing
To better visualize routing, let's customize the application responses.
Step 3.1: Customize the Frontend
Create a ConfigMap for the frontend:
apiVersion: v1
kind: ConfigMap
metadata:
name: frontend-config
data:
index.html: |
<!DOCTYPE html>
<html>
<head><title>Frontend Application</title></head>
<body>
<h1>Frontend Application</h1>
<p>You are on the home page (/)</p>
<p><a href="/api">Access the API</a></p>
</body>
</html>
Apply and mount the ConfigMap in the frontend (modify the Deployment if necessary).
Step 3.2: Customize the Backend
Create a ConfigMap for the backend:
apiVersion: v1
kind: ConfigMap
metadata:
name: backend-config
data:
index.html: |
<!DOCTYPE html>
<html>
<head><title>Backend API</title></head>
<body>
<h1>Backend API</h1>
<p>You are on the API (/api or /backend)</p>
<p>This is the backend service</p>
</body>
</html>
Part 4: Testing the Routing
Step 4.1: Configure the Hostname
Add app.local to your /etc/hosts file (or Windows equivalent) pointing to the Ingress Controller IP.
Step 4.2: Test the Different Paths
Test the routing:
# Home page (should go to frontend)
curl http://app.local/
# API (should go to backend)
curl http://app.local/api
# Alternative backend (should go to backend)
curl http://app.local/backend
You should see different responses depending on the path.
Part 5: Understanding pathTypes
pathType determines how paths are compared:
- Exact: Exact path match.
- Prefix: Prefix match (most common).
- ImplementationSpecific: Depends on the Ingress Controller implementation.
Example with Exact
- path: /api/v1
pathType: Exact
backend:
service:
name: api-v1-service
port:
number: 80
Part 6: Cleanup
Delete the resources:
kubectl delete ingress path-based-ingress
kubectl delete -f frontend-deployment.yaml
kubectl delete -f backend-deployment.yaml
kubectl delete configmap frontend-config backend-config
Lab Summary
In this lab, you configured path-based routing with Ingress. You learned how to route traffic to different applications based on the URL path, use different pathTypes, and test the routing.
Next Steps
The next lab will show you how to configure TLS/SSL with cert-manager to secure HTTPS communications.
Lab 8.3: TLS/SSL with Cert-Manager
Lab created: December 2024