kubectl 从头开始​​连接远程集群

kubectl connect with remote cluster from scratch

我创建了一个 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 访问我的集群并获取我的 pods?

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 accepts either the filename of the CA certificate or an "inline" base64-ed version of the PEM you can see it with:

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

or you can cheat and use --insecure-skip-tls-verify=true to switch off the CA verification for testing things

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