Как узнать, какой podcidr назначен каждому узлу calico CNI в kubernetes

#kubernetes #kubernetes-pod #project-calico #calico #cni

#kubernetes #kubernetes-pod #проект-calico #ситцевый #cni

Вопрос:

Существует ли какая-либо прямая команда для извлечения podcidr, назначенного каждому узлу при использовании calico CNI.

Я ищу точную сеть и сетевую маску, назначенную каждому узлу. Я не могу получить его kubectl get nodes ни через podCIDR value , ни через projectcalico.org/IPv4VXLANTunnelAddr аннотацию. Также похоже, что аннотация также будет отличаться в зависимости от туннеля VXLAN или IPIP, используемого calico.

Пытался извлечь ключ PodCidr с узлов. Получил следующий вывод. Это не была сеть, назначенная узлам.

 kubectl get nodes -oyaml | grep -i podcidr -B 1
  spec:
    podCIDR: 192.168.0.0/24
    podCIDRs:
--
  spec:
    podCIDR: 192.168.2.0/24
    podCIDRs:
 

Пытался получить его через аннотацию calico. Удалось найти сеть, но маска сети отсутствовала.

 kubectl get nodes -oyaml | grep -i ipv4vxlan
      projectcalico.org/IPv4VXLANTunnelAddr: 192.168.33.64
      projectcalico.org/IPv4VXLANTunnelAddr: 192.168.253.192
 

Пытался получить его через calico pod. Нашел точную сеть и сетевую маску, т.е. 192.168.33.64 / 26 из журнала calico.

 kubectl logs calico-node-h2s9w   -n calico-system | grep cidr
2020-12-14 06:54:50.783 [INFO][18] tunnel-ip-allocator/ipam.go 140:
Attempting to load block cidr=192.168.33.64/26 host="calico-master"

 

Но я хочу избегать просмотра журналов calico pod на каждом узле.
Есть ли лучший способ найти podcidr, назначенный каждому узлу, с помощью одной команды.

Ответ №1:

Вы можете использовать etcdctl , чтобы узнать подробности о блоке подсети, назначенном каждому узлу.

 ETCDCTL_API=3 etcdctl ls /calico/ipam/v2/host/node1/ipv4/block/
 

Приведенный выше пример для узла node1 даст что-то вроде приведенного ниже в качестве вывода.

 /calico/ipam/v2/host/node1/ipv4/block/192.168.228.192-26
 

Комментарии:

1. Спасибо. Но я получаю следующее из этой командной строки calico. calicoctl get ippools NAME CIDR SELECTOR default-ipv4-ippool 192.168.0.0/16 all() Я не получаю cidr, назначенный каждому узлу кластера.

2. Спасибо. может ли это также быть получено с помощью любого вызова api для kube-apiserver?

3. Насколько мне известно, не думаю, что это возможно

Ответ №2:

Похоже, что calico добавляет пользовательский ресурс с именем ipamblocks, и он содержит podcidr, назначенный каждому узлу кластера.

Само имя пользовательского ресурса содержит podcidr узла.

 kubectl get ipamblocks.crd.projectcalico.org 
NAME               AGE
10-42-123-0-26     89d
10-42-187-192-26   89d
 

Команда для получения точных podcidr и nodeip:

 kubectl get ipamblocks.crd.projectcalico.org -o jsonpath="{range .items[*]}{'podNetwork: '}{.spec.cidr}{'t NodeIP: '}{.spec.affinity}{'n'}"
 
 podNetwork: 10.42.123.0/26   NodeIP: host:<node1-ip>
podNetwork: 10.42.187.192/26     NodeIP: host:<node2-ip>