我正试图允许组织中的某些用户将端口转发到Kubernetes中的生产名称空间。但是,我不希望他们能够将端口转发到所有服务。我只想限制访问某些服务。这可能吗?
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: allow-port-forward-for-deployment-a
rules:
- apiGroups: [""]
resources: ["pods/portforward"]
verbs: ["get", "list", "create"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: allow-port-forward-for-deployment-a
namespace: production
subjects:
- kind: User
name: "xyz@org.com"
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: allow-port-forward-for-deployment-a
apiGroup: rbac.authorization.k8s.io
上面的设置允许所有服务,但是我不想要。
答案 0 :(得分:2)
假设用户已经可以访问您的kubernetes
集群和相关的namespace
。他们可以简单地将本地端口移植到pod
(资源)端口。
您该怎么做?
kubectl port-forward <POD_NAME> <LOCAL_PORT>:<POD_PORT>
从文档报价-kubectl port-forward
允许使用资源名称(例如pod
名称)来选择与pod
匹配的port forward
自Kubernetes v1.10
起。
Refer this article if you wish, this nicely explains when you would need RBAC vs kubectl port-forward
RBAC
仅在您想person
或group of people
仅对{{1}中相关port-forward
中的任何服务使用namespace
时才有用}集群。
答案 1 :(得分:0)
我相信你不能。 According to the docs
对于某些请求,也可以通过名称来引用资源
resourceNames
列表。指定后,可以将请求限制为 资源的各个实例。将主题限制为仅 “获取”和“更新”单个configmap,您将编写:apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: default name: configmap-updater rules: - apiGroups: [""] resources: ["configmaps"] resourceNames: ["my-configmap"] verbs: ["update", "get"]
请注意创建请求 不能受resourceName限制,因为对象名称未知 在授权时间。另一个例外是deletecollection。
由于您要授予用户创建前向端口的权限,所以我认为您不能这样做。