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

时间:2018-07-11 07:59:54

标签: 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?

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

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

当我使用常规帐户运行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

我认为有两种方法:
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

6 个答案:

答案 0 :(得分:6)

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

如果您一直在sudo下运行它,则它可能会将某些文件的所有权更改为不可访问,因此可以(一次)使用

修复此问题。
sudo chown -R $USER $HOME/.kube

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

答案 1 :(得分:3)

修复文件权限

您的kubectl文件很可能不是您的用户所有。

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

sudo chown -R $USER $HOME/.kube

使用sudo运行kubectl

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

sudo -s

然后运行您的kubectl命令

kubectl get pods

kubectl describe <resource_type> <resource_name>

最终退出sudo shell

exit

答案 2 :(得分:2)

我有同样的问题。建议(minikube)在安装后更改〜/ .kube和〜/ .minikube的所有权和权限。

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

答案 3 :(得分:1)

使kubectl在没有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

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

mkdir -p /home/$USER/.kube
cp -i /etc/kubernetes/admin.conf /home/$USER/.kube/config
chown $USER:$USER /home/$USER/.kube/config

答案 4 :(得分:0)

检查是否设置了代理,如果是,则在.bashrc或任何其他环境变量文件中为localhost设置no_proxy。

no_proxy=localhost

答案 5 :(得分:-2)

尝试setuid:

chmod u+s kubectl

kubectl可以读取密钥,但并不对所有人开放。