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

Kubernetes 1.22调用Client获取Ingress列表返回Forbidden错误如何解决

问题原因

  1. Kubernetes 1.22版本正式废弃并移除了extensions/v1beta1、networking.k8s.io/v1beta1两个旧版本Ingress API,仅保留networking.k8s.io/v1版本Ingress API。低于5.0.0版本的Kubernetes C#客户端默认请求旧版本Ingress API,1.22+集群无法识别对应资源路径,会触发权限类报错。
  2. 现有RBAC权限配置未适配新版本Ingress的API组归属:1.22版本之后Ingress资源统一归属networking.k8s.io API组,旧权限规则如果未明确指定该API组,会导致权限校验不通过,返回Forbidden错误。
  3. 代码参数存在逻辑错误:ListNamespacedIngressWithHttpMessagesAsync方法的第一个入参为命名空间名称,现有代码传入了Ingress名称,会导致请求无效的命名空间路径,同样会触发权限校验失败。

解决方案

  • 升级Kubernetes C#客户端到5.0.0及以上稳定版本,新版本已默认适配networking.k8s.io/v1版本Ingress API,兼容1.22+集群。
  • 修正ClusterRole权限规则,明确指定Ingress资源的API组,参考配置如下:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: ingress-operate-role
rules:
  # 适配1.22+版本Ingress资源规则
  - apiGroups: ["networking.k8s.io"]
    resources: ["ingresses", "ingressclasses"]
    verbs: ["create", "update", "patch", "delete", "get", "list", "watch", "deletecollection"]
  # 原有核心资源权限规则保留即可
  - apiGroups: [""]
    resources: ["services", "endpoints", "pods"]
    verbs: ["create", "update", "patch", "delete", "get", "list", "watch", "deletecollection"]
  - apiGroups: ["apps"]
    resources: ["deployments"]
    verbs: ["create", "update", "patch", "delete", "get", "list", "watch", "deletecollection"]
  • 优化Ingress查询逻辑,直接调用单资源查询接口避免参数错误,正确代码示例如下:
// 第一个参数为Ingress所在命名空间,第二个参数为Ingress名称
var objIngress = await client.ReadNamespacedIngressAsync("your-target-namespace", "MyIngress");
var patchSpec = objIngress.Spec;
  • 若使用命名空间级别的RoleBinding绑定权限,需确认绑定的命名空间和Ingress实际所在的命名空间一致,避免跨命名空间权限不足。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:09:00