Administrator
发布于 2026-08-15 / 10 阅读
0
0

第七章.k8s存储-DownwardAPI-2

来源链接:https://www.bilibili.com/video/BV1PbeueyE8V?spm_id_from=333.788.videopod.episodes&vd_source=0e85828f19fba96334ebaebea2da3e2f&p=48

第七章 K8s存储 - DownwardAPI 2 实验实操笔记

一、前置资源准备

1. 创建ServiceAccount(SA)与Secret

  • 创建名为test-api的ServiceAccount,用于为Pod分配访问API Server的权限
  • 创建绑定该SA的Secret,存储API Server访问所需的认证凭证,Pod使用该SA运行时会自动挂载该Secret
    2. 创建业务Pod
  • 官方默认容器镜像不包含kubectl,因此使用自定义带kubectl的镜像创建Pod
  • 完成Pod配置后启动,等待自定义镜像拉取完成后进入运行状态

二、DownwardAPI基础用法:获取Pod自身元数据

1. 核心环境变量配置
通过DownwardAPI向Pod注入3个核心环境变量,用于API Server访问认证:

  • $TOKEN:身份令牌,持有该令牌即拥有对应SA的权限,可完成API Server的身份认证
  • $CA_CERT:CA证书路径,用于HTTPS连接时验证API Server证书的有效性
  • $NAMESPACE:当前Pod所在的命名空间,API请求时需要指定目标命名空间

2. API调用逻辑

  • 基于curl发起HTTPS请求,通过Authorization: Bearer $TOKEN请求头携带Token认证信息,通过--cacert $CA_CERT参数指定CA证书验证服务端身份
  • 访问API Server的/api/v1/namespaces/$NAMESPACE/pods接口,获取当前命名空间下的所有Pod列表

3. 返回结果说明
接口返回标准JSON格式数据,包含所有Pod的完整元数据,包括但不限于:Pod名称、UID、资源版本、创建时间、运行状态、IP地址、元数据信息、Volume挂载信息、容器状态等

4、操作命令

TOKEN=$( cat /var/run/secrets/kubernetes.io/serviceaccount/token )
CAPATH="/var/run/secrets/kubernetes.io/serviceaccount/ca.crt"
NS=$( cat /var/run/secrets/kubernetes.io/serviceaccount/namespace )
curl -H "Authorization: Bearer $TOKEN" --cacert $CAPATH https://kubernetes/api/v1/namespaces/$NS/pods

三、扩展方案:通过API Server接口获取集群任意资源元数据

1. Service地址简化规则
若Pod与目标Service处于同一命名空间,访问Service时无需书写全限定域名<service-name>.<namespace>.svc.cluster.local,直接写Service名称即可,该规则可简化API请求中的服务地址
2. 跨命名空间资源访问
修改API请求中的命名空间参数,即可访问其他命名空间下的Pod资源,演示中成功通过修改命名空间参数,获取到kube-system命名空间下kube-scheduler Pod的元数据信息
3. 方案优势与注意事项

  • 相比DownwardAPI仅能获取自身元数据,该方案可灵活获取集群内任意资源的元数据,适用范围更广,可实现“无权限查不到”的灵活查询能力
  • 演示实验中为Pod赋予了集群最大管理员权限,实际生产环境中需遵循最小权限原则,缩小Pod的权限范围,避免安全风险

四、Kubernetes API接口文档可视化查看

1. 开启API Server本地代理
执行kubectl proxy --port=8080开启本地代理,将API Server的HTTPS接口转换为本地HTTP接口,无需提供证书和身份认证即可访问。该方式仅用于实验场景,生产环境禁止使用,存在严重安全风险
2. 导出OpenAPI规范文件
执行curl localhost:8080/openapi/v2 > k8s_swagger.json,将当前Kubernetes版本的所有API接口定义导出为符合OpenAPI规范的JSON文件
3. 部署Swagger UI可视化界面
使用Docker部署Swagger UI容器,绑定本地导出的JSON文件,部署命令如下:

docker run --rm -d -p 80:8080 -e SWAGGER_JSON=/k8s_swagger.json -v $(pwd)/k8s_swagger.json:/k8s_swagger.json swaggerapi/swagger-ui

部署完成后访问集群节点的物理网卡80端口,即可进入Swagger UI可视化界面
4. 接口文档用途
可视化界面完整展示了所有Kubernetes API接口的请求方式、参数说明、响应示例,开发人员可基于这些接口开发自动化运维逻辑,例如Pod自动清理、部署更新、集群状态监控等,大幅提升运维自动化能力

五、本节实验总结

1. DownwardAPI支持注入Pod自身元数据作为环境变量,可满足业务对自身运行属性的获取需求,是K8s存储模块的常用特性
2. 通过Kubernetes API Server接口可灵活获取集群内任意资源的元数据,扩展性远高于DownwardAPI基础用法
3. 可通过Swagger UI可视化查看官方API文档,降低接口开发与调试成本,支撑自动化运维场景落地
4. 涉及权限分配、代理开放等操作时需严格遵循安全规范,避免生产环境出现安全漏洞

AI 总结

本节完整演示了Kubernetes DownwardAPI的基础与扩展使用方式,覆盖了从资源准备、元数据获取到API文档查看的全流程,明确了不同方案的优势、适用场景与安全注意事项,为后续基于K8s元数据开发自动化运维能力提供了实操参考。


评论