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
相关产品推荐
相关产品推荐

