Kubeadm: Bessere Usability für das Join-Token

Erstellt am 4. Nov. 2017  ·  22Kommentare  ·  Quelle: kubernetes/kubeadm

/freundliches Feature
@kubernetes/sig-cli
Was ist passiert :
Ich habe festgestellt, dass es nicht so einfach ist, neue Maschinen hinzuzufügen, wenn Sie keine ursprüngliche Joun-String-Ausgabe von kubeadm haben. "Gibt es eine Möglichkeit, den gesamten Join-Befehl zu generieren? Ich habe das Gefühl, dass ich den gesamten Cluster zurücksetzen muss, um die magische Zeichenfolge " @alexellis

Was Sie erwartet haben, zu passieren :
Ebenso können Sie in Docker Swarm dem Master jederzeit sagen, dass er einen kopier- und einfügbaren Join-String drucken soll, um ihn hinzuzufügen.. oder zu assimilieren? mehr Maschinen.

Beispieleingabe:

kubeadm token string

Beispielausgabe:

kubeadm join --token TOK MASTER_IP:6443 --discovery-token-ca-cert-hash sha256:HASH

Müssen wir noch etwas wissen? :
Du bist toll!

(Nachverfolgung von: https://github.com/kubernetes/kubernetes/pull/41663)
@luxas @mattmoyer @jamiehannaford

areUX prioritimportant-soon

Hilfreichster Kommentar

@zcalusic der aktuelle Weg ist, den Hash mit OpenSSL wie folgt zu berechnen (auf dem Master ausführen oder wo immer Sie eine Kopie von /etc/kubernetes/pki/ca.crt ):

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

Alle 22 Kommentare

+1 für so etwas.

Einige Riffs zu dieser Idee:

  • Ein neuer kubeadm ca-cert-hash Befehl (Name TBD), der nur den aktuellen CA-Hash ausgibt. Dies wäre im Grunde dasselbe wie der Befehl openssl wir in den kubeadm join Dokumenten angeben .
  • Fügen Sie ein --print-join-command Flag für kubeadm token create , das den gesamten Join-Befehl genau wie kubeadm init ausgibt. Dies würde die Automatisierung hoffentlich vereinfachen, indem während der Bereitstellung etwas wie kubeadm token create --print-join-command >> worker_init.sh .

  • Ein neuer Befehl kubeadm token get <token id> , der das vollständige Token mit der ID abruft, mit einem --print-join-command Flag, um optional den vollständigen Join-Befehl statt nur des Tokens zu drucken.

Danke, dass du mich darin markiert hast. Machen Sie sich eine Notiz von der UX von Docker Swarm - Sie können jederzeit docker swarm join-token worker und einen Befehl zum Einfügen in einen Worker oder zum Senden über SSH erhalten. Mit Kubeadm ist es so schwer, den Cluster buchstäblich abzureißen, um einen neuen Knoten hinzuzufügen - ich bin ziemlich sicher mit CLIs, also bin ich sicher, dass ich nicht der einzige bin.

Außerdem ist die Init-Ausgabe so umfangreich, dass Sie nicht wirklich nur den Join-Befehl abrufen und irgendwo verstecken können ... derzeit greife ich auf kubeadm init ... | grep 'kubeadm join --token' > /some_file .
Wäre cool, einen leisen Modus zu haben, in dem das einzige Ding auf stdout der Join-Befehl ist.

Wie auch immer, was ist der Weg, um diesen ca-cert-hash jetzt zu bekommen? Natürlich ist die Ausgabe von kubeadm init zu diesem Zeitpunkt schon lange nicht mehr vorhanden ... und ich habe sie nicht gespeichert, weil ich erwartet hatte, dass diese Informationen später bei Bedarf leicht extrahiert werden können.

Ich habe es geschafft, ein Join-Token mit kubeadm token list und einem anderen Knoten mit kubeadm join --token beigetreten zu sein, aber es sagt:

[validation] WARNING: using token-based discovery without DiscoveryTokenCACertHashes can be unsafe (see https://kubernetes.io/docs/admin/kubeadm/#kubeadm-join).
[validation] WARNING: Pass --discovery-token-unsafe-skip-ca-verification to disable this warning. This warning will become an error in Kubernetes 1.9.

Wie übergebe ich diesen Parameter, bevor es zu einem Fehler kommt? Danke für jede Hilfe!

@zcalusic der aktuelle Weg ist, den Hash mit OpenSSL wie folgt zu berechnen (auf dem Master ausführen oder wo immer Sie eine Kopie von /etc/kubernetes/pki/ca.crt ):

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

Danke @mattmoyer für den Hinweis. Dein Oneliner hat perfekt funktioniert.

Natürlich muss ich zustimmen, dass --print-join-command eine viel bessere Benutzererfahrung bieten würde.

Stimme --print-join-command

Wir haben im SIG-Meeting festgestellt, dass wir sowohl mit https://github.com/kubernetes/kubernetes/pull/55468 _und_ dieser Funktion fortfahren werden.
In welcher Form genau werden wir gleich sehen

Dies wurde beim Zoom-Call vom 21. November 2017 diskutiert; Minuten für diesen Anruf finden Sie unter https://docs.google.com/document/d/1deJYPIF4LmhGjDVaqrswErIrV7mtwJgovtLnPCDxP7U/edit#

Ich habe mir das gestern erst kurz angeschaut, aber noch nicht daran gearbeitet :)

Fügen Sie ein --print-join-command-Flag für kubeadm token create hinzu, das den gesamten Join-Befehl genau wie kubeadm init ausgibt. Dies würde es hoffentlich leicht machen, herumzuautomatisieren, indem während der Bereitstellung etwas wie kubeadm token create --print-join-command >> worker_init.sh ausgeführt wird.

Wenn wir diesen bevorzugen, denke ich, dass Bootstrap token create bereits dieselbe Logik enthält. Das können wir hier gebrauchen.

Ein neuer Befehl kubeadm token getdie das vollständige Token mit der ID erhält, mit einem --print-join-command-Flag, um optional den vollständigen Join-Befehl statt nur des Tokens zu drucken.

Ich persönlich bevorzuge dieses. Aber anscheinend brauchen beide Ideen mehr Kontext bei der Implementierung, zB brauchen wir MasterConfiguration, um die Adresse des Apiserver-Werbung zu erhalten. Derzeit verfügen die token create nicht über die Konfiguration.

UPDATE: Vielleicht können wir beide Ideen umsetzen? @luxas @mattmoyer

Ich habe nur die erste Idee in https://github.com/kubernetes/kubernetes/pull/56185 umgesetzt. Ich bin auch nicht dagegen, die Idee von kubeadm get umzusetzen, aber wir haben wenig Zeit.

Anstatt ein neues kubeadm get erstellen, sollten wir IMO den Hash/die kubeadm-Join-Anweisung am Ende des bereits vorhandenen kubeadm token list ausgeben.

Ich denke, kubeadm token list --print-join-command wäre toll!

Ich mag diese Idee @luxas. Ich denke, wir könnten es weniger ausführlich machen, ich finde, ich tippe sehr lange Flags kubeadm Vergleich zur docker CLI.

kubeadm token list --verbose

kubeadm token list --tokens

kubeadm token list --join-token

kubeadm token list --verbose|-v funktioniert bei mir auch

Hey, ist das fertig?
Wie kann ich das Token erhalten, um neuen Knoten in meinem Cluster beizutreten?

@tzurE es ist zusammengeführt, aber noch nicht veröffentlicht, es wird Teil von Kubernetes 1.9 sein, das Ende dieser Woche veröffentlicht werden soll .

Mit der neuen Funktionalität können Sie diesen Befehl ausführen, um Knoten beizutreten:

# on a master node (or any node with admin access to your cluster)
$ kubeadm token create --print-join-command
kubeadm join --token 447067.20b55955bd6abe6c 192.168.99.100:8443 --discovery-token-ca-cert-hash sha256:17023a5c90b996e50c514e63e161e46f78be216fd48c0c3df3be67e008b28889
# on the new node (copy-pasted from the output above)
$ kubeadm join --token 447067.20b55955bd6abe6c 192.168.99.100:8443 --discovery-token-ca-cert-hash sha256:17023a5c90b996e50c514e63e161e46f78be216fd48c0c3df3be67e008b28889

Nett, danke.
gibt es zwischenzeitlich eine lösung? Eine Möglichkeit, es zu extrahieren, ohne die regulären Befehle zu verwenden?

@tzurE siehe diesen Kommentar: https://github.com/kubernetes/kubeadm/issues/519#issuecomment -343192126

Hallo @mattmoyer

Der Befehl "kubeadm token create --print-join-command" funktioniert in 1.9 hervorragend. Aber ich erhalte den NotReady-Status auf meinem Knoten. Ich verwende Ubuntu 16.04 mit k8s 1.9.0. Irgendwelche Vorschläge?

@siddharthjoshi745 Stellen Sie ein Pod-Netzwerk wie Weave Net
Bitte kommentiere jedoch keine alten Probleme, sondern öffne stattdessen ein neues, wenn du etwas falsch gefunden hast, oder bitte um Hilfe auf Slack
Ich wünsche ihnen einen wunderbaren Tag!

Wie können wir nur einen Wert ausgeben? Sagen Sie das Token oder das Discovery-Token sha usw..

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen