在Cluster Config中部署在非默认名称空间中时无法获取pod

时间:2018-11-20 14:08:09

标签: go kubernetes client-go

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

这是一个安全问题吗?

谢谢。

2 个答案:

答案 0 :(得分:2)

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

  

如果未定义广告连播中的服务帐户,则它将使用default服务帐户。

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

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

查看特定的角色绑定

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

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

答案 1 :(得分:0)

以下是我在minikube群集上使用的操作,以使默认服务帐户可以访问公共资源上的crud ops。显而易见的警告是,在实际群集上需要小心。

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
相关问题