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

在AKS中使用Flux2,如何正确配置ImageRepository认证(工作负载/Kubelet)

解决AKS中Flux2 ImageRepository的ACR认证问题(工作负载身份方案)

核心逻辑

Flux的image-reflector-controller负责扫描ACR镜像,它的ServiceAccount需要绑定拥有AcrPull权限的工作负载身份——kubelet的身份仅用于节点拉取镜像,和Flux控制器的身份是独立的,这是你之前认证失败的核心原因。

关于gotk-components.yaml/gotk-sync.yaml的说明

这两个文件是Flux初始化时生成的核心组件清单:

  • gotk-components.yaml:包含image-reflector-controller、image-automation-controller等核心控制器的Deployment、ServiceAccount资源
  • gotk-sync.yaml:用于同步Flux自身配置的GitRepository、Kustomization资源

如果你是通过Bicep部署Flux,这两个清单要么是Bicep直接部署的资源,要么是Flux自动生成的。如果找不到本地文件,可以直接从集群导出当前运行的资源:

# 导出image-reflector-controller的ServiceAccount
kubectl get sa image-reflector-controller -n flux-system -o yaml > image-reflector-sa.yaml
# 导出对应的Deployment
kubectl get deployment image-reflector-controller -n flux-system -o yaml > image-reflector-deploy.yaml

正确配置步骤

1. 确认工作负载身份基础环境

  • AKS集群已启用OIDC发行者
  • 用户托管身份已创建,且已被授予目标ACR的AcrPull角色
  • 已为该身份创建联邦凭据:受众设为api://AzureADTokenExchange,主体名称必须完全匹配system:serviceaccount:flux-system:image-reflector-controller

2. 给Flux控制器的ServiceAccount绑定工作负载身份

不需要纠结Kustomize补丁,直接修改集群中已有的ServiceAccount:

kubectl annotate serviceaccount image-reflector-controller -n flux-system \
  azure.workload.identity/client-id=<你的用户托管身份ClientID>

如果是用Bicep部署Flux,直接在定义ServiceAccount时添加该注释即可,避免后续手动修改。

3. 验证身份绑定状态

检查ServiceAccount的注释是否生效:

kubectl describe sa image-reflector-controller -n flux-system

确认输出中存在azure.workload.identity/client-id字段。

再检查控制器Pod是否挂载了身份令牌卷:

kubectl describe pod -n flux-system -l app.kubernetes.io/name=image-reflector-controller

在Volumes和VolumeMounts部分,应该能看到azure-identity-token相关配置。

4. 配置正确的ImageRepository资源

确保资源中不指定SecretRef(工作负载身份会自动处理认证):

apiVersion: image.toolkit.fluxcd.io/v1beta2
kind: ImageRepository
metadata:
  name: my-acr-repo
  namespace: flux-system
spec:
  image: <你的ACR名称>.azurecr.io/<目标镜像名>
  interval: 1m0s
  # 无需spec.secretRef,工作负载身份自动完成认证

常见问题排查

  • 找不到image-reflector-controller ServiceAccount:检查Flux镜像控制器是否已部署,执行kubectl get pods -n flux-system,如果没有对应Pod,说明Bicep部署Flux时未启用镜像扫描组件,需在部署配置中开启image-reflector和image-automation控制器。
  • 认证仍失败:查看控制器日志定位问题:
    kubectl logs -n flux-system -l app.kubernetes.io/name=image-reflector-controller
    
    重点检查令牌获取失败的错误,确认联邦凭据的主体名称完全匹配,以及用户托管身份的AcrPull角色是否正确分配到目标ACR。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 15:46:35