You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes CronJob如何使用CURL响应并加密存储API密钥

Kubernetes CronJob 对接带认证内部API实现方案

1. API密钥加密存储方案

直接使用Kubernetes原生Secret资源配合集群etcd静态加密实现,不需要额外自研加解密逻辑:

  • 提前在目标命名空间创建Secret存储API密钥,密钥只会以密文形式存储在集群etcd中,Pod启动时kubelet会自动解密注入到容器,不会在CronJob配置中暴露明文
  • 创建Secret执行如下命令即可,不要把明文密钥写在YAML文件里提交到代码仓库:
kubectl create secret generic api-auth-secret \
  --from-literal=API_KEY=替换为你的实际API密钥 \
  -n 替换为CronJob所在命名空间
  • CronJob中通过环境变量引用该Secret即可直接使用,不需要额外写解密脚本

2. curl提取令牌并传递认证头实现

基于你使用的curlimages/curl镜像自带的shell环境,配合JSON解析工具就能完成响应提取:

  • 第一步先调用令牌生成接口,将响应结果存入shell变量
  • 从响应中提取token字段,拼接为标准Authorization请求头格式
  • 后续业务接口请求同时携带Authorization头和API密钥头即可
  • 增加基础失败判断:如果令牌获取失败直接退出,避免发起无效请求

3. 完整可用CronJob配置示例

apiVersion: batch/v1
kind: CronJob
metadata:
  name: api-cron
spec:
  # 每周二早8点触发
  schedule: "0 08 * * 2"
  jobTemplate:
    spec:
      template:
        spec:
          restartPolicy: Never
          containers:
            - name: curl
              image: curlimages/curl:7.80.0
              command: ["/bin/sh", "-c"]
              env:
                - name: POD_NAMESPACE
                  valueFrom:
                    fieldRef:
                      fieldPath: metadata.namespace
                # 从Secret注入API密钥,无明文暴露风险
                - name: API_KEY
                  valueFrom:
                    secretKeyRef:
                      name: api-auth-secret
                      key: API_KEY
              args:
                - |
                  set -e
                  # 临时安装jq用于解析JSON响应,无外网环境可提前做进自定义镜像
                  apk add --no-cache jq >/dev/null 2>&1
                  # 1. 调用令牌接口获取认证token,默认适配返回格式为{"token":"xxx"}的接口
                  TOKEN_RESP=$(curl -s -X POST "http://application.${POD_NAMESPACE}.svc.cluster.local/generate-token" \
                    -H "X-API-Key: ${API_KEY}" \
                    -d "")
                  # 提取token字段
                  TOKEN=$(echo "${TOKEN_RESP}" | jq -r '.token')
                  if [ -z "${TOKEN}" ] || [ "${TOKEN}" == "null" ]; then
                    echo "获取认证令牌失败,响应内容: ${TOKEN_RESP}"
                    exit 1
                  fi
                  # 2. 携带认证头调用业务接口
                  curl -s -f -X POST "http://application.${POD_NAMESPACE}.svc.cluster.local/endpoint" \
                    -H "Authorization: Bearer ${TOKEN}" \
                    -H "X-API-Key: ${API_KEY}" \
                    -d ""

注意:如果你的令牌接口返回格式不是标准JSON,把提取token的jq命令替换为对应awk/grep字符串匹配规则即可,不需要额外安装工具。


内容的提问来源于stack exchange,提问作者anonymous

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 07:37:28