kubectl无法连接到服务器:x509:由未知权限签名的证书

时间:2017-09-15 07:42:51

标签: ssl kubernetes kubectl

我在运行kubectl one one machine(windows)

时遇到错误

k8s集群正在CentOs 7 kubernetes集群1.7上运行 主人,工人

这是我的.kube \ config

  
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: REDACTED
    server: https://10.10.12.7:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: system:node:localhost.localdomain
  name: system:node:localhost.localdomain@kubernetes
current-context: system:node:localhost.localdomain@kubernetes
kind: Config
preferences: {}
users:
- name: system:node:localhost.localdomain
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED
  

使用kubeadm和pki目录中的默认证书构建集群

kubectl无法连接到服务器:x509:由未知权限签名的证书

12 个答案:

答案 0 :(得分:3)

另一种解决方案,以防万一:

我的情况:

  • 使用Windows 10
  • 通过Docker Desktop ui 2.1.0.1安装的Kubernetes
  • 安装程序在~/.kube/config上创建了配置文件
  • ~/.kube/configserver中的值是https://kubernetes.docker.internal:6443
  • 使用代理

问题::对该端点的kubectl命令正在通过代理,我在运行kubectl --insecure-skip-tls-verify cluster-info dump后发现了该错误,该命令显示了代理html错误页面。

修正::只是确保该URL不会通过代理,在我的情况下,我使用export no_proxy=$no_proxy,*.docker.internal

答案 1 :(得分:2)

我只是想分享,抱歉我之前没有能够提供这个,因为我刚刚意识到这是造成的

所以在主节点上我们正在运行kubectl代理

kubectl proxy --address 0.0.0.0 --accept-hosts '.*'

我停止了这一点,并且错误消失了。

我现在能够做到

    kubectl get nodes
NAME                    STATUS    AGE       VERSION
centos-k8s2             Ready     3d        v1.7.5
localhost.localdomain   Ready     3d        v1.7.5

我希望这可以帮助那些偶然发现这种情况的人

答案 2 :(得分:2)

运行:

gcloud container clusters get-credentials standard-cluster-1 --zone us-central1-a --project devops1-218400

这里devops1-218400是我的项目名称。将其替换为您的项目名称。

答案 3 :(得分:1)

我的情况是我解决了将kubelet配置复制到我的家庭kube配置中的问题

cat /etc/kubernetes/kubelet.conf>〜/ .kube / config

答案 4 :(得分:1)

之所以发生这种情况,是因为我公司的网络不允许通过其网络进行自签名证书。尝试切换到其他网络

答案 5 :(得分:1)

对于像我一样迟到线程的人,这些答案都没有对您有用,我可能会找到解决方案:

当我将.kube / config文件复制到Windows 10计算机(安装了kubectl)时,我没有将IP地址从127.0.0.1:6443更改为主机的IP地址192.168.x.x。 (正在运行Windows 10机器连接到同一网络上的raspberry pi群集)。确保执行此操作,它可以像解决我的问题一样解决您的问题。

答案 6 :(得分:1)

因此,kubectl不信任集群,因为无论出于何种原因,配置都被弄乱了(包括我的)。要解决此问题,您可以使用openssl从群集中提取证书

openssl.exe s_client -showcerts -connect IP:PORT

IP:PORT应该是您的配置中在server:之后写的内容

将从-----BEGIN CERTIFICATE----------END CERTIFICATE-----(包括这些行)的粘贴内容复制到一个新的文本文件中,例如... myCert.crt如果有多个条目,则将它们全部复制。

现在转到.kube \ config而不是

certificate-authority-data: <wrongEncodedPublicKey>`

放入

certificate-authority: myCert.crt

(假定您将myCert.crt放在配置文件所在的文件夹中) 如果您正确制作了证书,它将信任该群集(尝试重命名该文件,之后便不再信任该文件)。 我希望我知道对证书颁发机构数据进行编码的方式,但是在搜索了几个小时之后,我求助于此解决方案,回头看我仍然认为它更优雅。

答案 7 :(得分:0)

如果出现错误,您应该导出包含证书的所有kubecfg。 kops export kubecfg "your cluster-nameexport KOPS_STATE_STORE=s3://"paste your S3 store"

现在您应该能够访问并查看群集的资源。

答案 8 :(得分:0)

在GCP上

检查:gcloud版本

-localMacOS#gcloud版本

运行: --- localMacOS#gcloud容器集群获取凭据'clusterName'\ --zone = us-'zoneName'

从控制台获取clusterName和zoneName -在这里:https://console.cloud.google.com/kubernetes/list

ref:.x509 @GCP #Kubernetes上的市场部署

答案 9 :(得分:0)

以root用户身份运行$ kubectl get nodes时遇到相同的错误。我通过将kubelet.conf导出到环境变量来修复它。

$ export KUBECONFIG=/etc/kubernetes/kubelet.conf
$ kubectl get nodes

答案 10 :(得分:0)

这是一个古老的问题,但是如果这也可以帮助其他人,则是另一个可能的原因。

让我们假设您已经用用户x部署了Kubernetes。如果.kube目录位于/ home / x用户下,并且您以root或y用户连接到该节点,则会出现此错误。

您需要切换到用户配置文件,以便kubernetes可以从.kube目录中加载配置。

更新:从主节点复制本地PC上的(numberOfJokers-- > 0 || cardsTable[i + c] == 1)文件内容时,请确保使用有效IP替换负载均衡器的主机名。就我而言,问题与dns查找有关。

希望这会有所帮助。

答案 11 :(得分:0)

我收到这个是因为我没有连接到办公室的 VPN