본문 바로가기

카테고리 없음

k8s client-go secret 생성/덮어쓰기 예제

Kubernetes에서 Secret을 관리하기 위해 Go 언어를 사용하는 경우 공식적으로 Kubernetes Go 클라이언트 라이브러리를 사용할 수 있습니다. 이 라이브러리는 Kubernetes의 API와 통신하여 리소스를 생성, 조회, 업데이트 및 삭제하는 기능을 제공합니다.

Secret이 존재하는지 확인하고, 존재한다면 덮어쓰고, 존재하지 않는다면 새로 생성하는 코드는 다음과 같이 작성할 수 있습니다:

package main

import (
    "context"
    "fmt"
    "os"

    metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    "k8s.io/client-go/kubernetes"
    "k8s.io/client-go/tools/clientcmd"
    "k8s.io/apimachinery/pkg/api/errors"
    corev1 "k8s.io/api/core/v1"
)

func main() {
    kubeconfig := os.Getenv("KUBECONFIG")
    config, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
    if err != nil {
        panic(err.Error())
    }

    // Kubernetes 클라이언트 생성
    clientset, err := kubernetes.NewForConfig(config)
    if err != nil {
        panic(err.Error())
    }

    // 사용할 네임스페이스 및 시크릿 이름
    namespace := "default"
    secretName := "my-secret"

    // 시크릿 데이터: 예를 들어 사용자 이름과 비밀번호
    secretData := map[string]string{
        "username": "myuser",
        "password": "mypassword",
    }

    // 바이트 맵으로 변환
    secretDataByteMap := make(map[string][]byte)
    for key, value := range secretData {
        secretDataByteMap[key] = []byte(value)
    }

    // 시크릿 정의
    secret := &corev1.Secret{
        ObjectMeta: metav1.ObjectMeta{
            Name: secretName,
        },
        Data: secretDataByteMap,
    }

    // 시크릿 생성
    _, err = clientset.CoreV1().Secrets(namespace).Create(context.TODO(), secret, metav1.CreateOptions{})

    if err != nil {
        if errors.IsAlreadyExists(err) {
            // 시크릿이 이미 존재하면 업데이트
            fmt.Println("Secret already exists, updating...")
            _, updateErr := clientset.CoreV1().Secrets(namespace).Update(context.TODO(), secret, metav1.UpdateOptions{})
            if updateErr != nil {
                panic(updateErr.Error())
            }
            fmt.Println("Secret updated successfully.")
        } else {
            panic(err.Error())
        }
    } else {
        fmt.Println("Secret created successfully.")
    }
}

이 코드는 다음과 같은 기능을 수행합니다:

  1. 쿠버네티스 클라이언트를 생성합니다.
  2. 시크릿 데이터를 정의합니다.
  3. 새로운 시크릿 오브젝트를 만듭니다.
  4. Create 메소드를 호출하여 시크릿을 생성합니다.
  5. 시크릿 생성 시 이미 존재하는 오류가 발생하면, Update 메소드를 사용하여 기존의 시크릿을 덮어씁니다.
  6. 오류가 없으면 시크릿이 성공적으로 생성되었다는 메시지를 출력합니다.

이 코드를 실행하기 전에 다음 사항을 확인하십시오:

  • 쿠버네티스 클러스터에 연결할 수 있는 kubeconfig 파일이 필요합니다.
  • 적절한 권한이 설정되어 있어야 하며, 필요한 API 호출을 수행할 수 있어야 합니다.
  • 위의 예제에서 KUBECONFIG 환경변수는 kubeconfig 파일의 경로를 가리켜야 합니다.