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

基于EKS集群的自托管Github Action构建镜像失败求助

问题:EKS集群中自托管Github Action Runner执行Trivy-Action时SSL证书验证失败

问题背景

  • 基于EKS的Kubernetes集群,采用按需生成容器的Github Action控制器作为自托管Runner
  • 执行trivy-action等需要构建Docker镜像的插件时,出现SSL证书验证失败,导致apk无法安装bash、curl、npm等依赖,构建中断
  • 集群内独立运行Alpine容器时命令正常,默认Ubuntu版自托管Runner可正常工作,排除集群全局网络/证书问题
  • 仅ubuntu-latest镜像可用,其他镜像均触发相同SSL错误

错误日志

/usr/local/bin/docker build -t 60e226:1b6fc15462134e6fb8520b7df48cf7fd -f  "/runner/_work/_actions/aquasecurity/trivy-action/master/Dockerfile"      "/runner/_work/_actions/aquasecurity/trivy-action/master"
Sending build context to Docker daemon  644.6kB

Step 1/5 : FROM ghcr.io/aquasecurity/trivy:0.37.1
0.37.1: Pulling from aquasecurity/trivy
c158987b0551: Pulling fs layer
67a7d067ef7d: Pulling fs layer
67a7d067ef7d: Pull complete
2ec1cdd48f38: Verifying Checksum
2ec1cdd48f38: Download complete
2ec1cdd48f38: Pull complete
fe56e6aa700e: Pull complete
Digest: sha256:7c167f7f3002948f1ec099555aa968bd8b8b097780603a38cc801fe965da0a69
Status: Downloaded newer image for ghcr.io/aquasecurity/trivy:0.37.1
 ---> c3e68408cd24
Step 2/5 : COPY entrypoint.sh /
 ---> 1f1da443ea86
Step 3/5 : RUN apk --no-cache add bash curl npm
 ---> Running in 647f7f479cac
fetch https://dl-cdn.alpinelinux.org/alpine/v3.17/main/x86_64/APKINDEX.tar.gz
48ABC73BEB7F0000:error:0A000086:SSL routines:tls_post_process_server_certificate:certificate verify failed:ssl/statem/statem_clnt.c:1889:
WARNING: Ignoring https://dl-cdn.alpinelinux.org/alpine/v3.17/main: Permission denied
fetch https://dl-cdn.alpinelinux.org/alpine/v3.17/community/x86_64/APKINDEX.tar.gz
48ABC73BEB7F0000:error:0A000086:SSL routines:tls_post_process_server_certificate:certificate verify failed:ssl/statem/statem_clnt.c:1889:
WARNING: Ignoring https://dl-cdn.alpinelinux.org/alpine/v3.17/community: Permission denied
ERROR: unable to select packages:
  bash (no such package):
    required by: world[bash]
  curl (no such package):
    required by: world[curl]
  npm (no such package):
    required by: world[npm]
The command '/bin/sh -c apk --no-cache add bash curl npm' returned a non-zero code: 3
Warning: Docker build failed with exit code 3, back off 6.807 seconds before retry.

Trivy-Action配置

- name: Run Trivy vulnerability scanner
      uses: aquasecurity/trivy-action@master
      with:
        image-ref: 'test:latest'
        format: 'table'
        exit-code: '1'
        ignore-unfixed: true
        vuln-type: 'os,library'
        severity: 'CRITICAL,HIGH'

解决思路

1. 修复Docker构建环境的证书配置

自托管Runner的Docker daemon可能未加载集群/企业根证书,导致构建容器内无法验证外部SSL证书:

  • 将根证书挂载到Runner容器的/etc/ssl/certs目录,同时修改Docker daemon配置文件daemon.json,指定证书路径
  • 在Docker build命令中添加--certificate-authority参数,直接指定根证书文件

2. 替换Trivy-Action的基础镜像

当前使用的trivy:0.37.1基于Alpine,可能存在证书链兼容性问题:

  • 自定义Trivy-Action的Dockerfile,改用Ubuntu作为基础镜像,规避Alpine的apk证书验证逻辑
  • 使用预安装好依赖的Trivy官方镜像,跳过apk add步骤

3. 临时切换apk为HTTP源(仅测试用)

在Dockerfile的RUN apk命令前替换镜像源为HTTP,绕过SSL验证:

RUN echo "http://dl-cdn.alpinelinux.org/alpine/v3.17/main" > /etc/apk/repositories && \
    echo "http://dl-cdn.alpinelinux.org/alpine/v3.17/community" >> /etc/apk/repositories && \
    apk --no-cache add bash curl npm

注意:此方法会降低安全性,仅作为临时验证手段

4. 配置Docker构建的代理继承

如果集群使用代理,Runner容器的代理配置可能未传递到Docker构建环境:

  • 在Runner启动时注入HTTP_PROXY、HTTPS_PROXY、NO_PROXY环境变量
  • 修改Docker daemon配置,添加代理参数,确保构建过程能访问外部资源

5. 使用预构建的Trivy-Action镜像

避免在Runner中动态构建镜像,直接调用官方预构建的trivy-action镜像,或直接在Runner中安装Trivy CLI执行扫描

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 06:35:20