Das Kernteam unseres Kunden verwendet kubeconfig mit Client-Go-Authentifizierung und führt ein Python-Skript aus, um ein Token zu erhalten. Alle verwenden Macs. Ich verwende Windows mit mingw64. Egal, wie ich versuche, den Pfad zu diesem Skript anzugeben: Schrägstriche mit Laufwerksbuchstaben zwischen den Schrägstrichen oder im klassischen Windows-Stil (obwohl dieser in PATH vorhanden ist), selbst wenn ich das Skript in dasselbe Verzeichnis wie die Kube-Konfigurationsdatei lege und keinen Pfad angebe, erhalte ich Unable to connect to the server: getting credentials: exec: executable <our script name> not found
. Ich kann dieses Skript problemlos ausführen, ohne den Pfad über die CLI anzugeben. Ich versuche nur kubectl get pods
. Relevanter user:
Ausschnitt:
- name: someName
user:
exec:
apiVersion: client.authentication.k8s.io/v1beta1
args:
- --creds
- '%userprofile%\path\to\credentials.properties'
command: path\to\script
env: null
Frage: Wie gebe ich eine ausführbare Datei im Exec-Abschnitt von Kubeconfig in Windows an?
Antwort1
Kubernetes client-go verfügt bereits über Hilfsmethoden zur Authentifizierung mit kubeconfig. Es enthält zwei Varianten mit guten Beispielen:
- Beispiel für eine Authentifizierung außerhalb des Clusters
- Beispiel für die Clusterauthentifizierung
Ich würde empfehlen, zwei integrierte Hilfsmethoden zu verwenden, anstatt eine benutzerdefinierte Variante zu erstellen. Vielleicht möchten Sie ein Argument hinzufügen, damit Sie zwischen den beiden wechseln können, z. B. „Out-of-Cluster“ verwenden, wenn es lokal unter Windows ausgeführt wird, und „In-Cluster“, wenn die App (wenn Ihr Code eine App ist?) als Dienst im Cluster ausgeführt wird.
Antwort2
Es gibt nur wenig Dokumentation zur Verwendung von kubeconfig unter Windows, daher bin ich nach viel Ausprobieren und ein wenig Hilfe durch den Kommentar von @mdaniel auf die folgende Lösung gekommen:
Ich habe eine Windows-Batchdatei erstellt, die eine Zeile enthält:
@python <path-to-script> %*
und habe auf diese Datei mit dem vollständigen Pfad darunter command:
verwiesen exec:
.
Ich musste es verwenden %*
, weil das Python-Skript Parameter annimmt.
@
verhindert, dass Windows diesen Befehl bei der Batchausführung in der Konsole wiederholt.
Ich konnte das nicht tun, command: <path-to-python>\python <path-to-script>
weil Kubernetes immer noch bemängelte, dass es die ausführbare Datei mit diesem Namen nicht finden könne.
Außerdem als Randbemerkung: Wenn Sie Windows-Umgebungsvariablen wie %userprofile%
in kubeconfig verwenden, müssen diese in einfachen Anführungszeichen referenziert werden.