我在 Kubernetes 中定义了一些服务,我想从与我的 k8s 集群位于同一网络上的 Google Compute VM 访问这些服务。
我见过此链接可以询问 k8s API 服务器如何访问服务;问题是我无法连接到 API 服务器:
vm2:~$ kubectl proxy &
[2] 1230
vm2:~$ curl http://localhost:8001/api/v1/namespaces/default/services/proxy/proxy
I1102 09:53:25.861513 1104 logs.go:41] http: proxy error: dial tcp [::1]:8080: getsockopt: connection refused
我发现它的 API 服务器地址似乎有误:
vm2:~$ kubectl cluster-info
Kubernetes master is running at http://localhost:8080
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
我的 API 服务器地址实际上是109.x.x.x
。手动指定 API 服务器可以让我获得正确的服务器,但它声称没有资源:
vm2:~$ kubectl -s 109.x.x.x describe pods
the server doesn't have a resource type "pods"
我会针对每种资源类型/命令获取这些信息。如果我从我的笔记本电脑(以我自己的身份进行身份验证)运行相同的程序,我会看到有关集群正在运行的 pod、部署和服务的更多信息。
如何使用我的 VM 的服务帐户从我的 VM 访问工作?
编辑:忘记提及我已经验证我的gcloud
服务帐户是否正确接入虚拟机:
vm2:~$ gcloud auth list
Credentialed Accounts
ACTIVE ACCOUNT
* [email protected]
To set the active account, run:
$ gcloud config set account `ACCOUNT`
答案1
找到了。正如我所想,它与身份验证有关。
我需要这样做:
gcloud container clusters get-credentials <cluster name> --zone <zone> --project <gcp project>
之后,kubectl config view
有更多的输出,包括正确的 API 服务器地址和访问令牌,现在可以kubectl
按预期工作。