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
Kubernetes-Service Account的更多相关文章
- Kubernetes Service Account如何生成Token
Service Account是运行pods用到的帐号,默认是default.如果apiserver启动配置--admission-control=ServiceAccount,Service Acc ...
- [置顶]
kubernetes资源类型--secret和Service Account
secret 概念 secret对象类型主要目的是保存和处理敏感信息/私密数据,比如密码,OAuth tokens,ssh keys等信息.将这些信息放在secret对象中比 直接放在pod或dock ...
- kubernetes的Service Account和secret
系列目录 Service Account Service Account概念的引入是基于这样的使用场景:运行在pod里的进程需要调用Kubernetes API以及非Kubernetes API的其它 ...
- Service Account和RBAC授权
一.介绍 Service Account概念的引入是基于这样的使用场景:运行在pod里的进程需要调用Kubernetes API以及非Kubernetes API的其它服务.Service Accou ...
- k8s学习笔记之九: Service Account
第一章.前言 每一个用户对API资源进行操作都需要通经过以下三个步骤: 第一步:对客户端访问进行认证操作,确认是否具有访问k8s权限 token(共享秘钥) SSL(双向SSL认证) ....通过任何 ...
- Service Account和其secrets 作用和场景,看了不亏。。
Service Account概念的引入是基于这样的使用场景: 运行在pod里的进程需要调用Kubernetes API以及非Kubernetes API的其它服务.Service Account它并 ...
- 错误: No API token found for service account "default",
[root@kubernetes-master pods]# kubectl create -f mysql.yaml Error from server (ServerTimeout): error ...
- k8s的认证和service account简述
k8s的认证: 与API server通信的客户端大致有两类: 1.集群客户端工具(kubectl.kubeadm.kubelet等) 2.集群内pod. 任何客户端访问k8s时的过程: 1.认 ...
- SQL Server 2012 Managed Service Account
原创地址:http://www.cnblogs.com/jfzhu/p/4007472.html 转载请注明出处 (一)Windows服务使用的登陆帐号 Windows服务只有登录到某一帐户的情况下才 ...
- SSRS2:Reporting Service 配置Service Account
1,Service Account SSRS以一个Service方式实现,有三部分组成:Web Service,Report Manager和一个后台的进程,这个Service运行的账号就是Servi ...
随机推荐
- 【css基础】html图片右上角加上删除按钮
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- yjh_study_command
1.show current user in oralce ansower:show user 2.search name of table in current user model. answ ...
- Nginx-php-mysql
1.依赖包 yum -y install pcre* openssl*2.phprpm -Uvh https://mirror.webtatic.com/yum/el6/latest.rpmyum i ...
- Docker入门系列之二:使用dockerfile制作包含指定web应用的镜像
实现题目描述的这个需求有很多种办法,作为入门,让我们从最简单的办法开始. 首先使用命令docker ps确保当前没有正在运行的Docker实例. 运行命令docker run -it nginx: 然 ...
- 二、 OSI模型的实现TCP 、IP
主要名词定义: IPIP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层---TCP或UDP层:相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层.I ...
- Django:Django的路由系统
一,URLconf配置 1,基本格式 from django.conf.urls import url urlpatterns = [ url(正则表达式, views视图函数,参数,别名), ] 2 ...
- Django:web框架本质
一,web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现Web框架了. 1,自定义web框架 impo ...
- Python语言程序设计基础(5)—— 函数和代码复用
lambda sum = lambda x,y : x + y print(sum(3,3),type(sum)) 默认参数 def prints(str,times = 2) : print(str ...
- POJ 3020 Antenna Placement 【最小边覆盖】
传送门:http://poj.org/problem?id=3020 Antenna Placement Time Limit: 1000MS Memory Limit: 65536K Total ...
- HTML5之转动的轮子
<!doctype html><html> <head></head> <body> <canvas width="1000 ...