使用RBAC授予对Kubernetes中单个Pod的访问权限

时间:2020-07-23 13:09:46

标签: kubernetes devops rbac

我只想使用kubectl远程访问一个吊舱,因此请遵循here中提到的说明。

为此,我在kubernetes中创建了一个access.yml文件:

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: devops-user
  namespace: default

---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: devops-user-limited-access
  namespace: default
rules:
- apiGroups: ["", "extensions", "apps"]
  resources: ["*"]
  verbs: ["*"]

---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: devops-user-view
  namespace: default
subjects:
- kind: ServiceAccount
  name: devops-user
  namespace: default
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: devops-user-limited-access

在远程笔记本电脑中,我在~/.kube/config中创建了一个文件,如下所示:

apiVersion: v1
kind: Config
preferences: {}

# Define the cluster
clusters:
- cluster:
    certificate-authority-data: <my-ca.crt>
    # You'll need the API endpoint of your Cluster here:
    server: https://<server-ip>:6443
  name: kubernetes

# Define the user
users:
- name: devops-user
  user:
    as-user-extra: {}
    client-key-data: <my-ca.crt>
    token: <token-created-by-k8s>

# Define the context: linking a user to a cluster
contexts:
- context:
    cluster: kubernetes
    namespace: default
    user: devops-user
  name: default

# Define current context
current-context: default

现在我可以“完全访问”“所有豆荚”,但这不是我想要的。我只想拥有:

我只希望对“一个容器”进行“完全访问”。

2 个答案:

答案 0 :(得分:1)

只需将此添加到您的角色文件中

http://192.168.1.27/api/v4/projects/3/repository/tree?recursive=true

所以您的角色yaml文件应该是这样的

resourceNames: ["POD_NAME"]

答案 1 :(得分:0)

我建议使用其他方法来解决此问题。您可以使用特定的键值标记Pod,然后使用OPA策略引擎并使用rego策略语言编写策略,该策略语言允许特定的服务帐户对Pod进行某些操作,例如在Pod上进行读取,写入等特定标签。

在OPA中,验证网钩会根据您定义的策略允许或拒绝该请求。

如其他答案中所建议,如果您的Pod是由部署创建的,那么Kubernetes提供的RBAC将不起作用,因为在这种情况下,Pod的名称是动态生成的。使用OPA,您可以比Kubernetes RBAC拥有更精细的控制。