Kubernetes服务帐户访问所有名称空间
我正在尝试从另一个pod访问所有名称空间和pod。因此,我创建了clusterrole、clusterrolebinding和服务帐户。我能够访问唯一的客户名称空间资源。但我需要访问所有名称空间资源。可能吗Kubernetes服务帐户访问所有名称空间,kubernetes,kubectl,kubernetes-pod,Kubernetes,Kubectl,Kubernetes Pod,我正在尝试从另一个pod访问所有名称空间和pod。因此,我创建了clusterrole、clusterrolebinding和服务帐户。我能够访问唯一的客户名称空间资源。但我需要访问所有名称空间资源。可能吗 apiVersion: v1 kind: ServiceAccount metadata: name: spinupcontainers namespace: customer --- kind: ClusterRole apiVersion: rbac.authorization
apiVersion: v1
kind: ServiceAccount
metadata:
name: spinupcontainers
namespace: customer
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: spinupcontainers
namespace: customer
rules:
- apiGroups: [""]
resources: ["pods", "pods/exec"]
verbs: ["get", "list", "delete", "patch", "create"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: spinupcontainers
namespace: customer
subjects:
- kind: ServiceAccount
name: spinupcontainers
roleRef:
kind: ClusterRole
name: spinupcontainers
apiGroup: rbac.authorization.k8s.io
有人能帮忙解决这个问题吗
提前感谢在您的YAML示例中,您使用的是RoleBinding,而不是ClusterRoleBinding。RoleBinding仅授予命名空间内的那些权限。另见: RoleBinding授予特定命名空间内的权限,而 ClusterRoleBinding授予访问群集范围的权限
在YAML示例中,似乎您使用的是RoleBinding,而不是ClusterRoleBinding。RoleBinding仅授予命名空间内的那些权限。另见: RoleBinding授予特定命名空间内的权限,而 ClusterRoleBinding授予访问群集范围的权限
首先,您应该为部署创建服务,例如,如果服务的名称是test service,并且它在测试命名空间中运行,那么您应该与该服务进行通信,如test-service.test。在kubedns中,test-service.test将解析为ip,您可以与其他命名空间中的服务进行通信首先,您应该为部署创建服务,例如,如果服务的名称为test service,并且它在测试命名空间中运行,您应该与此服务进行通信,如test-service.test。在kubedns中,test-service.test将解析为ip,您可以与其他命名空间中的服务通信最重要的是,您必须使用正确的群集角色绑定将您的服务帐户连接到您的群集角色。因为绑定类型决定了服务范围帐户的能力。在这些情况下,您必须描述集群角色绑定,如下所示
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: spinupcontainers
subjects:
- kind: ServiceAccount
name: spinupcontainers
namespace: customer
roleRef:
kind: ClusterRole
name: spinupcontainers
apiGroup: "rbac.authorization.k8s.io"
如果您想在pod中测试这一点,请描述pod的相应服务帐户,如下所示:
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: busybox
name: busybox
spec:
containers:
- args:
- sleep
- "4800"
image: busybox:1.28
name: busybox
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Never
serviceAccountName: default
status: {}
最后,您需要ssh到pod,并可以使用服务帐户令牌执行正确的curl命令。不要忘记,您可以通过定义的服务帐户在pod中找到令牌文件,然后在/var/run/secrets/kubernetes.io/servicecomport中找到pod yaml。之后,如果使用kubeadm创建集群,则必须执行API调用以使用kubernetes API服务器服务。它已经在默认名称空间中定义为kubernetes。在下面,您可以找到适当的apı调用来获取默认名称空间机密
curl -k -H "Authorization: Bearer $TOKEN" https://<kubernetes-apı-fqdn>/api/v1/namespaces/default/secrets
最重要的是,您必须使用正确的集群角色绑定将您的服务帐户连接到您的集群角色。因为绑定类型决定了服务范围帐户的能力。在这些情况下,您必须描述集群角色绑定,如下所示
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: spinupcontainers
subjects:
- kind: ServiceAccount
name: spinupcontainers
namespace: customer
roleRef:
kind: ClusterRole
name: spinupcontainers
apiGroup: "rbac.authorization.k8s.io"
如果您想在pod中测试这一点,请描述pod的相应服务帐户,如下所示:
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: busybox
name: busybox
spec:
containers:
- args:
- sleep
- "4800"
image: busybox:1.28
name: busybox
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Never
serviceAccountName: default
status: {}
最后,您需要ssh到pod,并可以使用服务帐户令牌执行正确的curl命令。不要忘记,您可以通过定义的服务帐户在pod中找到令牌文件,然后在/var/run/secrets/kubernetes.io/servicecomport中找到pod yaml。之后,如果使用kubeadm创建集群,则必须执行API调用以使用kubernetes API服务器服务。它已经在默认名称空间中定义为kubernetes。在下面,您可以找到适当的apı调用来获取默认名称空间机密
curl -k -H "Authorization: Bearer $TOKEN" https://<kubernetes-apı-fqdn>/api/v1/namespaces/default/secrets