簡體   English   中英

如何配置k8s客戶端,以便它可以與k8s集群Pod中的k8s CRD對話?

[英]How to config k8s client so that it can talk to k8s CRDs from a k8s cluster pod?

k8s Java客戶端中的示例均使用默認客戶端,請參見此處

ApiClient client = Config.defaultClient();
Configuration.setDefaultApiClient(client);

我如何配置k8s客戶端,以便它可以與k8s集群Pod中的k8s CRD(例如,sparkoperator)對話? 我應該如何配置此客戶端? (basePath,身份驗證?)在同一k8s集群中的pod中應該使用什么basePath?

您也可以使用defaultClient

如果應用程序在群集中運行並且具有正確的服務帳戶,則defaultClient()方法將創建一個群集內客戶端。

你可以看到規則defaultClient從方法的意見在這里

/**
   * Easy client creation, follows this plan
   *
   * <ul>
   *   <li>If $KUBECONFIG is defined, use that config file.
   *   <li>If $HOME/.kube/config can be found, use that.
   *   <li>If the in-cluster service account can be found, assume in cluster config.
   *   <li>Default to localhost:8080 as a last resort.
   * </ul>
   *
   * @return The best APIClient given the previously described rules
   */

因此,如果使用k8s Java客戶端的應用程序在其自身的集群上運行,則只要它具有正確的權限,它就應該能夠訪問集群上的內容。 您需要允許您的客戶端應用程序能夠訪問CRD,例如以下Prometheus Operator ClusterRoleClusterRole示例:

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: prometheus-crd-view
  labels:
    rbac.authorization.k8s.io/aggregate-to-admin: "true"
    rbac.authorization.k8s.io/aggregate-to-edit: "true"
    rbac.authorization.k8s.io/aggregate-to-view: "true"
rules:
- apiGroups: ["monitoring.coreos.com"]
  resources: ["alertmanagers", "prometheuses", "prometheusrules", "servicemonitors"]
  verbs: ["get", "list", "watch"]

您可以使用Kubernetes API,只需安裝curl。

curl http://localhost:8080/api/v1/namespaces/default/pods

只需將localhost更改為apiserver ip address / dns name

您應該閱讀Kubernetes API文檔

另外,您將需要配置RBAC的訪問和權限。 群集中的容器填充有用於對API服務器進行身份驗證的令牌。 您可以通過在POD內執行cat /var/run/secrets/kubernetes.io/serviceaccount/token來驗證。

這樣,您從容器內部對apiserver的請求可能如下所示:

curl -ik \
     -H "Authorization: Bearer $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" \
     https://kubernetes.default.svc.cluster.local/api/v1/namespaces/default/pods

您還可以將kubectl安裝在容器內,還可以設置所需的權限, 有關更多詳細信息請參見

我建議您閱讀以下內容: 在Kubernetes Pod中安裝kubectl,並且Kubernetes API調用來自集群內部!

至於其他Java客戶端,也有非官方的客戶端庫,例如Java(OSGi)Java(Fabric8,OSGi)

暫無
暫無

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

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