从您分享的kubeconfig内容来看,它目前使用的是exec
认证方式,每次调用kubectl都会执行OCI命令来生成认证令牌。下面我将提供几种方法来解决这个问题。
TOKEN=$(oci ce cluster generate-token --cluster-id ocid1.cluster.oc1.eu-frankfurt-1.aaaaaaaafqgpxm7tklzhyxkcyqziyuaoulqwlp2hb4ejcunu5dy7v3a --region eu-frankfurt-1 --auth instance_principal)
cp ~/.kube/config ~/.kube/config_static
users:
- name: user-cunu5dy7v3a
user:
token: "<这里放入生成的TOKEN>"
export KUBECONFIG=~/.kube/config_static
kubectl get pods
注意: OCI生成的令牌通常只有1小时有效期,这种方法需要您定期更新令牌。
kubectl create serviceaccount kubectl-sa
kubectl create clusterrolebinding kubectl-sa-admin --clusterrole=cluster-admin --serviceaccount=default:kubectl-sa
# 创建一个Secret来生成令牌
kubectl apply -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
name: kubectl-sa-token
annotations:
kubernetes.io/service-account.name: kubectl-sa
type: kubernetes.io/service-account-token
EOF
# 获取令牌
SA_TOKEN=$(kubectl get secret kubectl-sa-token -o jsonpath='{.data.token}' | base64 --decode)
users:
- name: kubectl-sa
user:
token: "$SA_TOKEN"
contexts:
- name: context-cunu5dy3a
context:
cluster: cluster-cunu5dy3a
user: kubectl-sa # 这里修改为新用户
这种方法创建的令牌持久有效,更适合长期使用。
您可以创建一个脚本来自动执行这个过程,这样就可以随时刷新令牌并更新配置文件,避免每次kubectl调用时都触发OCI依赖警告。