【问题标题】:Inquiring pod and service subnets from inside Kubernetes cluster从 Kubernetes 集群内部查询 pod 和服务子网
【发布时间】:2020-09-02 23:08:47
【问题描述】:

如何从 Kubernetes 集群内部以一种可移植且简单的方式查询正在使用的 Kubernetes pod 和服务子网(例如分别为 10.244.0.0/1610.96.0.0/12)?

例如,kubectl get cm -n kube-system kubeadm-config -o yaml 报告 podSubnetserviceSubnet。但这不是完全可移植的,因为集群可能是通过 kubeadm 以外的其他方式设置的。

kubectl get cm -n kube-system kube-proxy -o yaml 报告 clusterCIDR(即 pod 子网)和 kubectl get pod -n kube-system kube-apiserver-master1 -o yaml 报告值 作为命令行选项--service-cluster-ip-range 传递给kube-apiserver(即服务子网)。 master1 代表任何控制平面节点的名称。但这似乎有点复杂。

有没有更好的方法,例如使用 Kubernetes 1.17 API?

【问题讨论】:

  • 你能指定你想要的格式吗?它来自集群、子网、命名空间的所有 pod 和 svc?仅列出 pod 还是仅列出服务?
  • @PjoterS 我希望 CIDR 表示法中有两个字符串可以标识两个子网,即整个集群中的 Pod 和服务(所有命名空间)。问题已经这么说了。
  • 来自你的 deleted question:“或者你是说 SO 和 k8s 之间没有任何安排,他们只是让像我这样的人从他们的 GitHub 站点误入歧途?”。很难说具体的开源项目,但大多数情况下,Stack Overflow 社区都能准确找到您所说的——项目的企业支持者没有资源来支持其产品,因此将人们派往志愿者网站而是。
  • 有一些关于这个hereherehere的元讨论。底线是公司派人来这里不一定是错误的,但是(a)不是每个来这里的人都在正确的网站上,并且(b)第三方无法决定它在什么地方——话题在这里。即使是强大的谷歌:=)
  • @halfer 感谢您提供特定链接。就我而言,这是建设性的意见。也许我会在 KubeCon 上四处打听并提出这个问题。

标签: kubernetes kube-apiserver


【解决方案1】:

我认为以便携和简单的方式获得您想要的东西是不可能的。 如果您不指定 Cidr 的参数,它将分配默认值。

由于您有多种方法可以将 kubernetes 作为非托管集群(如 kubeadm、minikbue、k3s、micork8s)运行或像云提供商(GKE、Azure、AWS)一样托管,因此很难找到一种方法来列出所有环境中的所有 cidr。另一个障碍可能是 Kubernetes 或 CNI 的版本。

在 Kubernetes 1.17 Release notes 中,您可以找到相关信息

弃用默认服务 IP CIDR。以前的默认值为10.0.0.0/24,它将在 6 个月/2 个版本中删除。集群管理员必须通过在 kube-apiserver 上使用 --service-cluster-ip-range 来指定他们自己想要的值。

以 Kubeadm 为例:$ kubeadm init --pod-network-cidr 10.100.0.0/12 --service-cidr 10.99.0.0/12

有几种方法可以获得这个 pod 和 service-cidr:

$ kubectl cluster-info dump | grep -E '(service-cluster-ip-range|cluster-cidr)'
                            "--service-cluster-ip-range=10.99.0.0/12",
                            "--cluster-cidr=10.100.0.0/12",



$ kubeadm config view | grep Subnet
  podSubnet: 10.100.0.0/12
  serviceSubnet: 10.99.0.0/12

但如果您检查此集群中的所有 pod,有些 pod 以 192.168.190.X 或 192.168.137.X 开头

$ kubectl get pods -A -owide
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE    IP                NODE             NOMINATED NODE   READINESS GATES
default       nginx                                      1/1     Running   0          62m    192.168.190.129   kubeadm-worker   <none>           <none>
kube-system   calico-kube-controllers-77c5fc8d7f-9n6m5   1/1     Running   0          118m   192.168.137.66    kubeadm-master   <none>           <none>
kube-system   calico-node-2kx2v                          1/1     Running   0          117m   10.128.0.4        kubeadm-worker   <none>           <none>
kube-system   calico-node-8xqd9                          1/1     Running   0          118m   10.128.0.3        kubeadm-master   <none>           <none>
kube-system   coredns-66bff467f8-sgmkw                   1/1     Running   0          120m   192.168.137.65    kubeadm-master   <none>           <none>
kube-system   coredns-66bff467f8-t84ht                   1/1     Running   0          120m   192.168.137.67    kubeadm-master   <none>           <none>

如果您要描述任何 CNI pod,您可以找到其他 CIDR:

CALICO_IPV4POOL_CIDR:               192.168.0.0/16

对于 GKE 示例,您将拥有: 节点 CIDR

$ kubectl describe node | grep CIDRs
PodCIDRs:                     10.52.1.0/24
PodCIDRs:                     10.52.0.0/24
PodCIDRs:                     10.52.2.0/24

$ gcloud container clusters describe cluster-2 --zone=europe-west2-b | grep Cidr
clusterIpv4Cidr: 10.52.0.0/14
  clusterIpv4Cidr: 10.52.0.0/14
  clusterIpv4CidrBlock: 10.52.0.0/14
  servicesIpv4Cidr: 10.116.0.0/20
  servicesIpv4CidrBlock: 10.116.0.0/20
  podIpv4CidrSize: 24
servicesIpv4Cidr: 10.116.0.0/20

老实说,我认为没有一种简单且便携的方法可以在一个简单的命令中列出所有 podCidrs 和 serviceCidrs。

【讨论】:

    猜你喜欢
    • 2020-06-10
    • 1970-01-01
    • 1970-01-01
    • 2020-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    相关资源
    最近更新 更多