You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/troubleshoot.md
+96-10Lines changed: 96 additions & 10 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -12,6 +12,25 @@ GGBridge provides two types of images for different use cases:
12
12
-**Docker Compose**: Update the image tag in `docker-compose.yaml`
13
13
-**Helm**: Update the image tag in `values.yaml`
14
14
15
+
### Basic checks
16
+
17
+
Some very basic commands can be executed to check deployment healthiness before going further into debugging.
18
+
19
+
Check pods status:
20
+
```bash
21
+
kubectl get pods -n ggbridge -o wide
22
+
```
23
+
24
+
You should be looking for `Running` status, Ready column showing `1/1` (or `2/2`), and low restart count.
25
+
26
+
Check pods details:
27
+
```bash
28
+
kubectl describe pod $pod_name -n ggbridge
29
+
```
30
+
31
+
Have a look at the `Events` section for suspicious warnings or errors.
32
+
33
+
15
34
### Connectivity Tests
16
35
17
36
#### 1. Client-Side Healthcheck
@@ -107,29 +126,93 @@ Expected output: List of Git branches and their commit hashes
107
126
> [!TIP]
108
127
> Please consider using the `CronJob` probes available [here](../tests/) if you want a permanent check.
109
128
110
-
### Log Analysis
129
+
#### 4. Reverse tunneling
111
130
112
-
#### Client/Server Health Logs.
113
-
Check nginx sidecar logs for connectivity issues:
131
+
When reverse tunneling is enabled on client side, you can check if you are able to connect to `api.gitguardian.com`. Execute this command on the customer's cluster:
Check that DNS resolution on customer's environment properly resolve to the custom Kubernetes endpoint (implentation specific) instead of the public IP address of `hook.gitguardian.com`/`api.gitguardian.com`. Execute following commands from the customer's VCS server for example:
You should see `INFO` logs mentionning opened/closed connections:
192
+
```console
193
+
2025-10-16T08:21:06.156024Z INFO wstunnel::protocols::tls::server: Doing TLS handshake using SNI DnsName("jpynh30wscp60zs4lbdf4m4p8qe9idgu.ggbridge.gitguardian.com") with the server jpynh30wscp60zs4lbdf4m4p8qe9idgu.ggbridge.gitguardian.com:443
194
+
2025-10-16T08:21:06.570872Z INFO tunnel{id="0199ec1b-c14b-7f41-9492-e538c7a90f97" remote="127.0.0.1:8081"}: wstunnel::tunnel::transport::io: Closing local => remote tunnel
195
+
2025-10-16T08:21:06.571213Z INFO tunnel{id="0199ec1b-c14b-7f41-9492-e538c7a90f97" remote="127.0.0.1:8081"}: wstunnel::tunnel::transport::io: Closing local <= remote tunnel
196
+
2025-10-16T08:21:08.489704Z INFO tunnel{id="0199ec1b-af3c-70e3-8595-cd82aaf74cf4" remote="0.0.0.0:9081"}: wstunnel::tunnel::transport::io: Closing local => remote tunnel
197
+
2025-10-16T08:21:08.738773Z INFO wstunnel::protocols::tls::server: Doing TLS handshake using SNI DnsName("jpynh30wscp60zs4lbdf4m4p8qe9idgu.ggbridge.gitguardian.com") with the server jpynh30wscp60zs4lbdf4m4p8qe9idgu.ggbridge.gitguardian.com:443
198
+
2025-10-16T08:21:10.693531Z INFO tunnel{id="0199ec1b-b789-7362-b52a-5853e726c484" remote="0.0.0.0:9081"}: wstunnel::tunnel::transport::io: Closing local => remote tunnel
199
+
2025-10-16T08:21:10.947501Z INFO wstunnel::protocols::tls::server: Doing TLS handshake using SNI DnsName("jpynh30wscp60zs4lbdf4m4p8qe9idgu.ggbridge.gitguardian.com") with the server jpynh30wscp60zs4lbdf4m4p8qe9idgu.ggbridge.gitguardian.com:443
200
+
```
201
+
202
+
> [!NOTE]
203
+
> Any log entries at `WARN` or `ERROR` level are worth highlighting if present.
204
+
205
+
> [!NOTE]
206
+
> You can also increase verbosity if needed, at `DEBUG` or `TRACE` level (default `INFO`):
207
+
> ```yaml
208
+
> logLevel: INFO # --> set de DEBUG or TRACE on server/client side values.yaml
Copy file name to clipboardExpand all lines: examples/2-way-tunneling/README.md
+53-83Lines changed: 53 additions & 83 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,12 +2,12 @@
2
2
3
3
By default, the `ggbridge` client does not expose any **client → server** proxies that allow accessing remote resources through the established tunnel.
4
4
5
-
However, `ggbridge` supports two types of client-to-server proxies:
5
+
However, `ggbridge` supports client-to-server proxy with **TLS Routing**.
6
6
7
-
-**TLS Routing**: Exposes a TLS port to forward all incoming TLS traffic through a TCP tunnel. This requires DNS redirection, e.g., redirecting `hook.gitguardian.com` requests to the ggbridge client.
8
-
-**HTTPS Routing**: Exposes an HTTPS service and allows defining routing rules. For instance, you can expose a hostname like `hook.gitguardian.internal` and route traffic to `hook.gitguardian.com` through the ggbridge tunnel.
7
+
**TLS Routing** exposes a TLS port to forward all incoming TLS traffic through a TCP tunnel. This requires **DNS redirection**, e.g., redirecting `hook.gitguardian.com` requests to the ggbridge client.
9
8
10
-
> **Note:** On the server side, only requests to `hook.gitguardian.com` and `api.gitguardian.com` are allowed for client → server traffic.
9
+
> [!CAUTION]
10
+
> On the server side, only requests to `hook.gitguardian.com` and `api.gitguardian.com` are allowed for client → server traffic.
11
11
12
12
---
13
13
@@ -24,9 +24,12 @@ client:
24
24
enabled: true
25
25
```
26
26
27
+
> [!NOTE]
28
+
> **TLS Routing** does not work natively with standard `Ingress` objects. Some Ingress controllers offer specific configurations (annotations, custom parameters, etc.) to enable TLS Routing with `Ingress`, but this depends entirely on your controller’s capabilities and is highly implementation-specific. Please refer to your Ingress controller’s documentation for this particular use case.
29
+
27
30
The TLS port can be exposed using one of the following methods:
28
31
29
-
1. LoadBalancer Service
32
+
### 1. LoadBalancer Service
30
33
31
34
Helm values file example 👉 [values-tls-service.yaml](./helm/values-tls-service.yaml)
32
35
@@ -38,124 +41,91 @@ proxy:
38
41
type: LoadBalancer
39
42
ports:
40
43
tls:
41
-
# 443 is the default TLS port
42
44
port: 443
43
45
```
46
+
Ensure that your VCS (and any assets using the GitGuardian hook) resolve `hook.gitguardian.com` and `api.gitguardian.com` to the external IP address of the created LoadBalancer Service (default name `ggbridge-proxy-tls`).
44
47
45
-
2. Ingress
48
+
> [!NOTE]
49
+
> `LoadBalancer` Service exposes the Service externally using an external load balancer. Kubernetes does not directly offer a load balancing component; you must provide one, or you can integrate your Kubernetes cluster with a cloud provider. Refer to official [Kubernetes documentation](https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer) for more information.
46
50
47
-
Helm values file example 👉 [values-tls-ingress.yaml](./helm/values-tls-ingress.yaml)
51
+
### 2. Custom Resource (CRD)
48
52
49
-
```yaml
50
-
proxy:
51
-
tunnels:
52
-
tls:
53
-
ingress:
54
-
enabled: true
55
-
className: ""
56
-
```
53
+
Some Ingress controllers provide Custom Resources that enable enhanced capabilities—such as TCP handling, authentication, and other advanced features. This is the case with Traefik, Istio, and other well-known Kubernetes networking solutions.
57
54
58
-
3. Gateway API
55
+
Currently we support Traefik [`IngressRouteTCP`](https://doc.traefik.io/traefik/reference/routing-configuration/kubernetes/crd/tcp/ingressroutetcp/) Custom Resource. Ensure that Traefik ingress controller is installed in your cluster first.
59
56
60
-
Helm values file example 👉 [values-tls-gateway.yaml](./helm/values-tls-gateway.yaml)
57
+
Helm values file example 👉 [values-tls-traefik.yaml](./helm/values-tls-traefik.yaml)
61
58
62
59
```yaml
63
60
proxy:
64
61
tunnels:
65
62
tls:
66
-
gateway:
67
-
enabled: true
68
-
# This will create the gateway resource, you can disable it if you want to mange it on you own.
69
-
create: true
70
-
className: ""
71
-
```
72
-
73
-
4. OpenShift Route
74
-
75
-
Helm values file example 👉 [values-tls-openshift-route.yaml](./helm/values-tls-openshift-route.yaml)
Ensure that your VCS (and any assets using the GitGuardian hook) resolve `hook.gitguardian.com` and `api.gitguardian.com` to the external IP address of the Traefik LoadBalancer Service.
This service can be exposed via Ingress or Gateway:
75
+
### 3. Gateway API
100
76
101
-
1. Ingress
77
+
> [!NOTE]
78
+
> [Gateway API](https://gateway-api.sigs.k8s.io/guides/#getting-started-with-gateway-api) must be installed in your cluster first.
102
79
103
-
Helm values file example 👉 [values-https-ingress.yaml](./helm/values-https-ingress.yaml)
80
+
Helm values file example 👉 [values-tls-gateway.yaml](./helm/values-tls-gateway.yaml)
104
81
105
82
```yaml
106
83
proxy:
107
84
tunnels:
108
-
web:
109
-
ingress:
85
+
tls:
86
+
gateway:
110
87
enabled: true
111
-
# -- Set the ingress ClassName (leave empty to use default)
112
-
className: ""
113
-
listeners:
114
-
# This listener exposes an HTTPS service with the hostname
115
-
# `hook.private.com` and routes traffic to `hook.gitguardian.com`
116
-
- hostname: hook.private.com
117
-
backend: hook.gitguardian.com
118
-
tls:
119
-
# Certificate for hook.private.com
120
-
secretName: internal-crt
88
+
gateway:
89
+
# This will create the gateway resource, you can disable it if you want to manage it on your own.
90
+
create: true
91
+
# This will set the gatewayClass of the Gateway
92
+
className: "my-gatewayclass"
121
93
```
122
94
123
-
2. Gateway API
124
-
125
-
Helm values file example 👉 [values-https-gateway.yaml](./helm/values-https-gateway.yaml)
95
+
This will create a [`Gateway`](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway) and [`TLSRoute`](https://gateway-api.sigs.k8s.io/concepts/api-overview/#tlsroute) object. You need to deploy first a [`GatewayClass`](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gatewayclass) in your cluster.
126
96
97
+
If your teams already manage `GatewayClass` and `Gateway` resources, you can reference the `Gateway` in the `TLSRoute` with :
127
98
```yaml
128
99
proxy:
129
100
tunnels:
130
-
web:
101
+
tls:
131
102
gateway:
132
103
enabled: true
133
-
# -- Set the gateway ClassName (leave empty to use default)
134
-
className: ""
135
-
listeners:
136
-
- hostname: hook.private.com
137
-
backend: hook.gitguardian.com
138
-
tls:
139
-
# Certificate for hook.private.com
140
-
secretName: internal-crt
104
+
parentRefs:
105
+
- name: my-gateway
106
+
namespace: my-gateway-namespace
107
+
gateway:
108
+
create: false
141
109
```
142
110
143
-
3. OpenShift Route
111
+
Ensure that your VCS (and any assets using the GitGuardian hook) resolve `hook.gitguardian.com` and `api.gitguardian.com` to the IP address of the `Gateway` Custom Resource.
112
+
```console
113
+
$ kubectl get gateway
114
+
NAME CLASS ADDRESS PROGRAMMED AGE
115
+
my-gateway my-gatewayclass 192.168.1.200 True 54h
116
+
```
117
+
118
+
### 4. OpenShift Route
144
119
145
-
Helm values file example 👉 [values-https-openshift-route.yaml](./helm/values-https-openshift-route.yaml)
120
+
Helm values file example 👉 [values-tls-openshift-route.yaml](./helm/values-tls-openshift-route.yaml)
0 commit comments