-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
configuration details #1
Comments
The intention of Parrot is that it runs out-of-band and speaks for the whole cluster. Unfortunately, this is currently not possible due to the missing implementation of See: osrg/gobgp#1085 This means that it needs to run as a sidekick next to each kube-proxy and/or api-server in the cluster. Since it is announcing each proxy's hostIP and the apiserver master address. In our deployment we distinguish between
We schedule Parrot as a static pod with a manifest like so:
Since it is also announcing and talking to the API servers (which is the
Yes, this is possible. The grpc server is started on port 12345. See:
We tested with 1.3.X and 1.4.6. It doesn't do any magic in regards to the Kubernetes API. Should work with anything 1.0+.
We are using the
Awesome. I'm feeling bad not having had the time to publish a README and you had to reverse-engineer this. 🙁 If you want Parrot to announce your pod-subnets you need to label the nodes with an annotation https://github.com/sapcc/kube-parrot/blob/master/pkg/controller/podsubnets.go#L55 |
@BugRoger thank you for the details. Now that I have a better understanding of parrot, I'll try getting it working with my k8s lab cluster. I'll keep you posted. |
@BugRoger I finally got back to testing kube-parrot. I've made good progress thanks to your help. Parrot starts, creates the bgp neighbor relationships and advertises externalIPs as expected. However, the next-hop is my internal, non-routed network used for control traffic (apiserver<>kubelet, ipxe, etc..). Therefore, parrot advertises the externalIP routes to the ToR switches (BGP neighbors) with a next-hop of the node's internal interface IP instead of the node's external interface IP. I've worked-around this issue by creating a static route on the ToR switches to the IP of each nodes internal interface IP with a next-hop of the node's external interface IP. I would like to avoid having to manage these routes and simply use the node's external interface IP. From reviewing the parrot code, it appears the source of the issue is here. Even if I bind kube-proxy to the node's external interface IP, the Proxy.Status.HostIP still reports the node's internal interface IP. Using a node's External IP is no help since it reports the node's internal IP for both InternalIP and ExternalIP. For example:
Note: 10.10.10.x/24 is my internal, non-routed network used for mgt svcs. Do you see this same behavior or do your nodes expose ExternalIP's for services through your internal network? Do your nodes properly report the InternalIP and ExternalIP from Node.Status.Addresses? In the meantime, I'm going to look into the k8s node controller code for registering nodes. I need to understand how the Internal/ExternalIP's are determined during the node registration process. |
Great job with kube-parrot. So far I really like what I see with the project. I am trying to setup parrot to work with my k8s cluster. Can you help me with the following questions?
I have a parrot instance running in my k8s lab cluster and it has established bgp neighbor relationships with my two configured upstream bgp speakers. In general, I'm trying to figure out how parrot integrates with k8s and a few general grey areas. Any feedback would be greatly appreciated.
Here are a few details of my setup:
The text was updated successfully, but these errors were encountered: