创建sa账户/授定管理员角色权限

cat > sa.yaml <<eof
apiVersion: v1
kind: ServiceAccount
metadata:
  name: kubepi-user
  namespace: kube-system
eof  
cat > rolebe.yaml <<eof
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: kubepi-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: kubepi-user
    namespace: kube-system
eof

创建一个测试pod

cat > nginx-pod.yaml <<eof
apiVersion: v1
kind: Pod
metadata:
  namespace: kube-system
  labels:
    run: nginx
  name: nginx
spec:
  terminationGracePeriodSeconds: 0
  serviceAccount: kubepi-user
  containers:
  - image: nginx:latest
    imagePullPolicy: IfNotPresent
    name: nginx
  dnsPolicy: ClusterFirst
  restartPolicy: Always

获取token

kubectl -n kube-system exec -it nginx -- cat /run/secrets/kubernetes.io/serviceaccount/token

这个文件是在 Kubernetes 集群中使用的,它存储了一个用于进行身份验证和访问控制的令牌。在 Kubernetes 中,每个 Pod 都有一个名为 service account 的对象与之关联。service account 由 Kubernetes 自动创建,并且在默认情况下,每个 Pod 都会分配一个默认的 service account。

当 Pod 需要访问 Kubernetes API 服务器时,它可以使用该令牌向 API 服务器进行身份验证。该令牌也可以用于访问其他受 Kubernetes API 服务器保护的资源。具体来说,Pod 可以使用该令牌来获取一些敏感数据,如 Kubernetes Secret、ConfigMap 等。这使得 Kubernetes 能够实现细粒度的访问控制,从而提高集群的安全性。

在Kubernetes中,每个Pod都会分配一个Service Account,默认情况下,这个Service Account具有相应的权限来访问Kubernetes API服务器。当你在一个Pod中运行容器时,可以通过访问/run/secrets/kubernetes.io/serviceaccount/token文件来获得访问API服务器所需的Token。

这个文件可以提高集群的安全性,因为它使用了Kubernetes内置的身份验证机制,并确保只有拥有正确Token的容器才能访问Kubernetes API服务器。 它还提供了一种无需在Pod镜像中硬编码凭据的方法来进行身份验证,从而保护了Pod容器和整个集群免受凭据泄漏的风险。

此外,使用Service Account Token进行身份验证也可以帮助集群管理员更好地跟踪和管理特定操作和资源的访问。例如,他们可以查看哪些Pod使用了特定的Service Account,并对其进行必要的授权或限制。

总之,Service Account Token可以作为在Kubernetes集群中进行身份验证的一种有效方式,从而提高集群的安全性并减少潜在的安全威胁。