温馨提示×

Ubuntu Kubernetes API如何使用

小樊
39
2025-12-28 09:33:57
栏目: 智能运维

Ubuntu 上使用 Kubernetes API 的实用指南

一 准备与获取 API 入口

  • Ubuntu 上确保已安装并可用 kubectl,默认配置文件为 ~/.kube/config。获取 API 服务器地址与可用的认证信息:
    • 查看集群信息:kubectl cluster-info,输出类似:Kubernetes control plane is running at https://:
    • 查看 kubeconfig 中的服务器地址:kubectl config view -o jsonpath='{.clusters[0].cluster.server}'
    • 查看集群支持的 API 组与版本:kubectl api-versions;查看资源清单:kubectl api-resources
    • 导出 OpenAPI 规范:kubectl get --raw /openapi/v2 > openapi.json(用于了解接口与模型)。

二 直接用 curl 调用 API

  • 获取 API 地址并测试连通性(注意使用 6443 或实际端口):
    • APISERVER=$(kubectl config view -o jsonpath='{.clusters[0].cluster.server}')
    • curl -k $APISERVER/version(忽略证书校验,仅测试连通;生产不建议)
  • 使用证书进行双向 TLS 校验(推荐):
    • 从 kubeconfig 提取 CA客户端证书密钥(字段名可能为 certificate-authority-data/client-certificate-data/client-key-data),Base64 解码到文件,然后:
    • curl --cacert ca.crt --cert client.crt --key client.key $APISERVER/version
  • Pod 内调用 API(使用 ServiceAccount 自动挂载凭据):
    • 默认令牌路径:/var/run/secrets/kubernetes.io/serviceaccount/
    • 获取令牌:TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
    • 获取默认命名空间:NS=$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace)
    • 调用示例:curl -H "Authorization: Bearer $TOKEN" https://kubernetes.default.svc:$KUBERNETES_SERVICE_PORT/version
  • 使用 kubectl 代理本地访问(避免直连证书与鉴权细节):
    • 启动代理:kubectl proxy --port=8080
    • 访问:curl http://localhost:8080/api/v1/nodes
  • 小技巧:用 kubectl get --raw 直接发起原始请求,便于对照调试:
    • kubectl get --raw /api/v1/nodes
    • kubectl get --raw /apis/apps/v1/deployments -n default

三 在 Ubuntu 中用 Python 调用 API

  • 安装依赖:pip install kubernetes
  • 使用本地 kubeconfig 访问集群并列举节点:
    from kubernetes import client, config
    
    config.load_kube_config(config_file="/path/to/kubeconfig.yaml")  # 或省略参数使用默认 ~/.kube/config
    v1 = client.CoreV1Api()
    print("Nodes:")
    for n in v1.list_node().items:
        print(n.metadata.name, n.status.node_info.kubelet_version)
    
  • 在容器中运行:将宿主机的 ~/.kube/config 挂载到容器内(如 /root/.kube/config),或在容器内使用 ServiceAccount 凭据(见上一节路径)。

四 常见认证方式与排错要点

  • 常见认证方式
    • kubeconfig:适合在 Ubuntu 主机或跳板机上使用,包含 user/clusters/contexts 与证书/令牌信息。
    • ServiceAccount Token:适合 Pod 内访问,自动挂载到 /var/run/secrets/kubernetes.io/serviceaccount/
    • Bearer Token:在 HTTP 头中使用 Authorization: Bearer <token>
    • 客户端证书--cert--key 指定证书和私钥,配合 --cacert 校验证书链。
  • 常见错误与处理
    • x509 证书不受信任:使用 --cacert 指定集群 CA,或在测试环境用 -k 忽略校验(不推荐生产)。
    • 403 Forbidden:当前凭据缺少对应 RBAC 权限,需创建 Role/ClusterRoleRoleBinding/ClusterRoleBinding
    • 404 Not Found:API 路径或 API 组/版本错误,先用 kubectl api-versionskubectl api-resources 确认。
    • 连接被拒绝/超时:确认 APISERVER 地址与端口(如 6443)可达,必要时使用 kubectl proxy 或检查网络策略/防火墙。

0