如何获取Kubernetes Pod网络CIDR

236次阅读
没有评论

问题描述

在使用kubeadm初始化的运行中的Kubernetes集群中,没有传递--pod-network-cidr选项。他想知道如何获取Pod网络的CIDR。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

使用以下命令可以获取集群中每个节点的Pod CIDR地址:

kubectl get nodes -o jsonpath='{.items[*].spec.podCIDR}'

请注意,如果输出为空,可能是因为节点的spec字段为空。

方案2

使用以下命令可以显示kube-proxy使用的Pod网络CIDR:

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

请注意,如果输出为空,可能是因为没有设置Pod网络CIDR。

方案3

Pod网络CIDR(也称为--cluster-cidr--pod-network-cidr)是传递给kube-controller-manager配置的。可以使用以下命令获取:

ps -ef | grep "cluster-cidr"

方案4

如果使用的是kubeadm版本1.22,可以使用以下命令查看默认值:

kubeadm config print init-defaults | grep "serviceSubnet"

请注意,这是唯一一个在某些情况下有效的答案(Kubernetes版本为1.24.0)。

方案5

Pod网络CIDR信息可以在文件/etc/kubernetes/manifests/kube-controller-manager.yaml中找到:

sudo grep cidr /etc/kubernetes/manifests/kube-*

方案6

使用kubeadm命令可以获取Pod网络CIDR:

kubeadm config view | grep Subnet

请注意,这个命令与其他答案中提供的命令有什么区别,并且可以添加一个命令输出的示例吗?

方案7

以下是几种选项的组合(结合现有答案并添加Calico的选项),包括示例输出:
选项1:在主节点上运行以下命令(也适用于在Ubuntu上运行microk8s等情况):

kubeadm config view | grep Subnet

示例输出(本地3节点集群,主节点):

podSubnet: 172.16.0.0/16
serviceSubnet: 10.96.0.0/12

选项2:在主节点上运行以下命令:

ps -ef | grep cluster-cidr

示例输出(在运行microk8s的本地机器上):

vincent   6841 27089  0 09:52 pts/7    00:00:00 grep --color=auto cluster-cidr
root      7053     1  0 feb12 ?        00:00:14 /snap/microk8s/1173/kube-proxy --kubeconfig=/var/snap/microk8s/1173/credentials/proxy.config --cluster-cidr=10.152.183.0/24 --healthz-bind-address=127.0.0.1

选项3:在主节点上运行以下命令:

sudo grep cidr /etc/kubernetes/manifests/kube-*

示例输出(相同主节点):

/etc/kubernetes/manifests/kube-controller-manager.yaml:    - --allocate-node-cidrs=true
/etc/kubernetes/manifests/kube-controller-manager.yaml:    - --cluster-cidr=172.16.0.0/16
/etc/kubernetes/manifests/kube-controller-manager.yaml:    - --node-cidr-mask-size=24

如果使用Calico,可以使用calicoctl命令:

CALICO_KUBECONFIG=~/.kube/config DATASTORE_TYPE=kubernetes calicoctl get ippool -o wide

示例输出(对于相同集群,可以在具有正确的kubectl配置和与集群的连接的任何位置运行):

NAME                  CIDR            NAT    IPIPMODE   DISABLED   SELECTOR   default-ipv4-ippool   172.16.0.0/16   true   Always     false      all()

根据您的网络选项,可能还有其他选项,希望在相应的文档中有所说明。

方案8

要获取Service IP范围(即分配给ClusterIP的IP),可以使用以下命令:

ps -aux | grep kube-apiserver | grep service-cluster-ip-range

要找到Pod网络范围,当您使用kubeadm 1.22定义集群并使用weave作为网络插件时,可以使用以下命令:
首先,使用以下命令找到weave pod的名称:

kubectl get pod -n kube-system | grep weave

然后,复制三个pod名称中的任意一个。

kubectl -n kube-system logs <<weave-net-podname-from-above-step>> -c weave | grep ipalloc-range

您将找到默认的10.32.0.0/12或您在kubeadm init期间分配的任何范围。

正文完