我从 kubernetes 仪表板设置了一个集群,在专用网络中有 2 个节点。
我已经公开了从容器实例映射到端口 8545 的端口 80。 因此,当我访问外部 IP 时,我可以查看我的应用程序。
我在我的机器上设置了
kubectl
并运行以下命令
gcloud container clusters get-credentials <cluster name> --zone <my-zone> --project <project name>
但是,当我运行这个时,我收到错误
$ kubectl get deployments
Unable to connect to the server: dial tcp 35.194.113.118:443: i/o timeout
在 GCP 仪表板上,我看到集群的以下内容
Endpoint
35.194.113.118
旁边还有一个查看凭据选项,其中包含证书文件以及用户名和密码
所以,我尝试设置它
kubectl config set-credentials cluster-admin --username=admin --password=<my password>
我再次尝试了 kubectl 命令,但是遇到了相同的超时错误。 有人可以帮忙解决这个问题吗?
我通过编辑集群并选择
Add Authorized network
添加了授权网络。
这似乎已经解决了问题。
https://cloud.google.com/kubernetes-engine/docs/how-to/private-clusters
虽然OP解决了这个问题,但我会尽力为其他人澄清。
问题源于集群是私有集群,因此无法从任何 IP 访问。 Google Cloud Shell(或来自云提供商的任何 shell)与集群不在同一 IP 范围内。我们必须允许集群接受来自可信来源(我们的 IP 范围)的请求。
为了能够正确连接到 kubernetes 集群,我们必须执行以下操作:
这应该可以解决各种 kubectl 命令的超时问题。
PS: 对于步骤 3,要确定现有的 auth_nets,建议使用以下命令:
gcloud container clusters describe private-cluster-1 --region europe-west1 --format "flattened(masterAuthorizedNetworksConfig.cidrBlocks[])"
我发现使用它很有帮助:
gcloud container clusters describe private-cluster-1 --region europe-west1 | grep master