You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用已获取的OAuth令牌访问GKE资源(kubectl/client-go)?

使用已获取的Google Cloud OAuth2令牌访问GKE资源

一、获取特定项目指定集群的凭据

用kubectl配置

  1. 先拿到集群的API服务器地址和CA证书:
    执行gcloud container clusters describe <集群名> --project <项目ID> --zone <集群区域>,从输出里提取endpoint(API服务器地址)和masterAuth.clusterCaCertificate(base64编码的CA证书)。
  2. 手动配置kubeconfig:
    • 设置集群:kubectl config set-cluster gke-cluster --server=https://<API服务器地址> --certificate-authority=<保存CA证书的文件路径>
    • 设置用户:kubectl config set-credentials gke-user --token=<你的OAuth2令牌>
    • 设置上下文:kubectl config set-context gke-context --cluster=gke-cluster --user=gke-user
    • 切换到该上下文:kubectl config use-context gke-context

用client-go构造配置(优先选择)

直接在代码里构建Kubernetes客户端配置,无需本地kubeconfig文件:

import (
    "encoding/base64"
    "k8s.io/client-go/rest"
)

// 根据集群信息和OAuth令牌生成rest.Config
func getGKEConfig(apiServerEndpoint, caCertBase64, oauthToken string) (*rest.Config, error) {
    // 解码base64格式的CA证书
    caCert, err := base64.StdEncoding.DecodeString(caCertBase64)
    if err != nil {
        return nil, err
    }

    return &rest.Config{
        Host:            apiServerEndpoint, // 集群API服务器地址
        BearerToken:     oauthToken,        // 你的OAuth2令牌
        TLSClientConfig: rest.TLSClientConfig{CAData: caCert},
    }, nil
}

参数说明:

  • apiServerEndpoint:从gcloud命令输出中获取的集群endpoint
  • caCertBase64:从gcloud命令输出中获取的masterAuth.clusterCaCertificate值

二、执行创建/访问Secret操作

用kubectl操作

  • 创建Secret:
    kubectl create secret generic my-secret --from-literal=username=admin --from-literal=password=123456 -n default
  • 获取Secret详情:
    kubectl get secret my-secret -n default -o yaml

用client-go操作

基于上面生成的rest.Config创建客户端,执行Secret的创建和查询:

import (
    "context"
    "fmt"
    corev1 "k8s.io/api/core/v1"
    metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    "k8s.io/client-go/kubernetes"
)

func main() {
    // 替换为你的实际信息
    apiServer := "https://your-cluster-endpoint"
    caCertBase64 := "your-cluster-ca-cert-base64"
    oauthToken := "your-oauth-token"

    // 获取配置
    config, err := getGKEConfig(apiServer, caCertBase64, oauthToken)
    if err != nil {
        panic(fmt.Sprintf("Failed to create config: %v", err))
    }

    // 创建Kubernetes客户端集
    clientset, err := kubernetes.NewForConfig(config)
    if err != nil {
        panic(fmt.Sprintf("Failed to create clientset: %v", err))
    }

    ctx := context.TODO()

    // 1. 创建Secret
    secret := &corev1.Secret{
        ObjectMeta: metav1.ObjectMeta{
            Name:      "my-secret",
            Namespace: "default",
        },
        Data: map[string][]byte{
            "username": []byte("admin"),
            "password": []byte("123456"),
        },
        Type: corev1.SecretTypeOpaque,
    }

    createdSecret, err := clientset.CoreV1().Secrets(secret.Namespace).Create(ctx, secret, metav1.CreateOptions{})
    if err != nil {
        panic(fmt.Sprintf("Failed to create secret: %v", err))
    }
    fmt.Printf("Created secret: %s\n", createdSecret.Name)

    // 2. 查询Secret
    fetchedSecret, err := clientset.CoreV1().Secrets("default").Get(ctx, "my-secret", metav1.GetOptions{})
    if err != nil {
        panic(fmt.Sprintf("Failed to fetch secret: %v", err))
    }
    fmt.Printf("Fetched secret username: %s\n", string(fetchedSecret.Data["username"]))
}

内容的提问来源于stack exchange,提问作者pkaramol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 19:09:32