Puncte:0

Adresele IP duplicate ale podului kubernetes - se presupune că ip-urile podului sunt unice la nivel de cluster?

drapel de

Am citit asta în doc:

Fiecare Pod primește propria sa adresă IP... podurile de pe un nod pot comunica cu toate podurile de pe toate nodurile fără NAT.

Ar trebui să citesc asta ca „fiecare pod își are propria cluster unic lat Adresa IP"?

Am presupus că acesta este cazul, dar motivul pentru care întreb este că am observat poduri cu aceleași adrese IP doar pe noduri diferite imediat după ce am inițializat un nou cluster urmând instrucțiunile Aici. Clusterul are 3 noduri test-vm{4,5,6}, cu test-vm4 ca master, rulând pe o rețea locală simulată 10.1.4.0/16. Am folosit flanel pentru CNI și l-am configurat astfel:

kubectl patch node test-vm{4..6} -p '{ "spec": { "podCIDR": "10.244.0.0/16" } }' # A trebuit să facă acest lucru pentru că nu l-am setat pe cluster init. Consultați https://stackoverflow.com/a/60944959/2038383.
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

Observați că 3 IP-uri apar de două ori pentru 2 poduri diferite - 10.244.0.{2,3,4}:

$ kubectl obține pods --all-namespaces -o wide -w
SPAȚIUL DE NUMELE NUMELE STAREA PREGĂTITĂ Vârsta REPORNĂȚI NOD IP NOMINAT PORȚI DE PREGĂTIRE
curl implicit 1/1 Alergare 0 14m 10.244.0.4 test-vm6 <niciuna> <niciuna>
implicit my-nginx-cf54cdbf7-d6s9m 1/1 În rulare 0 17m 10.244.0.3 test-vm6 <niciunul> <niciunul>
implicit my-nginx-cf54cdbf7-twrvw 1/1 Rulează 0 17m 10.244.0.2 test-vm6 <niciunul> <niciunul>
implicit my-nginx-cf54cdbf7-xpff6 1/1 Rulează 0 17m 10.244.0.4 test-vm5 <niciunul> <niciunul>
implicit my-nginx-more-5f79688b9d-4c9jk 1/1 Rulează 0 3m10s 10.244.0.6 test-vm5 <niciunul> <niciunul>
implicit my-nginx-more-5f79688b9d-7htsn 1/1 Rulează 0 3m18s 10.244.0.5 test-vm5 <niciunul> <niciunul>
implicit my-nginx-more-5f79688b9d-gqz9b 1/1 Rulează 0 3m4s 10.244.0.7 test-vm5 <niciunul> <niciunul>
implicit nginx1 1/1 Rulează 0 9s 10.244.0.8 test-vm5 <niciun> <niciun>
kube-system coredns-64897985d-kt82d 1/1 Rulare 0 41m 10.244.0.2 test-vm5 <niciunul> <niciunul>
kube-system coredns-64897985d-rd7gz 1/1 Rulare 0 41m 10.244.0.3 test-vm5 <niciunul> <niciunul>
kube-system etcd-test-vm4 1/1 Rulează 0 41m 10.1.4.36 test-vm4 <niciunul> <niciunul>
kube-system kube-apiserver-test-vm4 1/1 Rulare 0 41m 10.1.4.36 test-vm4 <niciunul> <niciunul>
kube-system kube-controller-manager-test-vm4 1/1 Rulare 0 41m 10.1.4.36 test-vm4 <niciunul> <niciunul>
kube-system kube-flannel-ds-snkhk 1/1 Alergare 0 29m 10.1.4.38 test-vm6 <niciunul> <niciunul>
kube-system kube-flannel-ds-wtmqg 1/1 Running 0 29m 10.1.4.37 test-vm5 <niciunul> <niciunul>
kube-system kube-flannel-ds-x46xw 1/1 Running 0 29m 10.1.4.36 test-vm4 <niciunul> <niciunul>
kube-system kube-proxy-mjl69 1/1 Rulare 0 41m 10.1.4.37 test-vm5 <niciunul> <niciunul>
kube-system kube-proxy-vz2p2 1/1 Rulare 0 41m 10.1.4.36 test-vm4 <niciunul> <niciunul>
kube-system kube-proxy-xg4gg 1/1 Rulare 0 41m 10.1.4.38 test-vm6 <niciunul> <niciunul>
kube-system kube-scheduler-test-vm4 1/1 Rulare 0 41m 10.1.4.36 test-vm4 <niciunul> <niciunul>

