你如何找到 Kubernetes 集群的集群和服务 CIDR?
How do you find the cluster & service CIDR of a Kubernetes cluster?
一旦 Kubernetes 集群的 cluster/service CIDR 已经 运行,您如何找到它?
我知道 Minikube 是 10.0.0.1/24。
对于GKE,您可以通过
了解
gcloud container clusters describe XXXXXXX --zone=XXXXXX |
grep -e clusterIpv4Cidr -e servicesIpv4Cidr
但是您如何在通用 Kubernetes 集群上找到,特别是通过 kubectl
?
您检查过以下命令是否包含您需要的信息吗?
kubectl cluster-info dump
由于代表的原因,我还不能发表评论,所以我只想回答我发现的问题。
对于 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 的技巧,也许它更多的是供应商的事情并且取决于 where/how 你是 运行 kubernetes。
获取服务 IP 范围
kubectl cluster-info dump | grep -m 1 service-cluster-ip-range
您会看到类似--service-cluster-ip-range=xxx.yy.0.0/13
获取 Pods 个 IP 范围
kubectl cluster-info dump | grep -m 1 cluster-cidr
您会看到类似--cluster-cidr=xxx.yy.0.0/11
使用 kubeadm
kubeadm config view | grep Subnet
下面的输出是不言自明的
pod子网:10.10.0.0/16
服务子网:10.96.0.0/12
我花了几个小时寻找一种通用的方法来做到这一点。我放弃了搜索并写了自己的。从 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
这个 liner 的工作原理是将无效的服务集群 IP 输入 kubectl apply 并解析错误输出,从而提供服务 CIDR 信息。
与提议的 类似,但仅返回 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.\/]+')
kubectl describe cm kubeadm-config -n kube-system |grep Subnet
如果您没有指定 --pod-network-cidr
或 --service-cidr
,则使用默认值。获取默认值:
kubeadm config print init-defaults
或获取配置图:
kubectl --namespace kube-system get configmap kubeadm-config -o yaml
一旦 Kubernetes 集群的 cluster/service CIDR 已经 运行,您如何找到它?
我知道 Minikube 是 10.0.0.1/24。
对于GKE,您可以通过
了解gcloud container clusters describe XXXXXXX --zone=XXXXXX |
grep -e clusterIpv4Cidr -e servicesIpv4Cidr
但是您如何在通用 Kubernetes 集群上找到,特别是通过 kubectl
?
您检查过以下命令是否包含您需要的信息吗?
kubectl cluster-info dump
由于代表的原因,我还不能发表评论,所以我只想回答我发现的问题。
对于 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 的技巧,也许它更多的是供应商的事情并且取决于 where/how 你是 运行 kubernetes。
获取服务 IP 范围
kubectl cluster-info dump | grep -m 1 service-cluster-ip-range
您会看到类似--service-cluster-ip-range=xxx.yy.0.0/13
获取 Pods 个 IP 范围
kubectl cluster-info dump | grep -m 1 cluster-cidr
您会看到类似--cluster-cidr=xxx.yy.0.0/11
使用 kubeadm
kubeadm config view | grep Subnet
下面的输出是不言自明的
pod子网:10.10.0.0/16
服务子网:10.96.0.0/12
我花了几个小时寻找一种通用的方法来做到这一点。我放弃了搜索并写了自己的。从 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
这个 liner 的工作原理是将无效的服务集群 IP 输入 kubectl apply 并解析错误输出,从而提供服务 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.\/]+')
kubectl describe cm kubeadm-config -n kube-system |grep Subnet
如果您没有指定 --pod-network-cidr
或 --service-cidr
,则使用默认值。获取默认值:
kubeadm config print init-defaults
或获取配置图:
kubectl --namespace kube-system get configmap kubeadm-config -o yaml