使用RBAC访问kubernetes中的单个pod
我只想使用kubectl远程访问一个吊舱,所以遵循前面提到的说明 为此,我在kubernetes中创建了一个使用RBAC访问kubernetes中的单个pod,kubernetes,devops,rbac,Kubernetes,Devops,Rbac,我只想使用kubectl远程访问一个吊舱,所以遵循前面提到的说明 为此,我在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
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
apiVersion:v1
种类:配置
首选项:{}
#定义集群
集群:
-群集:
证书颁发机构数据:
#此处需要集群的API端点:
服务器:https://:6443
姓名:kubernetes
#定义用户
用户:
-姓名:devops用户
用户:
作为用户额外:{}
客户端密钥数据:
代币:
#定义上下文:将用户链接到集群
上下文:
-背景:
集群:kubernetes
名称空间:默认值
用户:devops用户
名称:默认值
#定义当前上下文
当前上下文:默认值
现在我可以“完全访问”所有播客,但这不是我想要的。我只想:
我只想“完全访问”一个吊舱
只需将其添加到您的角色文件中
resourceNames: ["POD_NAME"]
所以您的角色yaml文件应该是这样的
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: devops-user-limited-access
namespace: default
rules:
- apiGroups: ["", "extensions", "apps"]
resources: ["pods", "pods/log"]
resourceNames: ["POD_NAME"] <-------------------------------here
verbs: ["get", "list"]
种类:角色
apiVersion:rbac.authorization.k8s.io/v1beta1
元数据:
名称:devops用户有限访问
名称空间:默认值
规则:
-APIgroup:[“”、“扩展”、“应用程序”]
资源:[“pods”,“pods/log”]
resourceNames:[“POD_NAME”]我建议用不同的方法来解决这个问题。您可以使用特定的键值标记pod,然后使用策略引擎并使用策略语言编写策略,该语言允许特定服务帐户使用该特定的标签在pod上执行某些操作,如读、写等
在OPA中,验证webhook将根据您定义的策略允许或拒绝请求
正如其他答案中所建议的,如果您的pod是由部署创建的,那么kubernetes提供的RBAC将不起作用,因为在这种情况下,pod名称是动态生成的。使用OPA,您可以比Kubernetes RBAC拥有更精细的控制。现在kubectl get pod
抛出此错误:服务器错误(禁止):pod被禁止:用户“系统:服务帐户:默认:devops用户”无法在命名空间“默认”中列出API组“”中的资源“pod”@VahidF您确定您在默认名称空间中拥有该pod和角色吗?@VahidF通过使用kubectl auth can-i get pods-n default-作为devops用户检查您得到的答案。确保你想要的豆荚在同一个位置namespace@VahidF你能描述一下devops用户有限访问的角色吗?
kubectl否。我正在设法向你展示输出。