Come posso ottenere il CIDR dei cluster in un pod?

Aug 21 2020

Come posso utilizzare il cluster CIDR (l'intervallo di indirizzi IP contenente tutti gli indirizzi IP del pod) all'interno di un pod? (Automaticamente, senza metterlo manualmente in una variabile d'ambiente, ConfigMap o altrove.)

Esempio di ciò che vorrei:

env:
  - name: CLUSTER_CIDR
    valueFrom: # ??? does a configMap like this exist ??? Or any other source for clusterCidr?
      configMap:
       key: clusterCidr
       name: ...

la mia migliore soluzione parziale:

  - name: POD_IP
    valueFrom:
      fieldRef:
        fieldPath: status.podIP

  - name: GUESSED_CLUSTER_CIDR
    value: $(POD_IP)/16

Posso trovare clusterCidr all'interno di configMap full-cluster-statenello spazio dei nomi kube-systemda qualche parte nel valore della chiave full-cluster-state. Ma questo valore è una stringa contenente json e sembra specifico del fornitore (in currentState.rkeConfig.services.kubeController.clusterCidr). Non riesco a estrarre parte del valore in deployment.yaml. E preferisco avere una soluzione indipendente dal fornitore.

Non ho idea di dove trovare ComponentConfig menzionato nei problemi correlati e non so nemmeno se è ancora in alpha.


problemi relativi a k8s (tutti chiusi senza correzione (chiara)):

  • https://github.com/kubernetes/kubernetes/issues/25533
  • https://github.com/kubernetes/kubernetes/issues/46508

Informazioni sulla ricerca manuale del CIDR del cluster:

  • Come trovi il cluster e il CIDR del servizio di un cluster Kubernetes?
  • vecchio di trovarlo in modo programmatico: Kubernetes - Scopri la gamma di IP del servizio CIDR in modo programmatico
  • utilizzando il CIDR per proxy attendibile, cosa voglio: Kubernetes: aggiungere l'ip interno in ingresso all'ambiente

Risposte

PjoterS Aug 27 2020 at 20:27

Temo che non ci sia una soluzione indipendente dal fornitore per questo. Inoltre ComponentConfigè ancora un alpha featurequindi non c'è abbastanza documentazione adeguata.

Tuttavia, la cosa migliore in questo momento (anche se non è universale) è usare:

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

Quindi puoi creare un nuovo ConfigMapcon il CIDRvalore del cluster che è stato emesso e quindi fare riferimento ad esso nel pod come in questo documento .

Anche se il concetto è lo stesso, dovrai applicare un approccio diverso in ambienti diversi. Purtroppo ad oggi non esiste un'unica soluzione.

Per quanto riguarda le informazioni aggiuntive, ho già fatto un piccolo confronto tra Kubeadme Google Kubernetes Enginesu CIDR. Puoi controllare questo thread per ulteriori informazioni.