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

EKS集群中Trivy无法扫描镜像问题求助

解决Trivy Operator在涉密IL5 EKS集群(Bottlerocket OS)中扫描镜像失败的问题

根据错误日志,核心问题集中在containerd套接字无法访问和ECR镜像拉取未授权两个方面,以下是针对性的修复步骤:


一、修复containerd套接字访问问题

错误提示containerd socket not found: /run/containerd/containerd.sock,即使挂载了主机套接字,仍需确保挂载配置、权限及SELinux上下文匹配Bottlerocket OS的环境:

1. 完善Helm Chart的套接字挂载配置

在Trivy Operator的Helm values文件中添加主机套接字的挂载规则:

operator:
  extraVolumes:
    - name: containerd-sock
      hostPath:
        path: /run/containerd/containerd.sock
        type: Socket
  extraVolumeMounts:
    - name: containerd-sock
      mountPath: /run/containerd/containerd.sock
      readOnly: true

2. 调整SELinux上下文配置

当前使用的control_t类型无法匹配containerd套接字的SELinux标签,需修改为container_runtime_t:

securityContext:
  seLinuxOptions:
    user: system_u
    role: system_r
    type: container_runtime_t
    level: s0-s0:c0.c1023

可先在Bottlerocket节点执行ls -Z /run/containerd/containerd.sock,确认套接字的SELinux标签,确保配置的type字段与之一致。

3. 验证容器内套接字可用性

临时启动调试Pod,确认容器内可正常访问挂载的套接字:

kubectl run -it --rm debug --image=alpine --overrides='{"spec":{"containers":[{"name":"debug","image":"alpine","command":["sh"],"volumeMounts":[{"name":"containerd-sock","mountPath":"/run/containerd/containerd.sock"}]}],"volumes":[{"name":"containerd-sock","hostPath":{"path":"/run/containerd/containerd.sock","type":"Socket"}}]}}'

进入容器后执行stat /run/containerd/containerd.sock,确认文件存在且可访问。


二、修复ECR镜像拉取401未授权问题

针对AWS GovCloud ECR的拉取权限,需为Trivy Operator的ServiceAccount配置合法的访问凭证:

1. 通过IRSA绑定IAM角色(推荐)

若集群已启用IRSA,创建包含ECR拉取权限的IAM Policy:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ecr:GetDownloadUrlForLayer",
        "ecr:BatchGetImage",
        "ecr:BatchCheckLayerAvailability",
        "ecr:GetAuthorizationToken"
      ],
      "Resource": "*"
    }
  ]
}

将该Policy绑定到Trivy Operator的ServiceAccount,并在Helm values中配置IRSA注解:

operator:
  serviceAccount:
    annotations:
      eks.amazonaws.com/role-arn: arn:aws-us-gov:iam::023620263533:role/trivy-operator-ecr-access

2. 挂载ECR凭证Secret(无IRSA时使用)

生成ECR临时凭证并创建Kubernetes Secret:

aws ecr get-login-password --region us-gov-east-1 | kubectl create secret docker-registry ecr-secret --docker-server=023620263533.dkr.ecr.us-gov-east-1.amazonaws.com --docker-username=AWS --docker-password=-

在Helm values中配置使用该Secret:

trivy:
  imagePullSecrets:
    - name: ecr-secret

三、验证修复效果

重新部署Trivy Operator:

helm upgrade --install trivy-operator aquasecurity/trivy-operator --namespace trivy-system --version 0.6.0-rc3 --values your-values.yaml

检查扫描Job状态:

kubectl get jobs -n trivy-system

确认VulnerabilityReports CRD生成:

kubectl get vulnerabilityreports

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 08:35:36