Skip to main content
After installing KubeLB Manager and CCM, verify that all components are running correctly and can communicate with each other.

Verify Management Cluster

First, verify that the KubeLB Manager is running properly in the management cluster.

Check Manager Deployment

1

Check Manager pods

Verify the Manager pod is running:
kubectl get pods -n kubelb -l app.kubernetes.io/name=kubelb-manager
Expected output:
NAME                              READY   STATUS    RESTARTS   AGE
kubelb-manager-xxxxxxxxxx-xxxxx   2/2     Running   0          5m
The Manager pod has 2 containers: the manager itself and kube-rbac-proxy.
2

Check Envoy proxy deployment

Verify the Envoy proxy pods are running:
kubectl get pods -n kubelb -l app=envoy-proxy
Expected output (for replicas: 2):
NAME                           READY   STATUS    RESTARTS   AGE
envoy-proxy-xxxxxxxxxx-xxxxx   1/1     Running   0          5m
envoy-proxy-xxxxxxxxxx-xxxxx   1/1     Running   0          5m
3

Check Manager service

Verify the Manager service is created:
kubectl get svc -n kubelb kubelb-manager
Expected output:
NAME             TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
kubelb-manager   ClusterIP   10.96.123.456   <none>        8001/TCP   5m
4

Check CRDs

Verify that KubeLB CRDs are installed:
kubectl get crds | grep kubelb.k8c.io
Expected output:
configs.kubelb.k8c.io
loadbalancers.kubelb.k8c.io
routes.kubelb.k8c.io
tenants.kubelb.k8c.io

Check Manager Logs

Review the Manager logs for any errors:
kubectl logs -n kubelb -l app.kubernetes.io/name=kubelb-manager -c manager --tail=50
Look for successful initialization messages:
INFO    Starting manager
INFO    Starting server
INFO    Envoy xDS control plane started
If you see errors related to Gateway API, ensure Gateway API CRDs are installed or disable Gateway API support by setting kubelb.enableGatewayAPI: false.

Verify Tenant Cluster

Next, verify that the KubeLB CCM is running in each tenant cluster.

Check CCM Deployment

1

Check CCM pods

Verify the CCM pod is running:
kubectl get pods -n kubelb -l app.kubernetes.io/name=kubelb-ccm
Expected output:
NAME                          READY   STATUS    RESTARTS   AGE
kubelb-ccm-xxxxxxxxxx-xxxxx   2/2     Running   0          5m
2

Check management cluster secret

Verify the management cluster kubeconfig secret exists:
kubectl get secret -n kubelb kubelb-cluster
Expected output:
NAME             TYPE     DATA   AGE
kubelb-cluster   Opaque   1      10m
3

Check CRDs

Verify that KubeLB CRDs are installed:
kubectl get crds | grep kubelb.k8c.io
Expected output should include the same CRDs as in the management cluster.

Check CCM Logs

Review the CCM logs for any errors:
kubectl logs -n kubelb -l app.kubernetes.io/name=kubelb-ccm -c manager --tail=50
Look for successful initialization:
INFO    Starting manager
INFO    Connected to management cluster
INFO    Tenant registered: tenant-cluster-1

Test Load Balancer Creation

Create a test LoadBalancer service to verify end-to-end functionality.

Deploy Test Application

1

Create test deployment

In the tenant cluster, create a simple test application:
test-app.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-app
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      app: test-app
  template:
    metadata:
      labels:
        app: test-app
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: test-app-lb
  namespace: default
spec:
  type: LoadBalancer
  selector:
    app: test-app
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
Apply the manifest:
kubectl apply -f test-app.yaml
2

Check service status

Wait for the service to get an external IP (this may take a minute):
kubectl get svc test-app-lb -w
Expected output:
NAME          TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)        AGE
test-app-lb   LoadBalancer   10.96.123.456   203.0.113.10     80:31234/TCP   30s
3

Verify LoadBalancer resource in management cluster

Switch to the management cluster and check that the LoadBalancer CRD was created:
kubectl get loadbalancers -A
Expected output:
NAMESPACE          NAME                     AGE
tenant-cluster-1   default-test-app-lb      1m
4

Check Envoy proxy service

Verify that a LoadBalancer service was created for the Envoy proxy:
kubectl get svc -n kubelb
Look for services related to your tenant:
NAME                                    TYPE           EXTERNAL-IP
tenant-cluster-1-default-test-app-lb    LoadBalancer   203.0.113.10
5

Test connectivity

Test that you can reach the application through the load balancer:
curl http://203.0.113.10
You should see the nginx welcome page.

Cleanup Test Resources

Remove the test application:
kubectl delete -f test-app.yaml
Verify the LoadBalancer resource is removed from the management cluster:
# Run on management cluster
kubectl get loadbalancers -A

Verify Metrics (Optional)

If you enabled monitoring, verify that metrics are being collected.

Check Metrics Endpoints

# Port-forward to the Manager metrics endpoint
kubectl port-forward -n kubelb svc/kubelb-manager 9443:9443

# In another terminal, check metrics
curl -k https://localhost:9443/metrics

Check ServiceMonitor

If using Prometheus Operator:
kubectl get servicemonitor -n kubelb

Troubleshooting

Manager Not Starting

kubectl describe pod -n kubelb -l app.kubernetes.io/name=kubelb-manager

CCM Cannot Connect to Management Cluster

1

Verify secret contents

kubectl get secret -n kubelb kubelb-cluster -o jsonpath='{.data.kubelb}' | base64 -d
Ensure the kubeconfig is valid and points to the correct management cluster.
2

Test connectivity

kubectl exec -n kubelb deploy/kubelb-ccm -c manager -- \
  sh -c 'kubectl --kubeconfig=/kubelb/kubelb cluster-info'
3

Check RBAC permissions

Verify the kubeconfig has permissions to create LoadBalancer and Route resources in the management cluster.

Service Not Getting External IP

1

Check LoadBalancer class filtering

If useLoadBalancerClass: true, ensure services have the correct annotation:
metadata:
  annotations:
    loadBalancerClass: kubelb
2

Check CCM logs

kubectl logs -n kubelb -l app.kubernetes.io/name=kubelb-ccm -c manager | grep -i error
3

Verify LoadBalancer CRD creation

Check if the LoadBalancer CRD was created in the management cluster:
kubectl get loadbalancers -A
4

Check management cluster LoadBalancer implementation

Ensure the management cluster has a working LoadBalancer implementation (cloud provider or MetalLB).

Envoy Proxy Issues

kubectl logs -n kubelb -l app=envoy-proxy --tail=100

Health Checks

Use these commands for ongoing health monitoring:
kubectl get pods -n kubelb -l app.kubernetes.io/name=kubelb-manager
kubectl get pods -n kubelb -l app=envoy-proxy
kubectl get svc -n kubelb

Next Steps

Once verification is complete:
  1. Review the Architecture documentation to understand the traffic flow
  2. Learn how to use LoadBalancer services, Ingress, and Gateway API resources with KubeLB
  3. Configure monitoring and alerting for production deployments
  4. Set up high availability by increasing replica counts

Build docs developers (and LLMs) love