20 名词解释 Service Account

版权声明:本文为博主原创文章,如需转载请发邮件至[email protected]申请。 https://blog.csdn.net/denglelai123/article/details/80852947

Service Account

Service account是为了方便Pod里面的进程调用Kubernetes API或其他外部服务而设计的。它与User account不同
  • User account是为人设计的,而service account则是为Pod中的进程调用Kubernetes API而设计;
  • User account是跨namespace的 ,而service account则是 仅局限它所在的namespace
  • 每个namespace都会自动创建一个default service account
  • Token controller检测service account的创建,并为它们创建 secret
  • 开启ServiceAccount Admission Controller后
    • 每个Pod在创建后都会自动设置spec.serviceAccount为default(除非指定了其他ServiceAccout)
    • 验证Pod引用的service account已经存在,否则拒绝创建
    • 如果Pod没有指定ImagePullSecrets,则把service account的ImagePullSecrets加到Pod中
    • 每个container启动后都会挂载该service account的token和ca.crt到/var/run/secrets/kubernetes.io/serviceaccount/
$ kubectl exec nginx - 3137573019 - md1u2 ls / run / secrets / kubernetes . io / serviceaccount
ca . crt
namespace
token

创建Service Account

$ kubectl create serviceaccount jenkins
serviceaccount "jenkins" created
$ kubectl get serviceaccounts jenkins - o yaml
apiVersion : v1
kind : ServiceAccount
metadata :
creationTimestamp : 2017 - 05 - 27T14 : 32 : 25Z
name : jenkins
namespace : default
resourceVersion : "45559"
selfLink : /api/ v1 / namespaces / default / serviceaccounts / jenkins
uid : 4d66eb4c - 42e9 - 11e7 - 9860 - ee7d8982865f
secrets : - name : jenkins - token - l9v7v
自动创建的secret:
kubectl get secret jenkins - token - l9v7v - o yaml
apiVersion : v1
data :
ca . crt : ( APISERVER CA BASE64 ENCODED )
namespace : ZGVmYXVsdA ==
token : ( BEARER TOKEN BASE64 ENCODED )
kind : Secret
metadata :
annotations :
kubernetes . io / service - account . name : jenkins
kubernetes . io / service - account . uid : 4d66eb4c - 42e9 - 11e7 - 9860 - ee7d8982865f
creationTimestamp : 2017 - 05 - 27T14 : 32 : 25Z
name : jenkins - token - l9v7v
namespace : default
resourceVersion : "45558"
selfLink : /api/ v1 / namespaces / default / secrets / jenkins - token - l9v7v
uid : 4d697992 - 42e9 - 11e7 - 9860 - ee7d8982865f
type : kubernetes . io / service - account - token

添加ImagePullSecrets

apiVersion : v1
kind : ServiceAccount
metadata :
creationTimestamp : 2015 - 08 - 07T22 : 02 : 39Z
name : default
namespace : default
selfLink : /api/ v1 / namespaces / default / serviceaccounts / default
uid : 052fb0f4 - 3d50 - 11e5 - b066 - 42010af0d7b6
secrets : - name : default - token - uudge
imagePullSecrets : - name : myregistrykey

授权

Service Account为服务提供了一种方便的认证机制,但它不关心授权的问题。可以配合 RBAC 来为Service Account鉴权:
  • 配置–authorization-mode=RBAC和–runtime-config=rbac.authorization.k8s.io/v1alpha1
  • 配置–authorization-rbac-super-user=admin
  • 定义Role、ClusterRole、RoleBinding或ClusterRoleBinding
比如
# This role allows to read pods in the namespace "default"
kind: Role
apiVersion: rbac.authorization.k8s.io/v1alpha1
metadata:
namespace: default
name: pod-reader
rules:
- apiGroups : [ "" ] # The API group "" indicates the core API Group.
resources: ["pods"]
verbs : [ "get" , "watch" , "list" ]
nonResourceURLs: []---# This role binding allows "default" to read pods in the namespace "default"
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1alpha1
metadata:
name: read-pods
namespace: default
subjects:
- kind : ServiceAccount # May be "User", "Group" or "ServiceAccount"
name: default
roleRef:
kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.io


猜你喜欢

转载自blog.csdn.net/denglelai123/article/details/80852947