簡體   English   中英

如何在不修改 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 控制它(因此,查看 pod 上的部署等等,但不通過 SSL 訪問 k8s 集群上實際運行的內容)。 我已經獲得了適當的不記名令牌( curl --insecure [request]有效)並且可以發出 API 請求。 但是,SSL 證書對我的客戶端無效(如果重要的話,它是 java)。 我目前無法輕松修改客戶端以接受新的根證書。

我一直在挖掘並檢查了以下三個選項:

  • 將集群的根 CA 證書合並到我的客戶端中已經存在的另一個證書鏈中(根據我對 TLS 的有限理解,我不確定這是可能的)。
  • 替換集群根 CA 證書(以便我可以使用我的客戶端在其密鑰庫中的內容)。 意味着你可以用香草K8S做到這一點,但是意味着你不能使用GKE:“內部谷歌服務管理此CA的根密鑰,這是不可導出”
  • 允許沒有 TLS 的 k8s API 訪問。 我在文檔中沒有看到任何關於此的內容, 這些文檔非常明確地表明通過網絡訪問 k8s API 必須使用 TLS

有這些可行的選擇嗎? 或者是我修改客戶端的最佳選擇?

有一篇名為“使用 Kubernetes API 訪問集群” ( https://kubernetes.io/docs/tasks/administer-cluster/access-cluster-api/ ) 的文章解決了您關於如何使用 REST 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 證書位於/var/run/secrets/kubernetes.io/serviceaccount/ca.crt目錄中集群內運行的所有 pod 內。 更多信息( 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 ( https://cloud.google.com/kubernetes-engine/docs/concepts/cluster-trust ) 中停用 TLS 通信

您最好的選擇是使用官方 Java 客戶端或將 CA 添加到您當前的開發中。

根據其他一些反饋(暫時),我最終在我的 GKE 集群和我的客戶端之間放置了一個代理。 然后我可以將 GKE 集群 k8s ca cert 添加到代理的密鑰庫中(而不必修改客戶端)。 出於我的目的,我不需要讓代理使用 SSL,但對於生產我會。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM