Für jeden Befehl mit kubectl
muss ich Sudo kubectl
verwenden.
Ich verstehe die Sicherheitsperspektive, arbeite aber an einer Testumgebung und möchte sie ohne Sudo
verwenden können.
Ich habe versucht, Sudo -i
auszuführen und das root-Konto zu verwenden, umkubectl get pods
auszuführen, aber ich erhielt:
The connection to the server localhost:8080 was refused - did you
specify the right Host or port?
Ich habe bemerkt, dass der Benutzer root ist und ich kubectl
frei ausführen kann, wenn ich mit https://labs.play-with-k8s.com spielte.
Ich wollte mit meinem Minikube dasselbe auf meiner Ubuntu-Maschine haben.
Wenn ich kubectl get pods
mit meinem regulären Konto ausführte, erhielt ich den Fehler:
error: unable to read client-key /home/myuser/.minikube/client.key for minikube due to open /home/myuser/.minikube/client.key: permission denied
Ich nahm an, dass es zwei Möglichkeiten gibt:
1. Geben Sie jedem Zugriff auf /home/myuser/.minikube/
2. Erteilen Sie meinem Konto die Berechtigung, kubectl
ohne Sudo
auszuführen.
BEARBEITEN:
Nach einer Anfrage von @Konstantin Vustin werden hier die gewünschten Informationen angezeigt:
[email protected]:/usr/local/bin$ ls -l $(which kubectl)
-rwxrwxr-x 1 myuser myuser 54308597 Jun 13 05:21 /usr/local/bin/kubectl
[email protected]:/usr/local/bin$ ls -la ~ | grep kube
drwxr-xr-x 5 myuser myuser 4096 Jun 17 02:25 .kube
drwxrwxr-x 10 myuser myuser 4096 Jun 13 05:18 .minikube
[email protected]:/usr/local/bin$ ls -l ~/.kube
total 24
drwxr-xr-x 3 root root 4096 Jun 13 05:26 cache
-rw------- 1 myuser myuser 911 Jun 13 05:27 config
drwxrwxr-x 3 myuser myuser 4096 Jul 11 01:37 http-cache
Sie können als Sudo-Benutzer mit einer persistenten Sudo Shell kubectl arbeiten.
Sudo -s
führen Sie dann Ihre kubectl-Befehle aus
kubectl get pods
kubectl describe <resource_type> <resource_name>
endlich die Sudo Shell verlassen
exit
Sie müssen kubectl
nicht mit Sudo
ausführen (und sollten dies auch nicht). kubectl
benötigt keine besonderen Berechtigungen und interagiert vollständig mit einem Remote-Server über eine HTTPS-Verbindung. Kubernetes neigt dazu, das System zu übernehmen, auf dem es läuft, selbst wenn Sie kubectl
gegen einen lokalen Apiserver ausgeführt haben, wäre es völlig seltsam, am Knoten angemeldet zu sein, und Sie könnten die gleiche Administrationsebene remote ausführen.
Wenn Sie es unter Sudo
ausgeführt haben, hat sich möglicherweise der Besitz einiger Dateien geändert, sodass Sie nicht mehr darauf zugreifen können. Sie können dies (einmalig) mit beheben
Sudo chown -R $USER $HOME/.kube
(In Ihrem Eintrag befindet sich ~/.kube/cache
im Besitz von root, nicht von myuser.)
Ich hatte das gleiche Problem. Es wird empfohlen (von minikube), den Besitz und die Berechtigungen von ~/.kube und ~/.minikube nach der Installation zu ändern.
Sudo mv /root/.kube $HOME/.kube # this will write over any previous configuration
Sudo chown -R $USER $HOME/.kube
Sudo chgrp -R $USER $HOME/.kube
Sudo mv /root/.minikube $HOME/.minikube # this will write over any previous configuration
Sudo chown -R $USER $HOME/.minikube
Sudo chgrp -R $USER $HOME/.minikube
Ein möglicher Weg, um kubectl
ohne Sudo
laufen zu lassen:
- name: Setup kubeconfig for user
become: no
command: "{{ item }}"
with_items:
- mkdir -p /home/$USER/.kube
- Sudo cp -i /etc/kubernetes/admin.conf /home/$USER/.kube/config
- Sudo chown $USER:$USER /home/$USER/.kube/config
Oder Sie können diese Befehle manuell ausführen:
mkdir -p /home/$USER/.kube
cp -i /etc/kubernetes/admin.conf /home/$USER/.kube/config
chown $USER:$USER /home/$USER/.kube/config
Prüfen Sie, ob der Proxy gesetzt ist. Wenn ja, setzen Sie no.proxy für localhost in .bashrc oder einer anderen Umgebungsvariablendatei.
no_proxy=localhost