centos k8s API使用指南
导读:CentOS 上使用 Kubernetes API 的完整指南 一 环境准备与前置检查 在 CentOS 上准备 kubeconfig 并验证集群连通性: 安装 kubectl(示例): 下载并安装:curl -LO “https:/...
CentOS 上使用 Kubernetes API 的完整指南
一 环境准备与前置检查
- 在 CentOS 上准备 kubeconfig 并验证集群连通性:
- 安装 kubectl(示例):
- 下载并安装:curl -LO “https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl” & & chmod +x kubectl & & sudo mv kubectl /usr/local/bin/kubectl
- 配置 kubeconfig(如使用 kubeadm 初始化集群后):
- mkdir -p $HOME/.kube
- sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
- sudo chown $(id -u):$(id -g) $HOME/.kube/config
- 验证:
- kubectl cluster-info
- kubectl get nodes
- kubectl api-resources
- 安装 kubectl(示例):
- 以上步骤完成后,kubectl 已就绪,可用于后续 API 调用与调试。
二 三种访问 Kubernetes API 的方式
- 方式一 kubectl 代理本地访问(最简单)
- 启动代理:kubectl proxy(默认监听 http://localhost:8001)
- 访问示例:curl http://localhost:8001/api/v1/pods
- 方式二 直接使用 curl 调用 API Server(使用 kubeconfig 中的 Token)
- 获取 API Server 地址与 Token:
- APISERVER=$(kubectl config view --minify -o jsonpath=‘{ .clusters[0].cluster.server} ’)
- TOKEN=$(kubectl config view --minify --output ‘jsonpath={ .users[0].user.token} ’)
- 调用示例:
- curl -k -H “Authorization: Bearer $TOKEN” ${ APISERVER} /api/v1/pods
- 获取 API Server 地址与 Token:
- 方式三 Pod 内访问 API Server(ServiceAccount)
- 在 Pod 内使用挂载的 ServiceAccount 令牌:
- curl -k -H “Authorization: Bearer $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)” https://kubernetes.default.svc/api/v1/namespaces
- 在 Pod 内使用挂载的 ServiceAccount 令牌:
- 提示:生产环境不建议使用 -k 跳过证书校验,应配置 CA 证书或采用受控的 Ingress/代理通道。
三 常见操作示例
- 查看资源与版本
- 查看所有资源与 API 组:kubectl api-resources
- 以 JSON 输出 Pods:kubectl get pods -o json
- 直接创建 Pod(HTTP API)
- 准备请求体 pod.json:
- {
- “apiVersion”: “v1”,
- “kind”: “Pod”,
- “metadata”: { “name”: “my-pod”} ,
- “spec”: {
- “containers”: [{
- “name”: “nginx”,
- “image”: “nginx:latest”
- } ]
- “containers”: [{
- }
- }
- {
- 发送请求:
- curl -k -H “Authorization: Bearer $TOKEN”
-H “Content-Type: application/json”
-X POST
–data-binary @pod.json
${ APISERVER} /api/v1/namespaces/default/pods
- curl -k -H “Authorization: Bearer $TOKEN”
- 准备请求体 pod.json:
- 编程方式访问(Python 官方客户端)
- 安装依赖:pip3 install kubernetes
- 示例脚本(列出命名空间):
- from kubernetes import client, config config.load_kube_config() v1 = client.CoreV1Api() for ns in v1.list_namespace().items: print(ns.metadata.name)
- 以上示例覆盖了命令行、HTTP 直接调用与 SDK 三种常见用法。
四 认证与授权要点
- 认证方式
- 支持 X.509 客户端证书、Bearer Token、OIDC 等;Pod 内默认使用 ServiceAccount 的 JWT 令牌(挂载于 /var/run/secrets/kubernetes.io/serviceaccount/token)。
- 授权模型
- 生产常用 RBAC:通过 Role/ClusterRole 与 RoleBinding/ClusterRoleBinding 精细控制对资源的 Verbs(如 get、list、watch、create、delete)。
- 安全最佳实践
- 遵循 最小权限原则,避免使用通配权限(如 [“*”])。
- 使用 临时 KubeConfig 与 短期 Token,并及时吊销泄露凭证。
- 将 API Server Endpoint 限制在 内网/VPC,必要时通过负载均衡与鉴权策略控制公网访问。
- 定期 审计 集群访问权限与关键操作。
五 常见问题与排查
- x509 证书错误
- 现象:curl 报证书不受信任。
- 处理:不要长期使用 -k;在 curl 中指定 CA 证书(–cacert),或使用 kubectl proxy 转发到本地 8001 端口。
- 403 Forbidden
- 现象:认证通过但无权限。
- 处理:检查当前 Context/User 的 RBAC 绑定是否包含目标资源的对应 Verbs;必要时创建最小权限的 Role/ClusterRole 并绑定。
- 获取 API 地址或 Token 失败
- 现象:变量为空或命令报错。
- 处理:确认 kubeconfig 已正确加载(kubectl config view),或使用 kubectl cluster-info 获取 APISERVER;Token 可通过 kubectl config view 或 ServiceAccount 挂载路径获取。
- 在 Pod 内访问失败
- 现象:连接被拒绝或 403。
- 处理:确认 ServiceAccount 已创建并绑定合适 Role;检查 Pod 是否挂载了 token 与 CA(默认会挂载);必要时为 Pod 指定 serviceAccountName。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos k8s API使用指南
本文地址: https://pptw.com/jishu/761221.html
