API Server简介
k8s API Server提供了k8s各类资源对象(pod,RC,Service等)的增删改查及watch等HTTP Rest接口,是整个系统的数据总线和数据中心。
kubernetes API Server的功能:
- 提供了集群管理的REST API接口(包括认证授权、数据校验以及集群状态变更);
- 提供其他模块之间的数据交互和通信的枢纽(其他模块通过API Server查询或修改数据,只有API Server才直接操作etcd);
- 是资源配额控制的入口;
- 拥有完备的集群安全机制.
如何访问kubernetes API
k8s通过kube-apiserver这个进程提供服务,该进程运行在单个k8s-master节点上。默认有两个端口。
本地端口
- 该端口用于接收HTTP请求;
该端口默认值为8080,可以通过API Server的启动参数“–insecure-port”的值来修改默认值; - 默认的IP地址为“localhost”,可以通过启动参数“–insecure-bind-address”的值来修改该IP地址;
- 非认证或授权的HTTP请求通过该端口访问API Server。
vim /etc/kubernetes/manifests/kube-apiserver.yaml
- --enable-swagger-ui=true
- --insecure-bind-address=0.0.0.0
- --insecure-port=8008
访问 http://192.168.56.112:8008/
安全端口
该端口默认值为6443,可通过启动参数“–secure-port”的值来修改默认值;
默认IP地址为非本地(Non-Localhost)网络端口,通过启动参数“–bind-address”设置该值;
- 该端口用于接收HTTPS请求;
- 用于基于Tocken文件或客户端证书及HTTP Base的认证;
- 用于基于策略的授权;
- 默认不启动HTTPS安全访问控制。
- 进入 master节点,导出k8s证书config文件
cd /root/.kube
sz config #下载该文件
然后我们将文件改名为config.yml,复制到java项目resource目录中供使用
- java 引用
<dependency>
<groupId>io.kubernetes</groupId>
<artifactId>client-java</artifactId>
<version>12.0.1</version>
</dependency>
获取所有的pod
public V1PodList getAllPodList() {
// new a CoreV1Api
CoreV1Api api = new CoreV1Api(apiClient);
// invokes the CoreV1Api client
try {
V1PodList list = api.listPodForAllNamespaces(null, null, null, null, null, null, null, null, null, null);
return list;
} catch (ApiException e) {
log.error("获取podlist异常:" + e.getResponseBody(), e);
}
return null;
}
@Test
public void getAllPodListTest() throws IOException {
String kubeConfigPath = "config.yml";
K8sClient k8sClient = new K8sClient(kubeConfigPath);
V1PodList podList = k8sClient.getAllPodList();
for (V1Pod item : podList.getItems()) {
System.out.println(item.getMetadata().getNamespace() + ":" + item.getMetadata().getName());
}
}
相当于kubectl get pods -A
扫描二维码关注公众号,回复:
13391888 查看本文章
相当于 http://192.168.56.112:8008/api/v1/pods
获取所有的service
public V1ServiceList getAllServiceList() {
// new a CoreV1Api
CoreV1Api api = new CoreV1Api(apiClient);
// invokes the CoreV1Api client
try {
V1ServiceList v1ServiceList = api.listServiceForAllNamespaces(null, null, null, null, null, null, null, null, null, null);
return v1ServiceList;
} catch (ApiException e) {
log.error("获取podlist异常:" + e.getResponseBody(), e);
}
return null;
}
@Test
public void getAllServiceListTest() throws IOException {
String kubeConfigPath = "config.yml";
K8sClient k8sClient = new K8sClient(kubeConfigPath);
V1ServiceList allServiceList = k8sClient.getAllServiceList();
for (V1Service item : allServiceList.getItems()) {
System.out.println(item.getMetadata().getNamespace() + ":" + item.getMetadata().getName());
}
}
相当于 kubectl get svc -A
想当于 http://192.168.56.112:8008/api/v1/services
更多的通过http://192.168.56.112:8008/api/v1/,了解更多。