我使用的是 Kubernetes 版本 1.24,我已手动为我的服务帐户创建了一个密钥,但是当我运行
kubectl get serviceaccounts
时,它显示我没有该服务帐户的任何密钥?
如果您使用的是K8s版本1.24
serviceaccount不会自动创建secret。
您必须手动创建它。
kubectl create sa <serviceaccount-name>
示例:
apiVersion: v1
kind: Secret
type: kubernetes.io/service-account-token
metadata:
name: token-secret
annotations:
kubernetes.io/service-account.name: "<SA name>"
kubectl create token <Name>
我必须进行一些搜索才能将所有内容放在一起:https://kubernetes.io/docs/reference/access-authn-authz/service-accounts-admin/
主要只是创建一个秘密资源文件
secret.yaml
.
apiVersion: v1
kind: Secret
type: kubernetes.io/service-account-token
metadata:
name: <name of the secret>
annotations:
kubernetes.io/service-account.name: "<name of the serviceaccount>"
kubectl apply -f secret.yaml
并将密钥添加到服务帐户。
# if you have already a serviceaccount you need only the edit line
kubectl create serviceaccount <name of the serviceaccount>
kubectl edit serviceaccount <name of the serviceaccount>
然后只需添加创建的秘密(最后两行):
apiVersion: v1
kind: ServiceAccount
metadata:
creationTimestamp: "2023-04-19T06:31:47Z"
name: <name of the serviceaccount>
namespace: default
resourceVersion: "312345558"
uid: 92f6ac28-cab4-41d2-b861-6e998a7cb644
secrets:
- name: <name of the manual created secret>
手动创建
secret
时,需要手动添加到ServiceAccount
。您可以使用 kubectl edit
来实现此目的。
#!/bin/bash
SA_NAME="${1}"
kubectl create sa "$SA_NAME"
# Generate a random string for the token name
TOKEN_NAME=$(openssl rand -hex 5)
kubectl apply -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
name: "${SA_NAME}-token-${TOKEN_NAME}"
annotations:
kubernetes.io/service-account.name: "$SA_NAME"
type: kubernetes.io/service-account-token
EOF
./create_sa.sh jenkins
它将创建一个名为“jenkins”的服务帐户并为该服务帐户生成一个令牌