如何使用 "kubectl" 命令代替 "sudo kubectl"
How to use "kubectl" command instead of "sudo kubectl"
对于带有 kubectl
的每个命令,我需要使用 sudo kubectl
。
我理解安全观点,但我正在测试环境中工作,我希望能够在没有 sudo
的情况下使用它。
我尝试 运行 sudo -i
并使用根帐户 运行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. 在没有 sudo
的情况下将我的帐户权限授予 运行 kubectl
编辑:
根据@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
试试 setuid:
chmod u+s kubectl
密钥可以被kubectl读取,但不对所有人开放。
修复文件权限
很可能您的 kubectl 文件不属于您的用户。
您可以使用以下命令设置这些权限。
sudo chown -R $USER $HOME/.kube
运行 kubectl 与 sudo
或者您可以 运行 kubectl 作为 sudo 用户使用 persistent sudo shell.
sudo -s
然后 运行 你的 kubectl 命令
kubectl get pods
kubectl describe <resource_type> <resource_name>
终于退出sudo shell
exit
您不需要(也不应该)运行 kubectl
和 sudo
。 kubectl
不需要任何特殊权限,并且完全通过 HTTPS 连接与远程服务器进行交互。 Kubernetes 倾向于接管它 运行 所在的系统,所以即使你以某种方式 运行ning kubectl
对抗本地 apiserver,登录到节点也很奇怪而且你可以远程执行相同级别的管理。
如果您运行在 sudo
下安装它,它可能已将某些文件的所有权更改为不可访问,您可以使用
解决此问题(一次)
sudo chown -R $USER $HOME/.kube
(在您的列表中,~/.kube/cache
属于 root,而非 myuser。)
我遇到了同样的问题。建议(通过 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
检查是否设置了代理,如果是,则为本地主机和集群服务器 IP 设置 no_proxy(您可以在 ~/.kube/config 文件中找到 服务器:https://192.168.127.3:6443) 在 .bashrc 或任何其他环境变量文件中。
no_proxy=localhost, 192.168.127.3
使 kubectl
能够在没有 sudo
的情况下 运行 的 Ansible 方法:
- 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
最简单的方法是创建别名:
别名 kubectl='sudo kubectl'
对于带有 kubectl
的每个命令,我需要使用 sudo kubectl
。
我理解安全观点,但我正在测试环境中工作,我希望能够在没有 sudo
的情况下使用它。
我尝试 运行 sudo -i
并使用根帐户 运行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. 在没有 sudo
kubectl
编辑:
根据@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
试试 setuid:
chmod u+s kubectl
密钥可以被kubectl读取,但不对所有人开放。
修复文件权限
很可能您的 kubectl 文件不属于您的用户。
您可以使用以下命令设置这些权限。
sudo chown -R $USER $HOME/.kube
运行 kubectl 与 sudo
或者您可以 运行 kubectl 作为 sudo 用户使用 persistent sudo shell.
sudo -s
然后 运行 你的 kubectl 命令
kubectl get pods
kubectl describe <resource_type> <resource_name>
终于退出sudo shell
exit
您不需要(也不应该)运行 kubectl
和 sudo
。 kubectl
不需要任何特殊权限,并且完全通过 HTTPS 连接与远程服务器进行交互。 Kubernetes 倾向于接管它 运行 所在的系统,所以即使你以某种方式 运行ning kubectl
对抗本地 apiserver,登录到节点也很奇怪而且你可以远程执行相同级别的管理。
如果您运行在 sudo
下安装它,它可能已将某些文件的所有权更改为不可访问,您可以使用
sudo chown -R $USER $HOME/.kube
(在您的列表中,~/.kube/cache
属于 root,而非 myuser。)
我遇到了同样的问题。建议(通过 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
检查是否设置了代理,如果是,则为本地主机和集群服务器 IP 设置 no_proxy(您可以在 ~/.kube/config 文件中找到 服务器:https://192.168.127.3:6443) 在 .bashrc 或任何其他环境变量文件中。
no_proxy=localhost, 192.168.127.3
使 kubectl
能够在没有 sudo
的情况下 运行 的 Ansible 方法:
- 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
最简单的方法是创建别名:
别名 kubectl='sudo kubectl'