kubectl 无法连接 GKE,失败并显示 x509:由未知授权机构签署的证书

kubectl cannot connect GKE, failing with x509: certificate signed by unknown authority

我无法从我的机器连接到任何 GKE 集群。从远程机器上,它正在工作,但不是从我的机器上,我不明白为什么。如果你们中的一些人有任何想法...

我已经从 gcloud (gcloud components install kubectl) 中安装了 kubectl

我是 运行 gcloud init,然后在现有集群上或在新创建的 gcloud container clusters create my-cluster --preemptible --cluster-version 1.12.7-gke.10 --machine-type n1-standard-1 --disk-size 20 --num-nodes 1

我正在使用 gcloud container clusters get-credentials my-cluster --zone europe-west1-b --project my-project-123456 检索我的凭据,这为我的 kubectl 创建了一个新的上下文。切换到它(使用 kubectx)。

但是当我尝试联系我的集群时(例如 kubectl get pods)它失败并显示以下消息:

Unable to connect to the server: x509: certificate signed by unknown authority

我只是想不通为什么我的本地 kubectl 无法验证 Google CA。 我遵循了我找到的所有资源,尝试了其他集群,在其他 zone/region 中,使用了不同版本的 python(2.7 和 3.6),重新初始化 gcloud,使用了另一个 Google 帐户,另一个版本的 kubectl(1.11、1.12 和 1.14),在 Linux(Mint 19.1 Tessa)中更新我的 CA(sudo update-ca-certificates)。

有没有人遇到过这个问题并找到了解决方案?

简单的方法是 运行 gcloud auth login,正如 documentation 所说:

gcloud auth login - authorize gcloud to access the Cloud Platform with Google user credentials

Obtains access credentials for your user account via a web-based authorization flow. When this command completes successfully, it sets the active account in the current configuration to the account specified. If no configuration exists, it creates a configuration named default. Use gcloud auth list to view credentialed accounts.

这将要求您使用您的帐户登录 Google Cloud SDK 并要求允许访问:

  • View and manage your data across Google Cloud Platform services

  • View and manage your Google Compute Engine resources>

  • View and manage your applications deployed on Google App Engine

过程如何Install SDK with apt-get on Debian and Ubuntu, and over here Installing with yum Red Hat and CentOS

如果有人在能够登录后 运行 参与其中,则此解决方案对我有用

gcloud container clusters get-credentials YOURCLUSTERHERE --zone YOURCLUSTERZONEHERE

填写信息并 运行 后,您应该可以继续了。

这个问题发生在我身上,因为我的证书错误。可能由于 terraform 无法连接到您的远程集群的相关原因而发生。 为了使用已经设置的默认 kubeconfig 凭据,您可以将您的提供商留空。

provider "kubernetes" {
}

你们都知道,我这边的问题(以及为什么我有时连接工作而有时不工作的混乱结果的原因)是在我的专业网络上我有一个 MITM 代理,它用我公司的证书替换 Google 证书。

所以...证书被拒绝kubectl...很正常。