Hey everyone! I'm running into some trouble with my Cilium setup when trying to have my gateways' routes advertised via BGP. So, I can easily specify a service of type 'LoadBalancer' using HTTPRoute, and its IP gets advertised just fine. I can even access the service through the WebGUI without issues.
However, when I create a Gateway to route traffic, absolutely nothing happens. The Gateway is created, the 'ciliumenvoyconfig' gets generated, and I have all the necessary CRDs installed for both standard and experimental routes. I've set up two gateways: one for internal/LAN traffic and another for traffic going through a private tunnel.
I've attached my BGP configuration and the definitions for both the Gateway and HTTPRoute. I'd appreciate any guidance on what might be going wrong!
2 Answers
I think the BGPAdvertiser needs to find the service created by your gateway to work properly. It's crucial that there’s a match by name. Have you labeled your gateway in a way that the advertiser can find it? That could be the issue.
First, check your gateway class by running `kubectl get gatewayclass`. If it shows nothing, you might need to adjust your gateway config to create the class. By default, it should auto-create, but if you installed the CRDs after Cilium, it might not be set up properly. If it does return a class but has 'accepted' set to unknown, try restarting your Cilium pods with these commands:
- `kubectl -n kube-system rollout restart ds/cilium`
- `kubectl -n kube-system rollout restart ds/cilium-envoy`
- `kubectl -n kube-system rollout restart deployment/cilium-operator`
Good news! The gateway class does return 'cilium' and it's set to 'true'. This was created by the operator, but I installed the CRDs after setting up the Talos bootstrap, so I wasn't sure if that affected anything.

I tried labeling both the gateways and using a label selector, but that didn't help either. Are you suggesting I need to label the gateway itself or the service it creates? How do I ensure that the service created by the gateway gets labeled correctly?