본문 바로가기

분류 전체보기

(49)
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/apimach..
uuid 정규표현식(regexp) UUID는 일반적으로 8-4-4-4-12의 형태를 취하는 36개 문자(예: 123e4567-e89b-12d3-a456-426655440000)로 구성되며, 각 섹션은 하이픈으로 구분됩니다. UUID를 검사하는 정규 표현식은 다음과 같은 형태를 취할 수 있습니다: ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$ 이 정규 표현식은 다음과 같은 구조를 가집니다: ^[0-9a-fA-F]{8}: 시작(^)부터 8개의 16진수 숫자. -: 정확히 하이픈. [0-9a-fA-F]{4}: 4개의 16진수 숫자. -: 하이픈. [1-5][0-9a-fA-F]{3}: 버전 1에서 5에 해당하는 UUID를 확인하기..
mapstructure 란? mapstructure는 Go 언어에서 매우 유용한 라이브러리로, 주로 맵(map) 데이터를 구조체(struct)로 변환하는 데 사용됩니다. 이 라이브러리는 JSON, YAML, 또는 다른 소스에서 파싱된 데이터를 Go의 구조체로 쉽게 매핑할 수 있게 해주는 기능을 제공합니다. mapstructure의 주요 특징과 사용 방법을 소개하겠습니다. 특징 유연한 매핑: mapstructure는 맵의 키와 구조체의 필드 이름이 정확히 일치하지 않아도 태그를 통해 매핑할 수 있습니다. 커스텀 태그 사용: 구조체 필드에 mapstructure:"name" 형태의 태그를 사용하여 맵의 키와 매핑할 수 있습니다. 디코딩 훅 지원: DecodeHookFunc을 통해 맵의 데이터를 구조체로 디코딩하기 전에 데이터 타입을 변..
k8s 선언적 모델 이해 Kubernetes (K8s)는 선언적 프로그래밍 모델을 기반으로 하는 컨테이너 오케스트레이션 시스템입니다. 이 선언적 접근 방식은 Kubernetes의 핵심적인 부분이며, 사용자는 YAML이나 JSON 형식의 구성 파일을 통해 원하는 시스템의 상태를 '선언'합니다. 이렇게 선언된 상태를 Kubernetes 시스템이 실제 환경에 맞게 '실현'하는 것이 핵심 원리입니다. Kubernetes의 선언적 모델의 특징: 상태 선언: 사용자는 구성 파일을 통해 애플리케이션을 구성하는 각 컨테이너, 서비스, 볼륨 등의 원하는 상태를 선언합니다. 예를 들어, 어떤 이미지를 사용할 컨테이너, 몇 개의 복제본(replicas)이 필요한지, 네트워크 설정은 어떻게 할 것인지 등을 정의합니다. 자..
오픈소스 API 게이트웨이 지원 인증/인가 정책 종류 여러 유명한 오픈소스 API 게이트웨이들은 다양한 인가 정책을 지원합니다. 이러한 인가 정책들은 보안성을 강화하고, API 사용을 더욱 효율적으로 관리할 수 있게 해줍니다. 여기 몇 가지 주요 오픈소스 API 게이트웨이들과 그들이 지원하는 인가 정책을 살펴보겠습니다. 1. Kong API Key 인증: 각 요청에 API 키를 포함시켜 인증합니다. OAuth 2.0: 표준 OAuth 2.0 프로토콜을 지원하여, 토큰 기반의 인증 및 인가를 제공합니다. JWT 인증: JWT를 사용하여 사용자를 인증합니다. Basic Authentication: 사용자 이름과 비밀번호를 이용한 기본 인증 방식을 지원합니다. ACL (Access Control List): 사용자 또는 그룹별로 API 접근을 제한하는 기능을 제..
JWT(JSON Web Token) 원리와 사용예시 JWT (JSON Web Tokens)는 인증 및 정보 교환을 위한 컴팩트하고 자가 포함된 방식으로 설계된 개방형 표준 (RFC 7519)입니다. 이것은 특히 Single Sign-On (SSO) 시나리오에 유용하며, OAuth 2.0, OpenID Connect 등과 같은 많은 인증 프로토콜에서 사용됩니다. JWT의 주요 특징과 원리, 그리고 사용 예시를 살펴보겠습니다. JWT의 구조 JWT는 세 부분으로 나뉩니다: Header, Payload, Signature. Header (헤더): 토큰의 타입 (예: JWT)과 사용되는 해싱 알고리즘 (예: HMAC SHA256, RSA)을 지정합니다. Payload (페이로드): 토큰에 포함될 클레임(claims)을 포함합니다. 클레임은 세 가지 유형이 있습니..
Yaml 멀티라인, 리터럴블록, 폴디드블록 Kubernetes 환경 변수에서 줄바꿈을 하려면 YAML의 멀티라인 문자열 구문을 사용할 수 있습니다. YAML에서는 멀티라인 문자열을 표현하기 위해 여러 방법을 제공하는데, 가장 일반적인 방법은 리터럴 블록 (|)과 폴디드 블록 (>)입니다. 리터럴 블록 (|) 리터럴 블록을 사용하면, 줄바꿈과 들여쓰기가 그대로 유지됩니다. 예를 들어: apiVersion: v1 kind: Pod metadata: name: example-pod spec: containers: - name: example-container image: example-image env: - name: MULTILINE_TEMPLATE value: | 첫 번째 줄 두 번째 줄 세 번째 줄 이 예제에서 MULTILINE_TEMPLATE ..
Helm 멀티라인 값, 리터럴 블록(|) 사용하기 Helm에서 values.yaml 파일에 리터럴 블록을 그대로 |와 함께 넣고 싶다면, 멀티라인 문자열을 정의할 때 특별한 주의가 필요합니다. 여기서 중요한 것은 YAML 문법을 정확히 지키는 것입니다. 다음은 values.yaml 파일에서 멀티라인 문자열을 사용하는 방법입니다: values.yaml에 멀티라인 문자열 정의하기 values.yaml 파일에서 멀티라인 값을 정의할 때, 리터럴 블록(|)을 사용합니다. 예를 들어: multilineValue: | 첫 번째 줄 두 번째 줄 세 번째 줄 이 구문은 multilineValue 키에 멀티라인 문자열을 할당합니다. 각 줄은 개행 문자로 구분됩니다. 템플릿 파일에서 환경 변수로 사용하기 템플릿 파일에서 이 값을 환경 변수로 참조합니다. 예를 들어 dep..
Grafana(그라파나)에서 Team와 Org의 차이 Grafana에서 "Team"과 "Org" (Organization)은 사용자 관리와 데이터 액세스 구조를 위한 두 가지 다른 개념입니다. Organization (Org): 조직 단위: Grafana에서 조직은 사용자 그룹화의 가장 높은 수준입니다. 각 조직은 자체 데이터 소스, 대시보드, 알림 채널 등을 가질 수 있습니다. 독립적인 환경: 각 조직은 독립적인 환경을 제공합니다. 하나의 조직에서 설정한 데이터 소스나 대시보드는 다른 조직과 공유되지 않습니다. 사용자 역할: 사용자는 조직 내에서 Admin, Editor, Viewer 중 하나의 역할을 가질 수 있습니다. 이 역할들은 조직 내에서 사용자의 권한을 정의합니다. 멀티-테넌시: 다수의 조직을 통해 Grafana 인스턴스는 멀티-테넌시 환경을 지..
curl 결과를 jq로 배열 길이 체크 방법 Bash에서 curl을 사용하여 JSON 응답을 받고, 그 안에 있는 특정 배열의 길이를 확인하려면 몇 가지 도구를 조합해야 합니다. curl로 데이터를 가져오고, jq를 사용하여 JSON을 파싱하며, 배열의 길이를 확인할 수 있습니다. 아래는 JSON 응답에서 a.b라는 경로에 위치한 배열의 길이를 확인하는 Bash 스크립트의 예시입니다. #!/bin/bash # curl을 사용하여 JSON 데이터 가져오기 response=$(curl -s [URL]) # [URL]을 실제 URL로 바꿔주세요. # jq를 사용하여 'a.b' 경로의 배열 길이 확인 length=$(echo $response | jq '.a.b | length') # 배열 길이가 0인지 확인 if [ $len..