首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何配置k8s客户端,使其可以从k8s群集pod与k8s CRD通信?

如何配置k8s客户端,使其可以从k8s群集pod与k8s CRD通信?
EN

Stack Overflow用户
提问于 2019-02-08 02:56:43
回答 2查看 779关注 0票数 1

k8s java client中的示例都使用默认客户端,请参见here

代码语言:javascript
复制
ApiClient client = Config.defaultClient();
Configuration.setDefaultApiClient(client);

如何配置k8s客户端,以便它可以从k8s集群pod与k8s CRD(例如,sparkoperator)通信?我应该如何配置这个客户端?(basePath,身份验证?)在同一个k8s集群中的pod中,我应该使用什么basePath?

EN

回答 2

Stack Overflow用户

发布于 2019-02-08 22:19:31

您也可以使用defaultClient来实现此目的。

如果应用程序在群集内运行并且具有正确的服务帐户,则defaultClient()方法将创建群集内客户端。

您可以从here方法的注释中看到defaultClient的规则:

代码语言:javascript
复制
/**
   * 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,例如CRDs of Prometheus OperatorClusterRole示例

代码语言:javascript
复制
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"]
票数 2
EN

Stack Overflow用户

发布于 2019-02-08 17:58:00

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

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

只需将localhost更改为apiserver ip address/dns name即可

您应该阅读Kubernetes API documentation

此外,您还需要配置RBAC的访问和权限。集群内的容器使用令牌填充,该令牌用于向API服务器进行身份验证。您可以通过在POD中执行cat /var/run/secrets/kubernetes.io/serviceaccount/token来验证这一点。

这样,您从容器内部向apiserver发出的请求可能如下所示:

代码语言:javascript
复制
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,还可以设置所需的权限see this for more details

我推荐阅读下面的Installing kubectl in a Kubernetes PodThe Kubernetes API call is coming from inside the cluster!

至于其他Java客户端,还有一些非官方的客户端库,比如Java (OSGi)Java (Fabric8, OSGi)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54580380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档