kubectl从头开始连接远程集群

时间:2018-05-12 09:57:10

标签: kubernetes rbac kubectl

我创建了local Kubernetes cluster using ansible。 一切都在运行,但现在我尝试将我的kubectl与群集连接(在VM中)。

我的群集正在https://IP:6443

上运行

首先我得到了:

$ kubectl get pods
The connection to the server localhost:8080 was refused - did you specify the right host or port?

所以我尝试了this solution

kubectl config set-credentials kubeuser/IP --username=kubeuser --password=kubepassword
kubectl config set-cluster IP --insecure-skip-tls-verify=true --server=https://IP:6443
kubectl config set-context default/IP/kubeuser --user=kubeuser/IP --namespace=default --cluster=IP
kubectl config use-context default/IP/kubeuser

再次尝试:

$ kubectl get pods
Error from server (Forbidden): pods is forbidden: User "system:anonymous" cannot list pods in the namespace "default"

我知道我需要创建一个clusterrolebinding,但我仍然需要一个初始的" admin-ownership"为了那个原因?我错过了哪一步或做错了所以我可以使用kubectl访问我的群集并获取我的pod?

1 个答案:

答案 0 :(得分:0)

Kubectl是一个用于远程管理Kubernetes集群的命令行工具。

Kubectl正在使用您必须连接到群集的配置文件。由于许多重大或微小的更改,您的配置文件可能不一致。如果对问题的进一步分析没有显示出良好的结果,请尝试rm -f~ / .kube / config并从头开始。

正如我所见,您怀疑问题出在自签名证书上。可能需要在客户端上更新群集根证书颁发机构(CA),然后刷新本地列表以获取有效证书。

转到本地CA目录,检查ca.crt文件是否存在,然后将其复制到客户端。 对于客户端,请执行以下操作:

sudo cp ca.crt /usr/local/share/ca-certificates/kubernetes.crt
sudo update-ca-certificates

我同意Matthew L. Daniel提供的建议:

  

cluster:tag接受CA证书的文件名或   PEM的“inline”base64-ed版本可以通过以下方式看到:

kubectl config set-cluster $foo --certificate-authority=... --embed-certs=true
  

或者您可以作弊并使用--insecure-skip-tls-verify=true进行切换   关闭测试的CA验证

如果您没有在Kubernetes安装期间生成证书,我建议从Kubernetes TLS documentation开始。 您可以查看Kubernetes云提供商(如GKE或AKS) - 它们可以远程创建包含所有证书的Kubernetes配置文件,然后将其下载到本地〜/ .kube目录。 如果您将其用于本地安装,这可能会解决配置的一些问题。 它就像一个魅力,节省了大量的时间。如果您仍未决定,请在此处提供kubectl config view的输出,以便我们帮助您解决问题。 (请在发布此处之前删除敏感数据。)