电脑港
白蓝主题五 · 清爽阅读
首页  > 软件应用

容器平台API接口调用实战:几行命令就能拉起一个服务

老张在公司负责运维,上周刚把测试环境从虚拟机迁到 Kubernetes,本以为能松口气,结果开发小李发来消息:‘张哥,我改了个配置,能不能帮我立刻重启下 api-service?’老张打开终端,敲了两行 curl 命令,3 秒后 Pod 就重建好了——这背后靠的就是容器平台的 API 接口调用

API 不是玄学,就是一套“远程遥控器”

别被“API”吓住。Kubernetes、OpenShift、阿里云 ACK、腾讯云 TKE,甚至本地的 Docker Desktop,都对外暴露了一套 HTTP 接口。你平时用 kubectl get pods,本质就是 kubectl 在后台调用 /api/v1/namespaces/default/pods 这个地址;用 docker ps,其实是和本地 Docker daemon 的 /containers/json 接口通信。

动手试试:不用 kubectl,直接调用

假设你本地启用了 Docker Desktop(Mac/Windows)或已安装 dockerd(Linux),终端里执行:

curl -s --unix-socket /var/run/docker.sock http://localhost/containers/json | jq '.[0].Names'

这条命令直接连 Docker 的 Unix Socket,获取第一个容器的名字。Windows 用户路径换成 //./pipe/docker_engine,加个 --nix-socket 参数(实际用 PowerShell 的 Invoke-RestMethod 更稳)。

K8s 也不难:Token + HTTPS 就能通

进到任意一个 K8s 集群节点,找到 serviceaccount token:

cat /var/run/secrets/kubernetes.io/serviceaccount/token

再配上 ca.crt 和 apiserver 地址,就能发请求了:

curl -k -H "Authorization: Bearer <your-token>" --cacert /var/run/secrets/kubernetes.io/serviceaccount/ca.crt https://<apiserver-ip>:6443/api/v1/namespaces/default/pods

返回的是 JSON 列表,里面每个 pod 的状态、IP、镜像一目了然。很多自动化脚本、CI/CD 流水线、内部运维小工具,都是这么干的。

别硬记路径,用 client-go 或 requests 封装更省事

真写生产脚本,没人天天手拼 URL。Python 开发常用 requests 库封装一层:

import requests
headers = {"Authorization": "Bearer abc123..."}
r = requests.get("https://k8s.example.com/api/v1/namespaces/prod/pods", headers=headers, verify="/path/to/ca.crt")
for pod in r.json()["items"]:
print(pod["metadata"]["name"], pod["status"]["phase"])

Go 程序员则倾向用官方 client-go,自动处理 Token 刷新、重试、序列化,比手撸 HTTP 稳得多。

常见踩坑点

权限不够?检查 ServiceAccount 绑定的 Role 是否有 get/list pods 权限;
连不上?确认网络通、证书有效、端口开放(K8s 默认 6443,Docker 默认 2375/2376);
返回 401?Token 过期了,换新的,或者改用 kubeconfig 自动加载;
中文乱码?加 -H "Accept: application/json",别让服务器返回 HTML 错误页。

说白了,容器平台 API 就像家里的智能插座——知道开关在哪、怎么发指令,空调、灯、咖啡机就都能远程管起来。调用本身不难,关键是你心里得清楚:我想让它干啥,它能给我啥反馈。