java操作k8s原生api

本文介绍了如何使用Java操作k8sAPI,包括通过配置文件、证书和serviceAccounttoken的方式进行访问,以及涉及的依赖、k8s资源文件路径和权限管理等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

k8s资源文件路径

默认k8s的配置文件在/etc/kubernetes目录下
在这里插入图片描述

k8s maven依赖

<dependency>
     <groupId>io.fabric8</groupId>
     <artifactId>kubernetes-client</artifactId>
     <version>6.10.0</version>
</dependency>

访问k8s-api的几种方式

通过配置文件访问

 //可以放在resource下,通过配置获取admin.conf
 Resource adminConf = k8sInfoConfig.getAdminConf();
 String adminConfStr = IOUtils.toString(adminConf.getInputStream());
 Config config = Config.fromKubeconfig(adminConfStr);
 //sourceK8s.getApiServer() 获取的是k8s地址端口,默认为ip:6443端口
 config.setMasterUrl(sourc
### Java程序通过RBAC机制访问Kubernetes集群 为了使Java应用程序能够安全地与Kubernetes API服务器通信并执行操作,必须配置基于角色的访问控制(RBAC)。这涉及到创建服务账户、定义角色以及绑定这些角色到特定的服务账户。 #### 创建服务账号和服务令牌 首先,在目标命名空间内创建一个新的服务账号: ```bash apiVersion: v1 kind: ServiceAccount metadata: name: java-app-sa namespace: default ``` 保存上述内容至`service-account.yaml`文件并通过kubectl应用此资源描述符[^3]。 接着,获取新创建的服务账号对应的JWT令牌用于后续的身份验证过程。可以通过查看secret对象来找到它: ```bash kubectl get secret -n default | grep java-app-sa-token ``` #### 定义权限范围的角色 根据实际需求设计适当的角色定义文档,这里给出一个拥有广泛读取权限的例子作为参考: ```yaml apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: default name: role-read-pods rules: - apiGroups: [""] resources: ["pods"] verbs: ["get", "watch", "list"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: read-pods namespace: default subjects: - kind: ServiceAccount name: java-app-sa namespace: default roleRef: kind: Role name: role-read-pods apiGroup: rbac.authorization.k8s.io ``` 同样地,将这段YAML代码存储在一个文件里再利用`kubectl apply -f <filename>`命令部署下去[^1]。 #### 编写Java客户端代码 有了前面准备好的认证信息之后就可以编写具体的业务逻辑了。下面是一个简单的例子展示怎样借助Fabric8库发起API请求: ```java import io.fabric8.kubernetes.client.Config; import io.fabric8.kubernetes.client.KubernetesClient; import io.fabric8.kubernetes.client.DefaultKubernetesClient; public class KubernetesAccessExample { public static void main(String[] args) { Config config = new ConfigBuilder() .withMasterUrl("https://<your-cluster-ip>:6443") // 替换成自己的apiserver地址 .withOauthToken("<token>") // 使用之前获得的服务账号token .build(); try (KubernetesClient client = new DefaultKubernetesClient(config)) { System.out.println(client.pods().inNamespace("default").list()); } } } ``` 需要注意的是,这里的URL应该指向Kubernetes APIServer的实际位置;而TOKEN则是在第二步提到的秘密中提取出来的字符串形式的数据[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值