-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathlocal_test_traefik.sh
162 lines (139 loc) Β· 4.25 KB
/
local_test_traefik.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
#!/bin/bash
# Create a debug folder and values file
mkdir -p debug
cat <<EOF > debug/traefik-values.yaml
global:
ingress:
enabled: true
className: traefik
classType: traefik
websocketPrefix: /websocket
backendPrefix: /v2
frontendPrefix: /
frontend:
enabled: true
backend:
enabled: true
websocket:
enabled: true
EOF
# Create Kind cluster with ingress ports exposed
cat <<EOF > debug/kind-config.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
extraPortMappings:
- containerPort: 30080
hostPort: 30080
protocol: TCP
- containerPort: 443
hostPort: 443
protocol: TCP
EOF
# Function to check service/pod status
check_status() {
echo "π Checking all resources..."
kubectl get pods -A
kubectl get svc -A
kubectl get ingress -A
}
# Function to check if a command exists
command_exists() {
command -v "$1" >/dev/null 2>&1
}
# Check required tools
for tool in kind kubectl helm wscat curl; do
if ! command_exists "$tool"; then
echo "β Required tool not found: $tool"
exit 1
fi
done
# Create cluster
echo "π Creating Kind cluster..."
kind create cluster --config debug/kind-config.yaml
# Install Traefik
echo "π¦ Adding Traefik helm repo..."
helm repo add traefik https://traefik.github.io/charts
helm repo update
echo "π§ Installing Traefik..."
helm install traefik traefik/traefik \
--set installCRDs=true \
--set ports.web.port=8000 \
--set ports.web.exposedPort=80 \
--set ports.web.nodePort=30080 \
--set service.type=NodePort \
--set ingressClass.enabled=true \
--set ingressClass.isDefaultClass=true
# Wait for Traefik controller
echo "β³ Waiting for Traefik controller..."
kubectl wait --namespace default \
--for=condition=ready pod \
--selector=app.kubernetes.io/name=traefik \
--timeout=90s
# Create middleware for path stripping
echo "π§ Creating Traefik middleware..."
echo "β³ Waiting for Traefik CRDs to be available..."
kubectl wait --for condition=established --timeout=60s crd/middlewares.traefik.io
# Install your chart
echo "π Installing Keep chart..."
helm install keep ./charts/keep -f debug/traefik-values.yaml
# Wait for all Keep components to be ready
for component in frontend backend websocket database; do
echo "β³ Waiting for Keep $component to be ready..."
kubectl wait --namespace default \
--for=condition=ready pod \
--selector=app.kubernetes.io/instance=keep,keep-component=$component \
--timeout=120s
done
# Check status
check_status
# Function to test endpoint with retry
test_endpoint() {
local url=$1
local expected=$2
local max_attempts=5
local attempt=1
while [ $attempt -le $max_attempts ]; do
echo "Attempt $attempt of $max_attempts..."
RESP=$(curl -s "$url")
if [[ $RESP == *"$expected"* ]]; then
echo "β
Response contains expected content"
return 0
fi
echo "β³ Waiting before retry..."
sleep 5
((attempt++))
done
echo "β Failed to get expected response after $max_attempts attempts"
return 1
}
# Test endpoints
echo "π§ͺ Testing endpoints..."
echo -e "\nFrontend (/) - Testing redirect:"
RESP=$(curl -s -I http://localhost/)
echo "$RESP" | grep "HTTP"
LOCATION=$(echo "$RESP" | grep -i "location")
echo "$LOCATION"
echo -e "\nBackend (/v2/docs) - Testing API docs:"
test_endpoint "http://localhost/v2/docs" "Rest API powering"
echo -e "\nWebSocket (/websocket) - Testing connection:"
timeout 5 wscat -c "ws://localhost/websocket/app/keepappkey?protocol=7&client=js&version=8.3.0&flash=false" || true
# Show Traefik dashboard
echo -e "\nπ Traefik Dashboard available at: http://localhost:8080/dashboard/"
# Show recent logs
echo -e "\nπ Traefik controller logs:"
kubectl logs -l app.kubernetes.io/name=traefik --tail=50
# Keep script running for debugging
echo -e "\nπ Debug session active. Press Ctrl+C to cleanup."
echo "π Quick commands:"
echo " - kubectl get pods -A"
echo " - kubectl describe ingress"
echo " - kubectl logs <pod-name>"
echo " - kubectl port-forward svc/traefik 8080:8080"
echo " - curl -v http://localhost/"
echo " - curl -v http://localhost/v2/docs/"
echo " - curl -v -H \"Upgrade: websocket\" -H \"Connection: Upgrade\" http://localhost/websocket/"
# Cleanup on exit
trap "kind delete cluster" EXIT
read -r -d '' _ </dev/tty