Kong-ingress-controller报CrashLoopBackOff:kong-proxy访问被禁止
解决方案
根因说明
该报错是典型的Kubernetes RBAC权限缺失问题:你部署时创建的kong-serviceaccount服务账号,没有被授予kong命名空间下核心API组services资源的get权限,导致ingress-controller容器无法读取kong-proxy服务的配置信息,启动失败触发CrashLoopBackOff。
修复步骤
步骤1:确认现有RBAC资源状态
先查看kong命名空间下已有的Role、RoleBinding资源,避免重复配置:
kubectl get role,rolebinding -n kong
步骤2:创建Services访问权限Role
新建kong-service-reader-role.yaml文件,写入以下配置:
apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: kong name: kong-service-reader rules: - apiGroups: [""] # 对应核心API组 resources: ["services"] verbs: ["get", "list", "watch"] # 额外增加list、watch权限避免后续出现同类权限报错
应用该Role资源:
kubectl apply -f kong-service-reader-role.yaml
步骤3:绑定Role到Kong服务账号
新建kong-service-reader-binding.yaml文件,写入以下配置:
apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: kong-service-reader-binding namespace: kong subjects: - kind: ServiceAccount name: kong-serviceaccount namespace: kong roleRef: kind: Role name: kong-service-reader apiGroup: rbac.authorization.k8s.io
应用该RoleBinding资源:
kubectl apply -f kong-service-reader-binding.yaml
步骤4:验证修复效果
手动删除异常Pod触发重建,或者等待Pod自动重启:
kubectl delete pod <你的异常kong-pod名称> -n kong
Pod重建完成后查看运行状态:
kubectl get pods -n kong
如果两个容器都处于Running状态则修复完成,也可以查看ingress-controller容器日志确认没有权限类报错。
注意事项
- 如果你部署的是集群级别的Kong Ingress Controller,需要跨命名空间访问资源,可以将上述Role替换为ClusterRole、RoleBinding替换为ClusterRoleBinding,删除配置中的namespace字段即可。
- 如果你使用官方Helm Chart部署Kong,默认会自动创建所需的RBAC资源,出现该问题大概率是部署时关闭了
rbac.create配置项,重新部署时开启该参数即可避免手动配置权限。
内容的提问来源于stack exchange,提问作者samm13
相关产品推荐
相关产品推荐

