如何从Kubernetes配置提取值到Web应用并获取集群Ingress数据
方案可行性结论
这个思路完全可行,属于Kubernetes内部自研运维工具的常规落地路径,没有原理性问题。
该方案的核心优势
- 权限控制安全:通过ServiceAccount绑定RBAC权限,可以做到最小权限原则,只给后端分配Ingress资源的只读权限,不会产生越权操作集群的风险
- 部署成本低:不需要额外对接集群外的监控数据源或者配置kubeconfig凭证,应用直接部署在集群内就能自动获取ServiceAccount的凭证,调用K8s API非常方便
- 架构简单易维护:前后端分离的结构,后端只需要做轻量的K8s API数据封装、甚至直接做代理转发,前端用Axios请求后端接口拉取数据渲染即可,不需要复杂的中间件
实操过程的注意点
- 记得给ServiceAccount绑定对应的RBAC规则,示例配置可以参考下面的代码段:
apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: 你要监听的命名空间 # 要监听集群所有命名空间就替换为ClusterRole rules: - apiGroups: ["networking.k8s.io"] resources: ["ingresses"] verbs: ["get", "list", "watch"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: namespace: 你要监听的命名空间 subjects: - kind: ServiceAccount name: 你的后端绑定的ServiceAccount名称 namespace: 你的后端应用部署的命名空间 roleRef: kind: Role name: 上面定义的Role名称 apiGroup: rbac.authorization.k8s.io
- 后端调用K8s API的时候直接用集群内的默认域名
kubernetes.default.svc即可,不需要额外配置API Server地址,ServiceAccount的token和CA证书会自动挂载到Pod的/var/run/secrets/kubernetes.io/serviceaccount/目录下,大部分K8s客户端SDK都能自动读取这些凭证完成鉴权 - 如果后端不需要对Ingress数据做额外处理,也可以直接给后端做API代理,把K8s API的Ingress查询接口直接代理给前端,减少重复编码
- 前端调用后端接口的时候,注意处理跨域问题,要么前后端统一用Ingress做路径路由转发,要么后端配置CORS规则即可
内容的提问来源于stack exchange,提问作者Sheen
相关产品推荐
相关产品推荐

