如何在Kubernetes中为特定部署允许端口转发?

时间:2019-06-19 15:08:15

标签: kubernetes user-roles rbac

我正试图允许组织中的某些用户将端口转发到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

上面的设置允许所有服务,但是我不想要。

2 个答案:

答案 0 :(得分:2)

假设用户已经可以访问您的kubernetes集群和相关的namespace。他们可以简单地将本地端口移植到pod(资源)端口。

您该怎么做? kubectl port-forward <POD_NAME> <LOCAL_PORT>:<POD_PORT>

See Documentation

从文档报价-kubectl port-forward允许使用资源名称(例如pod名称)来选择与pod匹配的port forwardKubernetes v1.10起。

Refer this article if you wish, this nicely explains when you would need RBAC vs kubectl port-forward RBAC仅在您想persongroup 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。

由于您要授予用户创建前向端口的权限,所以我认为您不能这样做。