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

跨命名空间Kubernetes Ingress控制器无法读取指定证书,使用默认证书

问题分析与解决方案

核心问题

你遇到的是跨命名空间权限不足导致NGINX Ingress控制器无法读取目标命名空间的TLS Secret,从而 fallback到默认证书。报错中的"local"指的是Ingress控制器自身运行的命名空间,控制器默认仅拥有自身命名空间的资源访问权限,无法直接读取其他命名空间的Secret。

必要配置:RBAC权限扩展

要解决这个问题,需要给Ingress控制器的ServiceAccount添加读取目标命名空间(connectivity-proxy)中Secret资源的权限,步骤如下:

1. 创建读取Secret的ClusterRole

创建一个具备Secret读取权限的ClusterRole:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: ingress-secret-reader
rules:
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get", "list", "watch"]

2. 绑定权限到Ingress控制器的ServiceAccount

将上述ClusterRole绑定到Ingress控制器所在命名空间的ServiceAccount,限定作用于connectivity-proxy命名空间:

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: ingress-secret-reader-binding
  namespace: connectivity-proxy
subjects:
- kind: ServiceAccount
  name: <你的Ingress控制器ServiceAccount名称>
  namespace: <Ingress控制器运行的命名空间>
roleRef:
  kind: ClusterRole
  name: ingress-secret-reader
  apiGroup: rbac.authorization.k8s.io

提示:替换<你的Ingress控制器ServiceAccount名称>和<Ingress控制器运行的命名空间>为实际值,比如默认NGINX Ingress控制器的ServiceAccount通常是nginx-ingress,命名空间为nginx-ingress或kube-system。

额外验证点

  • 确认Ingress的tls.secretName配置正确:你的Ingress与Secret同属connectivity-proxy命名空间,因此无需在secretName前添加命名空间前缀,当前配置cdf-conn-proxy-ingress-secret是正确的。
  • 检查Secret完整性:你的Secret类型为kubernetes.io/tls,且包含tls.crt和tls.key字段,格式符合要求。
  • 重启Ingress控制器:权限配置生效后,建议重启控制器Pod以加载新的RBAC规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 09:26:01