Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes服务帐户访问所有名称空间_Kubernetes_Kubectl_Kubernetes Pod - Fatal编程技术网

Kubernetes服务帐户访问所有名称空间

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

我正在尝试从另一个pod访问所有名称空间和pod。因此,我创建了clusterrole、clusterrolebinding和服务帐户。我能够访问唯一的客户名称空间资源。但我需要访问所有名称空间资源。可能吗

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