如何在不修改 HTTP 客户端的情况下允许 API 访问 GKE K8S 集群

How can I allow API access to a GKE K8S cluster without modifying the HTTP client

我在 GKE 上搭建了一个 k8s 集群。

我想通过 k8s REST API 控制它(因此,查看 pods 上的部署等等,但不访问 k8s 集群上的实际 运行 SSL)。我已经获得了适当的不记名令牌(curl --insecure [request] 有效)并且可以发出 API 请求。但是,SSL 证书对我的客户端无效(如果重要的话,它是 java)。我现在不能轻易修改客户端以接受新的根证书。

我一直在四处挖掘并检查了以下三个选项:

有这些可行的选择吗?或者是我修改客户端的最佳选择?

有一篇文章名为 "Access Clusters Using the Kubernetes API" (https://kubernetes.io/docs/tasks/administer-cluster/access-cluster-api/) that addresses your concerns about how to query the REST API using a Java Client (https://kubernetes.io/docs/tasks/administer-cluster/access-cluster-api/#java-client)

如果您在 POD 中使用 Java 应用程序,您可以将集群的 CA 导入到 Java Trust Store (https://docs.oracle.com/cd/E19509-01/820-3503/6nf1il6er/index.html). The CA certificate of for your cluster is inside all pods running within your cluster on /var/run/secrets/kubernetes.io/serviceaccount/ca.crt directory. More information in (https://kubernetes.io/docs/tasks/administer-cluster/access-cluster-api/#without-using-a-proxy)

关于您的问题:

1.- 将您集群的 CA 证书导入您的信任库。

2.-您不能在GKE中设置自己的CA,但如果需要可以轮换CA证书(https://cloud.google.com/kubernetes-engine/docs/how-to/credential-rotation)

3.- 您无法在 GKE 中停用 TLS 通信 (https://cloud.google.com/kubernetes-engine/docs/concepts/cluster-trust)

您最好的选择是使用官方 Java 客户端或将 CA 添加到您当前的开发中。

根据其他一些反馈(在 slack 中),我最终在我的 GKE 集群和我的客户端之间放置了一个代理。然后我可以将 GKE 集群 k8s ca 证书添加到代理的密钥库(而不必修改客户端)。出于我的目的,我不需要让代理使用 SSL,但对于生产我会。