如何从Kubernetes集群内部以可移植和简单的方式查询正在使用的Kubernetes pod和服务子网(分别为10.244.0.0/16
和10.96.0.0/12
)?
例如,kubectl get cm -n kube-system kubeadm-config -o yaml
报告podSubnet
和serviceSubnet
。但这不是完全可移植的,因为群集可能是通过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?
答案 0 :(得分:0)
我认为不可能以便携式和简单的方式获得想要的东西。 如果不指定Cidr的参数,它将分配默认值。
由于您有多种方式将kubernetes作为非托管群集(如kubeadm,minikbue,k3,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
个窗格,则可以找到另一个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。