Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ssl 如何允许API访问GKE K8S群集而不修改HTTP客户端_Ssl_Kubernetes_Google Kubernetes Engine_Kubernetes Apiserver - Fatal编程技术网

Ssl 如何允许API访问GKE K8S群集而不修改HTTP客户端

Ssl 如何允许API访问GKE K8S群集而不修改HTTP客户端,ssl,kubernetes,google-kubernetes-engine,kubernetes-apiserver,Ssl,Kubernetes,Google Kubernetes Engine,Kubernetes Apiserver,我在GKE上建立了一个k8s集群 我想通过k8srestapi来控制它(因此,我要查看pods和诸如此类的部署,而不是通过SSL访问k8s集群上实际运行的内容)。我已经获得了适当的承载令牌(curl--unsecure[request]works),可以发出API请求。但是,SSL证书对我的客户机无效(如果有必要的话,它是java)。我现在无法轻松修改客户端以接受新的根证书 我一直在四处挖掘,并研究了以下三个选项: 将集群的根CA证书合并到另一个证书链中(根据我对TLS的有限理解,我不确定这是

我在GKE上建立了一个k8s集群

我想通过k8srestapi来控制它(因此,我要查看pods和诸如此类的部署,而不是通过SSL访问k8s集群上实际运行的内容)。我已经获得了适当的承载令牌(
curl--unsecure[request]
works),可以发出API请求。但是,SSL证书对我的客户机无效(如果有必要的话,它是java)。我现在无法轻松修改客户端以接受新的根证书

我一直在四处挖掘,并研究了以下三个选项:

  • 将集群的根CA证书合并到另一个证书链中(根据我对TLS的有限理解,我不确定这是否可能),该证书链已经存在于我的客户端中
  • 替换集群根CA证书(这样我就可以使用客户端密钥库中的内容)。这意味着您可以使用vanilla k8s实现这一点,但也意味着您不能使用GKE:“内部Google服务管理此CA的根密钥,这些密钥是不可导出的。”
  • 允许在没有TLS的情况下访问k8s API。我在中没有看到任何关于这方面的内容,这非常明确,网络上的k8s API访问必须使用TLS

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

有一篇文章名为《使用Kubernetes API访问集群》(Access Clusters Using the Kubernetes API)(),它解决了您关于如何使用Java客户端查询REST API的问题(

如果您在POD中使用Java应用程序,则可以将集群的CA导入Java信任库()。集群的CA证书位于
/var/run/secrets/kubernetes.io/servicecomport/CA.crt
目录下集群内运行的所有POD中。更多信息请参见()

关于你的问题:

1。-将群集的CA证书导入信任存储

2。-您不能在GKE中设置自己的CA,但如果需要,您可以轮换CA证书()

3。-您无法停用GKE()中的TLS通信


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

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

您能将k8s REST API的根ca导入java客户端的信任存储吗?我没有完全遵循您提出的选项。通常,选项是将根ca证书导入REST客户端信任存储,让java默认信任的可信ca签署证书(让我们Encryt,等等)。当然,在客户端禁用ssl验证,这从来都不是一件好事。“我正试图避免以任何方式修改客户机,@Yan。但也许我无法避免。你能得到一个由可信CA签署的证书,比如let's encrypt(免费)或其他付费网站吗?我没有使用google cloud,但你能让GC提供一个默认情况下java会信任的SSL证书吗?我猜现在你使用的是你在k8s服务器端创建的自签名证书?这很有效。对于生产,您可以获得一个由可信机构签名的证书,java默认信任该证书,并且客户端将能够连接而无需IssueShanks,因此您的建议似乎是修改客户端。谢谢你的链接!