0

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

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

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

  • 将集群的根 CA 证书合并到我的客户端中已经存在的另一个证书链中(根据我对 TLS 的有限理解,我不确定这是否可能)。
  • 替换集群根 CA 证书(这样我就可以使用我的客户端在其密钥库中的东西)。意味着您可以使用 vanilla k8s 执行此操作,但这意味着您不能使用 GKE:“内部 Google 服务管理此 CA 的根密钥,这些密钥是不可导出的。”
  • 允许没有 TLS 的 k8s API 访问。我在文档中没有看到任何关于此的内容,其中非常明确地表明通过网络访问 k8s API 必须使用 TLS

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

4

2 回答 2

0

有一篇名为“使用 Kubernetes API 访问集群”https://kubernetes.io/docs/tasks/administer-cluster/access-cluster-api/)的文章解决了您对如何使用Java 客户端https://kubernetes.io/docs/tasks/administer-cluster/access-cluster-api/#java-client

如果您在 POD 中使用 Java 应用程序,则可以将集群的 CA 导入您的 Java 信任库 ( https://docs.oracle.com/cd/E19509-01/820-3503/6nf1il6er/index.html )。集群的 CA 证书位于集群中运行的所有 pod/var/run/secrets/kubernetes.io/serviceaccount/ca.crt目录中。更多信息(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 添加到您当前的开发中。

于 2020-01-15T20:42:16.983 回答
0

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

于 2020-01-15T21:05:41.220 回答