【问题标题】:How do you find the cluster & service CIDR of a Kubernetes cluster?如何找到 Kubernetes 集群的集群和服务 CIDR?
【发布时间】:2017-10-26 16:48:24
【问题描述】:

如何找到 Kubernetes 集群的集群/服务 CIDR,一旦它已经在运行?

我知道 Minikube 是 10.0.0.1/24。

对于 GKE,您可以通过

了解
gcloud container clusters describe XXXXXXX --zone=XXXXXX |
  grep -e clusterIpv4Cidr -e servicesIpv4Cidr

但是您如何找到通用 Kubernetes 集群,尤其是通过kubectl

【问题讨论】:

    标签: kubernetes kubectl


    【解决方案1】:

    您是否检查了以下命令是否包含您需要的信息?

    kubectl cluster-info dump

    【讨论】:

    • 对我来说,kubectl cluster-info dump | grep -i cidr 努力寻找 pidCIDR 和 clusterCIDR。
    • 错误:缺少 apiVersion 或 kind 且无法分配;没有为 core.NodeList 类型注册类型
    • 这个错误在1.11中存在,应该在1.12中修复:github.com/kubernetes/kubernetes/issues/65221
    • 不适用于所有网络插件(我使用的是 Canal)
    【解决方案2】:

    由于rep,我还不能发表评论,所以我只会用我发现的内容来回答。

    对于 minikube,它看起来 CIDR 可以改变,特别是对我来说。我在

    的 .minikube 目录下找到了 CIDR

    .minikube\profiles\minikube

    对于 Windows,您可以在以下位置找到:

    C:\Users\YourUserName\.minikube\profiles\minikube

    对于 linux 和 mac,我假设它位于 ~/.minikube 目录下。

    在目录中应该有一个名为 config.json 的文件,它有一个 json 对象“KubernetesConfig”:{},具有以下字段:ServiceCIDR。其值应该是您的服务的 CIDR。

    不幸的是,对于 kubectl 查找 CIDR,我没有其他提示,也许它更多的是提供程序,并且取决于您在哪里/如何运行 kubernetes。

    【讨论】:

      【解决方案3】:

      获取服务 IP 范围

      kubectl cluster-info dump | grep -m 1 service-cluster-ip-range
      

      你会看到类似的东西,例如--service-cluster-ip-range=xxx.yy.0.0/13

      获取 Pod 的 IP 范围

      kubectl cluster-info dump | grep -m 1 cluster-cidr
      

      你会看到类似的东西,例如--cluster-cidr=xxx.yy.0.0/11

      【讨论】:

      • 不适用于 DOKS 以太
      • 这对我不起作用,可能是因为我让它使用默认 CIDR 并且在 kubeadm init 期间没有指定我自己的 CIDR
      【解决方案4】:

      使用 kubeadm

      kubeadm config view | grep Subnet

      下面的输出是不言自明的

      pod子网:10.10.0.0/16

      服务子网:10.96.0.0/12

      【讨论】:

      • 这对我不起作用,可能是因为我让它使用默认 CIDR 并且在 kubeadm init 期间没有指定我自己的 CIDR
      【解决方案5】:

      我花了几个小时寻找一种通用的方法来做到这一点。我放弃了搜索并写了我自己的。从 Kubernetes 1.18 开始,此方法适用于云提供商,而不仅仅是 GKE。

      SVCRANGE=$(echo '{"apiVersion":"v1","kind":"Service","metadata":{"name":"tst"},"spec":{"clusterIP":"1.1.1.1","ports":[{"port":443}]}}' | kubectl apply -f - 2>&1 | sed 's/.*valid IPs is //')
      echo $SVCRANGE
      172.21.0.0/16
      

      这一行通过将无效的服务集群 IP 输入 kubectl apply 并解析错误输出来工作,从而提供服务 CIDR 信息。

      【讨论】:

      • 干净的解决方案,也是唯一对我有用的解决方案。
      • 非常感谢您的积极反馈!我的第一个堆栈溢出:) 如果有任何方法可以改进答案,请告诉我。
      • 我失去了对“转储”的访问权限,而且是下班时间,这帮助我解决了问题:)
      • 你是 MVP @StevenDake。我在 1.14.9 上试过这个,它也可以在那里工作。
      • 谢谢。第一个答案对我不起作用,但这个答案对我有用!是否有类似的方法来查找集群 CIDR? (pod ip 范围)
      【解决方案6】:

      与建议的 before 类似,但仅返回 CIDR:

      POD_CIDR=$(kubectl cluster-info dump | grep -m 1 -Po '(?<=--cluster-cidr=)[0-9.\/]+')
      SERVICE_RANGE=$(kubectl cluster-info dump | grep -m 1 -Po '(?<=--service-cluster-ip-range=)[0-9.\/]+')
      

      【讨论】:

      • 这对我不起作用,可能是因为我让它使用默认 CIDR 并且在 kubeadm init 期间没有指定我自己的 CIDR
      【解决方案7】:

      kubectl describe cm kubeadm-config -n kube-system |grep Subnet

      【讨论】:

      • 这对我不起作用,可能是因为我让它使用默认 CIDR 并且在 kubeadm init 期间没有指定我自己的 CIDR
      【解决方案8】:

      如果您没有指定--pod-network-cidr--service-cidr,则使用默认值。获取默认值:

      kubeadm config print init-defaults
      

      或者获取配置图:

      kubectl  --namespace kube-system get configmap kubeadm-config -o yaml
      

      【讨论】:

      • 对我不起作用。我在初始化期间没有指定--pod-network-cidr,它没有在kubeadm config print init-defaultskubectl --namespace kube-system get configmap kubeadm-config -o yaml 中列出
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-22
      • 2019-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多