• Kubernetes-Service Account


    • kube-apiserver

    配置文件:/etc/kubernetes/apiserver

    KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"

    KUBE_API_PORT="--port=8080"

    KUBE_ETCD_SERVERS="--etcd-servers=http://127.0.0.1:2379"

    KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"

    KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota,ServiceAccount"

    KUBE_API_ARGS=""

    Configure Service Accounts for Pods

    ServiceAccount给运行在Pod中的进程提供一个身份。

    若要详细了解,需要参考文档https://kubernetes.io/docs/admin/service-accounts-admin/

    注:这篇文章描述了ServiceAccount在Kubernetes集群中的表现方式。你的集群管理员可能有自定义的表现在你自己的集群中,所以在某些情景下面,这篇文档并不符合。

    当你可以进入到集群(kubectl),你将被apiserver认定为一个特殊的用户(admin,除非你的集群管理员有自定义了集群的某些设置),在Pod中的容器中的进程也可以与apiserver通信,当他们通信的时候,他们将被认定为一个特殊的ServiceAccount(default)。

    Use the Default Service Account to access the API server

    当你创建一个Pod并没有指定一个service account,它将自动的为Pod在相同的namespace中分配default service account。当你截取你所创建的Pod信息为json或yaml格式输出(例如:kubectl get pods/podname -o yaml ),你将会看到spec.serviceAccountName字段被自动的设置。

    Pod可以使用自动挂载的service account凭证来获取访问API的权限,就如在访问集群的时候一样。service account的权限取决于在用的认证插件及策略。

    在1.6版本以后,你可以通过设置automountServiceAccountToken:false对某个service account不加载API凭证:

    apiVersion: v1

    kind:ServiceAccount

    metadata:

        name:build-robot

    automountServiceAccountToken:false

    在1.6版本之后,你可以选择不加载API凭据到一个特殊的Pod中:

    apiVersion:v1

    kind:Pod

    metadata:

        name:my-pod

    spec:

        serviceAccountName:build-robot

        automountServiceAccountToken:false

    如果在Pod和ServiceAccout中均设置的automountServiceAccountToken,在Pod的sepc中设置的优先于在service account。

    Use Multiple Service Accounts

    每一个namespace都有一个默认的service account(default),可以通过如下命令来列出相应namespace下的所有service account:

    • kubectl get serviceAccount

    你也可以创建额外的ServiceAccount如:

    • cat serviceaccount.yaml

    apiVersion:v1

    kind:ServiceAccount

    metadata:

        name:build-robot

    •     kubectl create -f serviceaccount.yaml

    如果你查看一个完整的serviceaccount,如下:

    $ kubectl get serviceaccounts/build-robot -o yaml
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      creationTimestamp: 2015-06-16T00:12:59Z
      name: build-robot
      namespace: default
      resourceVersion: "272500"
      selfLink: /api/v1/namespaces/default/serviceaccounts/build-robot
      uid: 721ab723-13bc-11e5-aec2-42010af0021e
    secrets:
    - name: build-robot-token-bvbk5

    通过上面的信息就可以发现,一个令牌被自动创建生成并被ServiceAccount引用。

    你也可以通过认证插件来设置service account的权限。

    如果你不想使用默认的service account,只需要在spec.serviceAccountName字段设置你想使用的serviceaccount的名字就可以了。

    可以通过如下命令对serviceaccount进行清除:

    • kubectl delete serviceaccount/build-robot

    Manaually create a service account API token

    假如有一个已经存在的service account叫“build-robot”,我们手动创建一个新的secret。

    • cat build-robot-secret.yaml

    apiVersion: v1

    kind:Secret

    metadata:

        name:build-robot-secret

        annotations:

            kubernetes.io/service-account.name:build-robot

    type:kubernetes.io/service-account-token

    • kubectl create -f build-robot-secret.yaml

    现在你可以确认新构建的secret使用了build-robot的service account的API令牌。

    不存在的service account的任何令牌都将被令牌控制器清理。

    • kubectl describe secrets/build-robot-secret
    $ kubectl describe secrets/build-robot-secret
    Name:           build-robot-secret
    Namespace:      default
    Labels:         <none>
    Annotations:    kubernetes.io/service-account.name=build-robot
                    kubernetes.io/service-account.uid=da68f9c6-9d26-11e7-b84e-002dc52800da
    
    Type:   kubernetes.io/service-account-token
    
    Data
    ====
    ca.crt:         1338 bytes
    namespace:      7 bytes
    token:          ...

    注:此处令牌的内容被省略

    Add ImagePullSecret to a service account

    首先创建一个imagePullSecret,然后再验证他被创建。

    • kubectl get secrets myregistrykey
    • kubectl patch serviceaccount default -p ‘{“imagePullSecrets”:[{"name":myregistrykey}]}’

    上面的命令则是修改一个namespace默认的service account,使其用这个secret作为一个imagePullSecret。

    互动版本需要手动编辑:

    • kubectl get serviceaccounts default -o yaml > ./sa.yaml
    • cat sa.yaml

    apiVersion: v1

    kind: ServiceAccount

    metadata:

        creationTimestamp: 2017-11-20T22:23:33Z

        name: default

        namespace: default

        resourceVersion: "243024"

        selfLink: /api/v1/namespace/default/serviceaccounts/default

        uid: 3ee3453r-3erfd-112e-33rf-dfgt5678ujyh

    secrets:

    - name: default-token-uudge

    • vi sa.yaml

    [editor session not shown]

    [delete line with key "resourceVersion"]

    [add lines with "imagePullSecret:"]

    • cat sa.yaml

    apiVersion: v1

    kind: ServiceAccount

    metadata:

        creationTimestamp: 2017-11-20T22:23:33Z

        name: default

        namespace: default

        resourceVersion: "243024"

        selfLink: /api/v1/namespace/default/serviceaccounts/default

        uid: 3ee3453r-3erfd-112e-33rf-dfgt5678ujyh

    secrets:

    - name: default-token-uudge

    imagePullSecrets:

    - name: myregistrykey

    在这个namespace中任何创建的新的pods将会加上这个imagePullSecrets。

    spec:

        imagePullSecrets:

        - name: myregistrykey

  • 相关阅读:
    MVCC浅析
    brew 安装的.net 运行时提示"Did you mean to run dotnet SDK commands?"
    PyCharm for Mac 调整字体大小
    PowerShell 解决红字一闪而过问题
    Shell 环境变量也是变量
    软件选择的起点:目的与需求
    macOS 不用任何第三方工具 简单两步使用 Automator 将截图转成@1x
    Mac 查看 剪贴板/剪切板/粘贴板 内容与格式
    Docker 网络相关 (系统学习Docker04)
    Docker 的镜像和容器(系统学习Docker03)
  • 原文地址:https://www.cnblogs.com/cf532088799/p/7868938.html
Copyright © 2020-2023  润新知