AKS中以非Root用户部署Splunk OTEL Collector时Init容器权限问题解决
解决Splunk OTEL Collector DaemonSet在AKS的权限问题
针对你遇到的非Root用户+只读根文件系统导致Init容器无法修改ACL的问题,有以下几种可行的配置方案:
方案1:给Init容器单独配置Root权限
因为Init容器只负责初始化操作(修改ACL、迁移checkpoint),完成后就会退出,不会长期运行,所以可以单独给这两个Init容器设置Root权限,主容器依然保持非Root和只读根文件系统,符合安全政策。
在Helm values.yaml中添加如下配置:
agent: # 给patch-log-dirs和migrate-checkpoint这两个Init容器配置Root权限 initContainers: patchLogDirs: securityContext: runAsUser: 0 allowPrivilegeEscalation: false migrateCheckpoint: securityContext: runAsUser: 0 allowPrivilegeEscalation: false # 主容器保持非Root+只读根文件系统 containerSecurityContext: runAsUser: 20000 runAsNonRoot: true readOnlyRootFilesystem: true
方案2:提前在节点上配置好日志目录权限
如果完全不允许任何容器以Root运行,可以通过AKS节点池的自定义启动脚本,提前给目标日志目录设置好ACL,让Splunk OTEL Collector使用的20000用户拥有读写权限,然后禁用自动生成的Init容器。
- 给AKS节点池添加启动脚本,执行以下命令:
setfacl -R -m u:20000:rwx /var/log/pods setfacl -R -m u:20000:rwx /var/log/containers
- 在Helm values.yaml中禁用Init容器:
agent: patchLogDirs: enabled: false migrateCheckpoint: enabled: false containerSecurityContext: runAsUser: 20000 runAsNonRoot: true readOnlyRootFilesystem: true
方案3:用PVC挂载日志目录
将需要修改权限的日志目录挂载到PersistentVolumeClaim中,提前在PVC里设置好20000用户的读写权限,这样Init容器不需要操作节点上的目录,只需要处理PVC内的文件。
- 提前创建带有正确权限的PVC(比如用StorageClass动态创建,或者手动配置PV)
- 在Helm values.yaml中添加挂载配置:
agent: extraVolumes: - name: pod-logs persistentVolumeClaim: claimName: splunk-logs-pvc extraVolumeMounts: - name: pod-logs mountPath: /var/log/pods readOnly: false containerSecurityContext: runAsUser: 20000 runAsNonRoot: true readOnlyRootFilesystem: true
内容的提问来源于stack exchange,提问作者Zucoa
相关产品推荐
相关产品推荐

