Come posso ottenere il CIDR dei cluster in un pod?
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-state
nello spazio dei nomi kube-system
da 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
Temo che non ci sia una soluzione indipendente dal fornitore per questo. Inoltre ComponentConfig
è ancora un alpha feature
quindi 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 ConfigMap
con il CIDR
valore 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 Kubeadm
e Google Kubernetes Engine
su CIDR. Puoi controllare questo thread per ulteriori informazioni.