Kubernetes - 以编程方式找出服务 ip 范围 CIDR

Kubernetes - Find out service ip range CIDR programatically

我需要一种方法来获取适用于所有 Kubernetes 集群的服务集群 IP 范围(如 CIDR)。

我尝试了以下方法,它适用于使用 kubeadm 创建的集群,因为它会获取 apiserver pod 的参数:

$ kubectl cluster-info dump  | grep service-cluster-ip-range
                        "--service-cluster-ip-range=10.96.0.0/12",

这不适用于所有 Kubernetes 集群,即 gcloud

所以问题是,以编程方式获取服务 ip 范围的最佳方法是什么?

我认为没有办法通过 K8s Api 访问此类信息,有一个未解决的问题来解决此功能的缺失:https://github.com/kubernetes/kubernetes/issues/25533。如果您有权访问相关 k8s 集群的 etcd,则有一个包含有关服务 cidr 范围信息的密钥: /registry/ranges/serviceips 。您可以使用 etcdctl 获取值(假设您拥有适当的权限):etcdctl --enpoints=<your etcd> --<any authentication flags> get "/registry/ranges/serviceips" --prefix=true.