kubernetes ServiceAccount sa
来源:原创
时间:2019-06-29
作者:脚本小站
分类:云原生
ServiceAccount
查看serviceaccount:
kubectl get sa --all-namespaces NAMESPACE NAME SECRETS AGE default default 1 23h kube-node-lease default 1 23h kube-public default 1 23h kube-system attachdetach-controller 1 23h kube-system bootstrap-signer 1 23h kube-system certificate-controller 1 23h kube-system clusterrole-aggregation-controller 1 23h kube-system coredns 1 23h ...
Pod的认证方式
每个Pod都有自己的认证秘钥,也叫Token通过secret来定义,以volumes的方式挂载进Pod中。Pod内的应用通过此secret来连接apiserver与认证。
Volumes: default-token-ztk5c: Type: Secret (a volume populated by a Secret) SecretName: default-token-ztk5c Optional: false
每个Pod都有secrets可以通过如下命令查看:
kubectl get secrets --all-namespaces NAMESPACE NAME TYPE DATA AGE default ceph-user-secret kubernetes.io/rbd 1 11d default default-token-cgkng kubernetes.io/service-account-token 3 22d
这些default的secret仅仅有权限获取自身的信息,如果想扩展权限就要自建serviceaccount并使用 pod.spec.serviceAccountName 附加到Pod中。
创建账号:
]# kubectl create serviceaccount myadmin --dry-run -o yaml apiVersion: v1 kind: ServiceAccount metadata: creationTimestamp: null name: myadmin
每创建一个serviceaccount就会自动生成一个对应的token:
这个token只是认证登陆到k8s但是没有其他权限,做不了其他事情,需要授权。
]# kubectl create serviceaccount myadmin serviceaccount/myadmin created ]# kubectl get sa NAME SECRETS AGE myadmin 1 4s ]# kubectl get secret NAME TYPE DATA AGE myadmin-token-6l9z9 kubernetes.io/service-account-token 3 20s
收到动创建一个Pod,并使用自己创建的sa:
apiVersion: v1 kind: Pod metadata: name: sa-pod spec: containers: - name: nginx image: nginx:latest ports: - name: http containerPort: 80 serviceAccount: myadmin
运行后就可以describe Pod,可以看到volumes列是自己创建的账号:
Volumes: myadmin-token-6l9z9: Type: Secret (a volume populated by a Secret) SecretName: myadmin-token-6l9z9 Optional: false
拉取镜像用到的secret:
]# kubectl describe sa myadmin Name: myadmin Namespace: default Labels: <none> Annotations: <none> Image pull secrets: <none> # 拉取镜像用到的秘钥 Mountable secrets: myadmin-token-6l9z9 Tokens: myadmin-token-6l9z9 Events: <none>