代码之家  ›  专栏  ›  技术社区  ›  Ijaz Ahmad

Kubernetes命名空间默认服务帐户

  •  3
  • Ijaz Ahmad  · 技术社区  · 7 年前

    如果未指定,pod将在默认服务帐户下运行。

    • 如何检查默认服务帐户的权限?
    • 我们需要把每个吊舱都装在那里吗?
    • 默认服务帐户还应该处理哪些用例?
    • 我们可以将其用作服务帐户来创建和管理命名空间中的Kubernetes部署吗?例如,我们不会使用真实的用户帐户在集群中创建东西,因为用户来来往往。

    环境:Kubernetes 1.12,带RBAC

    2 回复  |  直到 6 年前
        1
  •  39
  •   David Medinets doug    6 年前
    1. 为每个命名空间自动创建一个默认服务帐户。

    kubectl获取服务帐户

    姓名和年龄

    默认值1 1d

    1. 可以在需要时添加服务帐户。每个pod只与一个服务帐户关联,但多个pod可以使用同一个服务帐户。

    2. 通过在pod清单中指定帐户名称,服务帐户被分配给pod。如果您没有明确分配它,pod将使用默认的服务帐户。

    3. 列出或修改任何资源。默认服务帐户不允许查看群集状态,更不用说以任何方式修改它。

    kubectl exec-it测试-n foo sh/#curl
    “apiVersion”:“v1”,“元数据”:{

    },“status”:“Failure”,“message”:“禁止服务:User” "system:serviceaccount:foo:default“无法列出资源 命名空间“foo”“reason”中API组“”中的“services”: “禁止”,“细节”:{ “kind”:“services”},“code”:403

    但当给予适当的角色和角色绑定时,如下所示

    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      creationTimestamp: null
      name: foo-role
      namespace: foo
    rules:
    - apiGroups:
      - ""
      resources:
      - services
      verbs:
      - get
      - list
    
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      creationTimestamp: null
      name: test-foo
      namespace: foo
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: Role
      name: foo-role
    subjects:
    - kind: ServiceAccount
      name: default
      namespace: foo
    

    现在我可以列出复活服务

    kubectl exec -it test -n foo sh
    / # curl localhost:8001/api/v1/namespaces/foo/services
    {
      "kind": "ServiceList",
      "apiVersion": "v1",
      "metadata": {
        "selfLink": "/api/v1/namespaces/bar/services",
        "resourceVersion": "457324"
      },
      "items": []
    
    1. clusteradmin ClusterRole是一个 坏主意。最好只给每个人完成工作所需的权限,而不是一个权限。

    2. 最好为每个pod创建一个特定的服务帐户 角色绑定。

    3. 如果一个pod只需要读取pod,而另一个也需要修改它们,那么创建两个不同的服务帐户,并通过指定 serviceaccountName 中的属性 吊舱规格。

    您可以参考下面的链接以获得深入的解释。

    Service account example with roles

    你可以查一下 kubectl explain serviceaccount.automountServiceAccountToken

    apiVersion: v1
    automountServiceAccountToken: false
    kind: ServiceAccount
    metadata:
      creationTimestamp: 2018-10-14T08:26:37Z
      name: default
      namespace: default
      resourceVersion: "459688"
      selfLink: /api/v1/namespaces/default/serviceaccounts/default
      uid: de71e624-cf8a-11e8-abce-0642c77524e8
    secrets:
    - name: default-token-q66j4
    

    完成此更改后,您生成的任何一个pod都没有serviceaccount令牌,如下所示。

    kubectl exec tp -it bash
    root@tp:/# cd /var/run/secrets/kubernetes.io/serviceaccount
    bash: cd: /var/run/secrets/kubernetes.io/serviceaccount: No such file or directory
    
        2
  •  4
  •   apisim    7 年前

    应用程序/部署可以使用服务帐户而不是 default 通过在 serviceAccountName 部署配置的字段。

    我的服务帐户或任何其他用户可以做什么,取决于它所扮演的角色(绑定到的角色)-请参阅roleBindings或clusterRoleBindings;动词是按角色的 apiGroups 和 resources 在 rules

    默认情况下,服务帐户似乎没有被赋予任何角色。可以将角色授予 违约 here

    this ,“…在版本1.6+中,您可以通过设置 automountServiceAccountToken: false

    HTH公司