În ciuda a ceea ce spun documentele, toate podurile nu pot comunica între ele. Ele pot comunica doar cu pod-urile de pe același nod și provoacă erori. Mă întreb dacă acesta este un semnal roșu că ceva nu este în regulă sau nu și căutăm clarificări cu privire la acest punct despre unicitatea adresei IP a podului.

drapel in
Cred că acestea sunt IP-ul nodului, ceea ce s-ar întâmpla cu `hostNetwork: true`; poti confirma asta?
spinkus avatar
drapel de
Rețeaua LAN a nodurilor este 10.1.4.0/24. Celălalt interval de rețea în care se află pod-urile este 10.244.0.0/16 și este creat de flannel și are legătură cu un alt dispozitiv virtual sau cu o regulă de rutare iptables sau cu niște prostii pe care încă nu le înțeleg. `kubectl obține nodul test-vm4 -o json | jq .spec.podCIDR` dă `10.244.0.0/16"`. Există mențiune despre "hostNetwork: true" în fișierul `kube-flannel.yml` pe care l-am folosit pentru a instala flannel CNI. Nu sunt sigur ce înseamnă acest lucru încă.
spinkus avatar
drapel de
@mdaniel oh, acum înțeleg mai bine: Flanneld DaemonSet folosește rețeaua gazdă (cum ar trebui), dar rețeaua pod este vxlan pe 10.244.0.0/16. Deci nu, IP-ul podului nu este o rețea gazdă. Este vxlan implicit.
Puncte:1
drapel de

Mi-am dat seama. In primul rand, da se presupune că podurile au o adresă IP unică la nivel de cluster. Este fundamental pentru modul în care funcționează k8s. Documentul k8s legat este o porcărie și lasă întrebarea puțin deschisă. Surse mai bine formulate:

Platforme precum Kubernetes presupun că fiecare container (pod) are un IP unic, rutabil în interiorul clusterului. Avantajul acestui model este că elimină complexitățile de mapare a porturilor care provin din partajarea unui singur IP gazdă. -- https://github.com/flannel-io/flannel#networking-details

Una dintre cerințele de bază ale modelului de rețea Kubernetes este ca fiecare pod să aibă propria sa adresă IP și ca fiecare pod din cluster să poată vorbi cu acesta folosind această adresă IP. -- https://ronaknathani.com/blog/2020/08/how-a-kubernetes-pod-gets-an-ip-address/


Acum întrebarea este de ce li se atribuie podurilor mele aceleași adrese IP? Practic, a face acest lucru la flannel CNI init is gresit ( Am copiat această sugestie de pe acest ASA raspuns):

kubectl patch node test-vm{4..6} -p '{ "spec": { "podCIDR": "10.244.0.0/16" } }' # A trebuit să facă acest lucru pentru că nu l-am setat pe cluster init.

PodCIDR-ul trebuie să fie unic pentru fiecare nod. Acesta este modul în care k8s asigură că fiecare pod programat are o adresă IP unică - fiecare nod atribuie o anumită IP în podCIDR-ul său. Vezi asta o postare grozavă pe blog care o explică. Cele de mai sus nu sunt echivalente cu setarea --pod-network-cidr pe kubeadm init cum ar trebui să faci. The --pod-network-cidr opțiunea din linia de comandă îi corespunde de fapt ClusterConfiguration networking.podSubnet. Deci, dacă trebuie să o setați după faptul că eliminați flanela, apoi editați configurația clusterului (nu am testat de fapt această abordare, doar am re-initd cu --pod-network-cidr set):

kubectl delete -f kube-flannel.yml
kubectl editați cm -n kube-system kubeadm-config # și adăugați setarea.

Odată setat:

planul de control va aloca automat CIDR-uri pentru fiecare nod. -- https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-init/.

Dacă aveți de gând să setați fiecare nod podCIDR setarea trebuie să fie unică pentru fiecare nod. Ar trebui să evitați setarea manuală dacă se așteaptă ca nodurile să vină și să plece dinamic - care este scenariul normal.


ACTUALIZAȚI: Metoda de mai sus de setare a ClusterConfiguration networking.podSubnet după init nu funcționează de fapt. Nici măcar nu funcționează dacă de-înregistrați și reînregistrați toate nodurile lucrătorilor, ceea ce este enervant.AFAIK singura modalitate de a face setarea automată a nodului podCIDR să funcționeze este să vă eliminați clusterul și să reinițializați cu --pod-network-cidr set sau networking.podSubnet setat în configurația inițială (vezi --config opțiune).

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.