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

GKE通过Helm安装Traefik 2.9遇init:CrashLoopBackOff权限问题

解决Traefik 2.9在GKE上init容器权限拒绝问题

问题根源

你将podSecurityContext.fsGroup设为null,导致Kubernetes不会自动调整挂载的持久化卷(ssldata)的属组权限。而init容器以65532用户运行,对/ssldata目录没有写入权限,因此无法创建acme.json文件,触发权限拒绝错误。

解决方案

方案1:恢复fsGroup配置(推荐)

Traefik默认运行用户为65532,将fsGroup设为65532后,Kubernetes会自动把挂载卷的属组调整为65532,让init容器拥有写入权限。修改values配置:

podSecurityContext:
  fsGroup: 65532

方案2:让init容器以root用户运行

如果必须保持fsGroup: null,可以让init容器以root身份创建文件,再修改文件属主为65532。调整init容器配置:

deployment: 
  initContainers: # 确保/ssldata/acme.json权限为600
    - name: fix-data-dir-permissions
      image: alpine:3.16.2
      command: ["sh", "-c", "touch /ssldata/acme.json; chmod 600 /ssldata/acme.json; chown 65532:65532 /ssldata/acme.json"]
      securityContext:
        runAsNonRoot: false
        runAsUser: 0      
      volumeMounts:
        - name: ssldata
          mountPath: /ssldata

方案3:手动预设置卷权限(繁琐,按需使用)

如果使用GCP Persistent Disk,可先创建临时Pod挂载该磁盘,手动创建文件并设置权限:

  1. 创建临时Pod配置文件temp-pod.yaml:
apiVersion: v1
kind: Pod
metadata:
  name: temp-permission-fix
spec:
  containers:
  - name: alpine
    image: alpine:3.16.2
    command: ["sleep", "3600"]
    volumeMounts:
    - name: ssldata
      mountPath: /ssldata
  volumes:
  - name: ssldata
    persistentVolumeClaim:
      claimName: ssldata # 替换为你的PVC名称
  1. 启动Pod:kubectl apply -f temp-pod.yaml
  2. 进入Pod执行命令:kubectl exec -it temp-permission-fix -- sh
  3. 在Pod内创建文件并设置权限:
touch /ssldata/acme.json
chmod 600 /ssldata/acme.json
chown 65532:65532 /ssldata/acme.json
  1. 删除临时Pod:kubectl delete pod temp-permission-fix
  2. 重新部署Traefik

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 06:34:58