【client-goの楽しみ】Kubernetes APIクライアントの*rest.Configオブジェクトを取得する方法

目次

1. kubeconfig ファイルを使用する

2. Kubernetes クラスターでサービス アカウントを使用する

3. APIサーバーのアドレスと認証情報を直接指定

4. genericclioptions.NewConfigFlags() を使用する

要約する


Kubernetes API client-client-go を使用するプロセスでは、通常、Kubernetes API サーバーと対話するための*rest.Config構成。この記事では、一般的に使用される 4 つの*rest.Config入手。

1. kubeconfig ファイルを使用する

kubeconfigこのファイルは、Kubernetes クラスターのアクセス資格情報、コンテキスト、クラスター情報などを指定する YAML ファイルです。次のようにして*rest.Configオブジェクトを。

import (
    "k8s.io/client-go/kubernetes"
    "k8s.io/client-go/tools/clientcmd"
)

func getRestConfigFromKubeConfig() (*rest.Config, error) {
    kubeConfigPath := "/path/to/kubeconfig"
    config, err := clientcmd.BuildConfigFromFlags("", kubeConfigPath)
    if err != nil {
        return nil, err
    }
    return config, nil
}

func main() {
    config, err := getRestConfigFromKubeConfig()
    if err != nil {
        panic(err.Error())
    }

    clientset, err := kubernetes.NewForConfig(config)
    if err != nil {
        panic(err.Error())
    }
    // 使用 clientset 进行操作
}

2. Kubernetes クラスターでサービス アカウントを使用する

Kubernetes では、各ネームスペースにデフォルトのサービス アカウントがあります。このサービス アカウントを通じて*rest.Configオブジェクト。

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

func getRestConfigFromServiceAccount() (*rest.Config, error) {
    config, err := rest.InClusterConfig()
    if err != nil {
        return nil, err
    }
    return config, nil
}

func main() {
    config, err := getRestConfigFromServiceAccount()
    if err != nil {
        panic(err.Error())
    }

    clientset, err := kubernetes.NewForConfig(config)
    if err != nil {
        panic(err.Error())
    }
    // 使用 clientset 进行操作
}

3. APIサーバーのアドレスと認証情報を直接指定

API サーバーのアドレスと認証情報を直接指定して*rest.Configオブジェクト。

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

func getRestConfigFromDirect() (*rest.Config, error) {
    config := &rest.Config{
        Host: "https://<api-server-address>",
        TLSClientConfig: rest.TLSClientConfig{
            // 省略证书认证相关参数
        },
        // 省略 token 认证相关参数
    }
    return config, nil
}

func main() {
    config, err := getRestConfigFromDirect()
    if err != nil {
        panic(err.Error())
    }

    clientset, err := kubernetes.NewForConfig(config)
    if err != nil {
        panic(err.Error())
    }
    // 使用 clientset 进行操作
}

4. genericclioptions.NewConfigFlags() を使用する

`genericclioptions.NewConfigFlags()`このメソッドは、環境変数、コマンド ライン パラメーター、デフォルト構成ファイルなどの複数のソースから Kubernetes クラスターの構成情報を取得し、対応する*rest.Configオブジェクト。

import (
    "k8s.io/cli-runtime/pkg/genericclioptions"
    "k8s.io/client-go/kubernetes"
    "k8s.io/client-go/rest"
)

func getRestConfigFromConfigFlags() (*rest.Config, error) {
    configFlags := genericclioptions.NewConfigFlags(true)
    config, err := configFlags.ToRESTConfig()
    if err != nil {
        return nil, err
    }
    return config, nil
}

func main() {
    config, err := getRestConfigFromConfigFlags()
    if err != nil {
        panic(err.Error())
    }

    clientset, err := kubernetes.NewForConfig(config)
    if err != nil {
        panic(err.Error())
    }
    // 使用 clientset 进行操作
}

要約する

この記事では、Kubernetes API クライアントの*rest.Configオブジェクトkubeconfigとして、ファイルを使用する方法、Kubernetes クラスターのサービス アカウントを使用する方法、API サーバーのアドレスと認証情報を直接指定する方法、およびgenericclioptions.NewConfigFlags()メソッド。さまざまな方法がさまざまなシナリオに適しており、開発者は独自のニーズに応じてそれらの使用を選択できます。

おすすめ

転載: blog.csdn.net/kingu_crimson/article/details/129918665
おすすめ