如何使用“ kubectl”命令代替“ sudo kubectl”

E23*_*235 8 kubernetes kubectl minikube

对于每个命令,kubectl我都需要使用sudo kubectl

我了解安全性观点,但是我正在测试环境中工作,并且希望能够在不使用的情况下使用它sudo

我尝试运行sudo -i并使用root帐户运行,kubectl get pods 但收到了以下消息:

The connection to the server localhost:8080 was refused - did you
specify the right host or port?
Run Code Online (Sandbox Code Playgroud)

我注意到当我在玩https://labs.play-with-k8s.com时,用户是root用户,我可以kubectl自由运行。

我想在Minikube的Ubuntu机器上做同样的事情。

当我kubectl get pods使用普通帐户运行时,收到错误消息:

error: unable to read client-key /home/myuser/.minikube/client.key for minikube due to open /home/myuser/.minikube/client.key: permission denied
Run Code Online (Sandbox Code Playgroud)

我认为有两种方法:
1.授予所有人访问权限/home/myuser/.minikube/
2.授予我的帐户运行权限,kubectl而无需sudo

编辑:
在@Konstantin Vustin请求之后,这是请求的信息:

myuser@ubuntu:/usr/local/bin$ ls -l  $(which kubectl)
-rwxrwxr-x 1 myuser myuser 54308597 Jun 13 05:21 /usr/local/bin/kubectl

myuser@ubuntu:/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

myuser@ubuntu:/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
Run Code Online (Sandbox Code Playgroud)

waq*_*med 13

如果有人想知道 k3s,请使用以下命令:

sudo chmod 644 /etc/rancher/k3s/k3s.yaml
Run Code Online (Sandbox Code Playgroud)

之后,您可以简单地使用kubectl而不是sudo kubectl.


Web*_*ber 7

修复文件权限

您的kubectl文件很可能不属于您的用户。

您可以使用以下命令设置这些权限。

sudo chown -R $USER $HOME/.kube
Run Code Online (Sandbox Code Playgroud)

使用sudo运行kubectl

或者,您可以使用持久性sudo shell以sudo用户身份运行kubectl 。

sudo -s
Run Code Online (Sandbox Code Playgroud)

然后运行你的kubectl命令

kubectl get pods

kubectl describe <resource_type> <resource_name>
Run Code Online (Sandbox Code Playgroud)

终于退出sudo shell

exit
Run Code Online (Sandbox Code Playgroud)

  • 在“sudo chown -R $USER $HOME/.kube”之后,如果仍然收到“permission returned”错误,请退出 shell,打开一个新终端,它应该开始工作 (2认同)

Dav*_*aze 6

您不需要(也不应该)kubectl与一起运行sudokubectl不需要任何特殊权限,并且可以通过HTTPS连接与远程服务器进行完全交互。Kubernetes倾向于接管运行该系统的系统,因此,即使您以某种方式kubectl针对本地apiserver 运行,登录到该节点也很奇怪,并且可以远程执行相同级别的管理。

如果您已在下运行它sudo,则可能已更改了某些文件的所有权以使其不可访问,您可以使用(一次)修复此问题。

sudo chown -R $USER $HOME/.kube
Run Code Online (Sandbox Code Playgroud)

(在您的列表中,~/.kube/cache由root拥有,而不是myuser拥有。)


Eug*_*kin 5

使kubectl能够在没有的情况下运行的Ansible 方法sudo

- 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
Run Code Online (Sandbox Code Playgroud)

或者您可以手动运行此命令:

mkdir -p /home/$USER/.kube
cp -i /etc/kubernetes/admin.conf /home/$USER/.kube/config
chown $USER:$USER /home/$USER/.kube/config
Run Code Online (Sandbox Code Playgroud)