0

当我将我的 golang 服务部署到命名空间以外的任何命名default空间时,该服务无法检索任何命名空间上的 pod。default使用 golang client-go api部署在命名空间上的相同服务完美运行。

这是一个安全问题吗?

谢谢。

4

2 回答 2

2

这个问题是权限问题。由于您正在使用rest.InClusterConfig(config)创建客户端。这意味着它使用 pod 的服务帐户作为凭证。因此,请检查该服务帐户是否有权获取任何命名空间中的 pod。

如果 pod 中的 service account 没有定义,那么它将使用defaultservice account。

如果您的集群中启用了 RBAC,则检查该命名空间中的角色绑定,以确定您的服务帐户是否具有权限。

# to see the list of role bindings in 'default' namespace
kubectl get rolebindings --namespace default

看具体的rolebinding

kubectl get rolebindings ROLE-BINDING-NAME --namespace default -o yaml

您还可以创建角色和角色绑定以授予权限。要了解 RBAC 角色和角色绑定,请参见此处:https ://kubernetes.io/docs/reference/access-authn-authz/rbac/

于 2018-11-20T14:53:38.130 回答
0

以下是我在 minikube 集群上使用的,用于授予默认服务帐户访问公共资源上的 crud 操作的权限。明显的警告是,您需要在真正的集群上小心。

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: crud-role
  namespace: default
rules:
- apiGroups: ["", "apps", "batch"]
  resources: [ "deployments", "jobs", pods", "replicasets", services" ]
  verbs: [ "create", "get", "list", "delete"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: crud-role-binding
  namespace: default
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: crud-role
subjects:
  - kind: ServiceAccount
    name: default
    namespace: default
于 2019-01-05T01:21:29.353 回答