• 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

Kubernetes-Service Account的更多相关文章

  1. Kubernetes Service Account如何生成Token

    Service Account是运行pods用到的帐号,默认是default.如果apiserver启动配置--admission-control=ServiceAccount,Service Acc ...

  2. [置顶] kubernetes资源类型--secret和Service Account

    secret 概念 secret对象类型主要目的是保存和处理敏感信息/私密数据,比如密码,OAuth tokens,ssh keys等信息.将这些信息放在secret对象中比 直接放在pod或dock ...

  3. kubernetes的Service Account和secret

    系列目录 Service Account Service Account概念的引入是基于这样的使用场景:运行在pod里的进程需要调用Kubernetes API以及非Kubernetes API的其它 ...

  4. Service Account和RBAC授权

    一.介绍 Service Account概念的引入是基于这样的使用场景:运行在pod里的进程需要调用Kubernetes API以及非Kubernetes API的其它服务.Service Accou ...

  5. k8s学习笔记之九: Service Account

    第一章.前言 每一个用户对API资源进行操作都需要通经过以下三个步骤: 第一步:对客户端访问进行认证操作,确认是否具有访问k8s权限 token(共享秘钥) SSL(双向SSL认证) ....通过任何 ...

  6. Service Account和其secrets 作用和场景,看了不亏。。

    Service Account概念的引入是基于这样的使用场景: 运行在pod里的进程需要调用Kubernetes API以及非Kubernetes API的其它服务.Service Account它并 ...

  7. 错误: No API token found for service account "default",

    [root@kubernetes-master pods]# kubectl create -f mysql.yaml Error from server (ServerTimeout): error ...

  8. k8s的认证和service account简述

    k8s的认证: 与API server通信的客户端大致有两类:  1.集群客户端工具(kubectl.kubeadm.kubelet等)  2.集群内pod. 任何客户端访问k8s时的过程:  1.认 ...

  9. SQL Server 2012 Managed Service Account

    原创地址:http://www.cnblogs.com/jfzhu/p/4007472.html 转载请注明出处 (一)Windows服务使用的登陆帐号 Windows服务只有登录到某一帐户的情况下才 ...

  10. SSRS2:Reporting Service 配置Service Account

    1,Service Account SSRS以一个Service方式实现,有三部分组成:Web Service,Report Manager和一个后台的进程,这个Service运行的账号就是Servi ...

随机推荐

  1. java maven项目 导入jar包注意

    1.将jar 包放到lib目录下 2.build path 3.点击maven主项目右键选择properties 4.选择myeclipse 下的第一个选项 5.点击add   选择archives ...

  2. May 16th 2017 Week 20th Tuesday

    The most fearful enemy is not having a firm conviction. 最可怕的敌人,就是没有坚强的信念. A firm conviction or belie ...

  3. 108. Convert Sorted Array to Binary Search Tree (building tree with resursion)

    Given an array where elements are sorted in ascending order, convert it to a height balanced BST. Fo ...

  4. LeetCodeOJ刷题之15-16【3Sum(三数和问题)】

    本文为两个题:[三数和(3Sum)]与[最近三数和(3Sum Closest)]问题 第一部分分析3Sum问题,第二部分分析3Sum Closest问题,由于两个问题的思路很像,所以这里放到一起分析. ...

  5. selenium使用js进行点击

    WebElement button = driver.findElement(By.xpath("/html/body/div[1]/div[3]/h2/div[2]")); Ja ...

  6. python:线程进阶

    1,守护线程 import time from threading import Thread def func(): print('开始执行子线程') time.sleep(3) print('子线 ...

  7. PHP设计模式——桥接模式

    <?php /* * 桥接模式 * 使用发送器,将一个类对象传入另一个类作为属性,耦合M+N个类 * */ abstract class Info { protected $_send = NU ...

  8. Window下搭建foundation apps环境

    Window下搭建foundation apps环境 框架:AngularJS.Foundation, 构建工具:Gulp, 开发环境:node.js. 操作系统:windows (一)环境准备 1 ...

  9. HDU 1426 Sudoku Killer(dfs 解数独)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1426 Sudoku Killer Time Limit: 2000/1000 MS (Java/Oth ...

  10. jsp中java代码、jsp代码、js代码执行的顺序

    原理: jsp中的Java代码 -- 服务器端代码 js代码 -- 客户端代码 java是在服务器端运行的代码,jsp在服务器的servlet里运行,而JavaScript和html都是在浏览器端运行 ...