This guide provides troubleshooting steps for common issues with Cilium networking and Talos Linux Kubernetes clusters.
1. Checking Cilium Status
Always start by checking the current status of your Cilium installation:
cilium statusLook for any reported errors and the status of key components:
- Cilium
- Operator
- Envoy DaemonSet
- Hubble Relay
- ClusterMesh
2. TLS and Certificate Issues
2.1. Pending CSRs
Certificate Signing Requests (CSRs) must be approved for proper communication between Kubernetes components.
Check for pending CSRs:
kubectl get csr | grep PendingApprove all pending CSRs:
kubectl get csr | grep Pending | awk '{print $1}' | xargs kubectl certificate approveVerify approvals:
kubectl get csr2.2. Regenerating Certificates in Talos
If you encounter TLS internal errors:
Check certificate status:
talosctl get certs --nodes <node-ip>Restart kubelet to trigger certificate regeneration:
talosctl service kubelet restart --nodes <node-ip>For a more comprehensive certificate reset:
talosctl reset --graceful=true --system-labels-to-wipe k8s.io --nodes <node-ip>Force regenerate kubeconfig:
talosctl kubeconfig --nodes <node-ip> -fIn-place upgrade to recreate certificates:
talosctl upgrade --preserve --nodes <node-ip> --image ghcr.io/siderolabs/installer:latest2.3. Disabling TLS (Temporary Troubleshooting Only)
Using Helm to disable Hubble TLS:
cat > cilium-values.yaml << EOF
hubble:
tls:
enabled: false
EOF
helm upgrade cilium cilium/cilium --namespace kube-system -f cilium-values.yamlOr modify the Cilium ConfigMap directly:
kubectl edit configmap -n kube-system cilium-config
# For Hubble TLS specifically, look for and modify:
# hubble-tls-cert: ""
# hubble-tls-key: ""
# hubble-ca-cert: ""Then restart Cilium:
kubectl rollout restart deployment/cilium-operator -n kube-system
kubectl rollout restart daemonset/cilium -n kube-system⚠️ Security Warning: Disabling TLS removes a critical security layer. Only use temporarily for troubleshooting.
3. Resolving Cilium-Specific Issues
3.1. Cilium Component Troubleshooting
Check Cilium pods:
kubectl get pods -n kube-system | grep ciliumView Cilium logs:
kubectl logs -n kube-system -l k8s-app=cilium
kubectl logs -n kube-system -l io.cilium/app=operatorRestart Cilium DaemonSet:
kubectl rollout restart ds/cilium -n kube-systemRestart Cilium operator:
kubectl rollout restart deployment/cilium-operator -n kube-system3.2. Cleaning Up Failed Pods
Remove failed cilium-operator pods:
# First, identify failed pods
kubectl get pods -n kube-system | grep cilium-operator | grep -v Running
# Then delete them
kubectl delete pods -n kube-system $(kubectl get pods -n kube-system | grep cilium-operator | grep -v Running | awk '{print $1}')
# Alternative safer approach (if above doesn't work)
for pod in $(kubectl get pods -n kube-system | grep cilium-operator | grep -v Running | awk '{print $1}'); do
kubectl delete pod -n kube-system $pod;
done3.3. Reinstalling Cilium
If you need to reinstall Cilium completely:
# Remove existing installation
helm uninstall cilium -n kube-system
# Reinstall with Helm
helm repo add cilium https://helm.cilium.io/
helm repo update
helm install cilium cilium/cilium --version 1.17.2 --namespace kube-system4. Debugging Network Connectivity
4.1. Check Node Communication
Verify node internal IPs:
kubectl get nodes -o wide
# Or for more detail
kubectl describe nodes | grep InternalIPTest connectivity between nodes:
# From one node to another (using talosctl)
talosctl --nodes <node-ip> containers
talosctl --nodes <node-ip> exec --stdin /bin/sh -- ping <destination-node-ip>
# Test specific port connectivity (using debug pod)
kubectl run -it --rm debugger --image=nicolaka/netshoot -- bash
# Then inside the container
nc -zv <node-internal-ip> 102504.2. DNS and Service Connectivity
Test DNS resolution:
kubectl run -it --rm debug --image=busybox -- nslookup kubernetes.defaultCheck kube-proxy status:
kubectl get pods -n kube-system | grep kube-proxy
kubectl logs -n kube-system -l k8s-app=kube-proxy5. Talos-Specific Troubleshooting
5.1. Get Talos System Information
View Talos services:
talosctl services --nodes <node-ip>Check Talos logs:
talosctl logs controller-runtime --nodes <node-ip>5.2. Kubelet Status and Configuration
Check kubelet status:
talosctl service kubelet status --nodes <node-ip>View kubelet logs:
talosctl logs kubelet --nodes <node-ip>5.3. Node Recovery
For more serious issues, you can recover a Talos node:
# Safe reset preserving data
talosctl reset --graceful=true --reboot --system-labels-to-wipe k8s.io --nodes <node-ip>
# Full reset (use with caution)
talosctl reset --graceful=false --reboot --system-labels-to-wipe all --nodes <node-ip>6. General Kubernetes Debugging
Check system namespace:
kubectl get pods -n kube-systemView node conditions:
kubectl describe nodesCheck events:
kubectl get events --sort-by='.metadata.creationTimestamp'7. Common Error Messages and Solutions
”remote error: tls: internal error”
- Approve pending CSRs
- Regenerate certificates
- Restart kubelet
- Check for certificate expiration
”NodeShutdown - Pod was rejected”
- Clean up failed pods
- Check node status with
kubectl get nodes - Restart affected deployments
- The pods might have failed during node maintenance - this is expected behavior
”error fetching pod status”
- Check kubelet is running with
talosctl service kubelet status --nodes <node-ip> - Verify API server connectivity
- Regenerate certificates
- Check for pending CSRs
”unable to retrieve cilium status: command failed”
- Check cilium agent pods with
kubectl get pods -n kube-system -l k8s-app=cilium - View cilium logs with
kubectl logs -n kube-system -l k8s-app=cilium - Restart cilium with
kubectl rollout restart ds/cilium -n kube-system
Remember to always back up your configuration before making significant changes, and consider the security implications of any troubleshooting steps you take.