我曾经用来kubectl create serviceaccount sa1创建服务帐户。然后我使用kubectl get serviceaccount sa1 -oyaml命令来获取服务帐户信息。但它返回如下。
apiVersion: v1
kind: ServiceAccount
metadata:
creationTimestamp: "2022-05-16T08:03:50Z"
name: sa1
namespace: default
resourceVersion: "19651"
uid: fdddacba-be9d-4e77-a849-95ca243781cc
Run Code Online (Sandbox Code Playgroud)
我需要得到,
secrets:
- name: <secret>
Run Code Online (Sandbox Code Playgroud)
部分。但它不会返回秘密。如何修复它?
有没有人知道如何将本地实例连接kubectl到Google Kubernetes Engine(GKE)群集,而不在gcloud本地使用该工具?
例如:
如果您使用gcloud此命令的工具:
gcloud container clusters get-credentials NAME [--zone=ZONE, -z ZONE] [GCLOUD_WIDE_FLAG …]
Run Code Online (Sandbox Code Playgroud)
你会发现这样的用户~/.kube/config:
- name: gke_myproj_myzone
user:
auth-provider:
config:
access-token: TOKENSTRING
cmd-args: config config-helper --format=json
cmd-path: /google/google-cloud-sdk/bin/gcloud
expiry: 2018-01-22 18:05:46
expiry-key: '{.credential.token_expiry}'
token-key: '{.credential.access_token}'
name: gcp
Run Code Online (Sandbox Code Playgroud)
如您所见,gcloud工具提供的默认值要求glcoud工具作为身份验证提供程序登录到您的群集.
现在,我正在寻找的是一种连接kubectl到机器上的集群的方法,该集群尚未gcloud安装.
kubectl当我使用带有标志的命令--token并指定令牌时,它仍然使用文件中的管理员凭据kubeconfig。
这就是我所做的:
NAMESPACE="default"
SERVICE_ACCOUNT_NAME="sa1"
kubectl create sa $SERVICE_ACCOUNT_NAME
kubectl create clusterrolebinding list-pod-clusterrolebinding \
--clusterrole=list-pod-clusterrole \
--serviceaccount="$NAMESPACE":"$SERVICE_ACCOUNT_NAME"
kubectl create clusterrole list-pod-clusterrole \
--verb=list \
--resource=pods
TOKEN=`kubectl get secrets $(kubectl get sa $SERVICE_ACCOUNT_NAME -o json | jq -r '.secrets[].name') -o json | jq -r '.data.token' | base64 -d`
# Expected it will fail but it doesn't because it uses the admin credentials
kubectl get secrets --token $TOKEN
Run Code Online (Sandbox Code Playgroud)
该令牌有权列出 pod,因此我预计kubectl get secrets --token $TOKEN会失败,但事实并非如此,因为它仍然使用管理员的上下文。
我不创建新的上下文,我知道kubectl …
我们如何使用服务帐户登录创建的 AKS 集群?我们被要求执行 kubectl create clusterrolebinding add-on-cluster-admin ………但我们不知道如何使用它并登录到 Azure 中创建的集群