전체 글 112

containerd 에 Private Registry Credential 설정 (aka config.toml)

OverView본문에서는 containerd 가 Registry (컨테이너 이미지 저장소) 로부터 image 를 다운 (pull) 받을 때 pod imageSecret 설정 없이 가능하도록 설정하는 방법을 설명합니다. CRI 로 containerd, cri-o, docker 등 다양하지만 저는 containerd 를 사용하고 있습니다.containerd 의 설정 파일은 /etc/ containerd/config.toml 경로에 있습니다. 해당 파일이 없을 경우 아래 커맨드로 기본 설정 파일 생성이 가능합니다.containerd config default > /etc/containerd/config.toml Configure Registry Credentials$ sudo ctr --versionClien..

Kubernetes 2024.07.01

[인증/인가] Keycloak User Storage SPI

Service Provider Interfaces (SPI) SPI 는 사용자가 상황에 맞게 Keycloak 의 기능중 일부를 커스텀하여 사용할 수 있도록 Keycloak 에서 제공하는 모듈이다. SPI 는 Thema (로그인,회원가입 화면) , User Storage SPI , Authentication SPI, Vault SPI 등 여러 종류가 있다. 사용 가능한 SPI 는 Keycloak Admin Console 에서 확인할 수 있다. 가장 단순한 형태의 사용자 지정 공급자는 하나 이상의 서비스 구현을 포함하는 표준 jar 파일입니다. 사용가능한 SPI Name Description org.keycloak.authentication.AuthenticatorFactory 사용자 또는 클라이언트 애플리..

DevOps, Infra 2024.04.10

[ArgoCD] App of Apps 패턴으로 서비스 배포하기

개요 argocd app of apps 공식문서 서비스는 GitOps Repo 와 ArgoCD 를 이용하여 자동 배포, Declarative Setup 를 달성했다. 그러나 ArgoCD 에 Application 을 생성할때는 UI 클릭을 통해 생성한다. 다른 클러스터로 생성돼있는 Application 을 모두 이전해야한다면 Web UI 클릭으로 실수 없이 가능할까? Application 을 Web UI 로 수정하다보면 수정 기록은 어디서 확인 할 수 있으며, 해당 관리자가 변경될때는 history 관리는 어떻게 할것인가? App of Apps 패턴은 ArgoCD 를 이용하여 여러 클러스터에 동일 어플리케이션을 배포할 수 있는 장점과 GitOps 의 장점을 100% 활용할 수 있다. App of Apps ..

DevOps, Infra 2023.11.21

Spring Data Envers 사용방법 - 간편하게 히스토리 테이블 관리하기

개요Hibernate Envers 프로젝트는 각각의 대상 엔티티의 이력관리를 간편하게 도와줍니다 Envers Hibernate/JPA Entity의 변경 사항을 추적할 수 있게 별도 테이블에 변경 사항을 자동 저장해준다. Spring Data Envers Hibernate Envers 의 변경 사항을 쉽게 조회할 수 있게 해준다. Spring Data Envers 적용하기1. dependency 추가Gradle (build.gradle)dependencies { // envers implementation "org.springframework.data:spring-data-envers" }Maven(pom.xml) org.springframework.data spring-data-envers 2. Ena..

Spring , JPA 2023.11.13

SSO 인증/인가 프로토콜 - SAML OAuth OIDC

개요오픈소스 솔루션의 인증을 통합하는 인증 서버를 커스텀 개발 하면서 SSO , Saml , OAuth2 , OpenID Connect (OIDC) 에 대해 정리하게 됐습니다. SSO (Single Sign On) 은 단어 그대로 1회 사용자 인증으로 다수의 어플리케이션 및 웹사이트에 대한 사용자 로그인을 허용하는 인증 솔루션입니다. SSO는 한 번 자격 증명이 검증된 사용자에게는 반복되는 로그인 없이 모든 암호 보호 리소스에 액세스하도록 하여 보안과 사용자 경험을 모두 충족할 수 있습니다. 이같은 편의성은 IDP(IDentity Provider)라 불리는 신원확인 서비스가 제공합니다. IDP는 SAML(Security Assertion Markup Language), OAuth 2.0, OIDC(Ope..

슬슬의 공부 2023.11.12

[ArgoCD] helm chart 배포하는 방법

개요 ArgoCD 에서 helm차트를 release방법을 설명합니다. ArgoCD Application 은 application 파일을 kubectl 명령어로 생성합니다. 1. helm repo 사용 Application CRD # application.yaml apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: nginx namespace: argocd finalizers: - resources-finalizer.argocd.argoproj.io spec: project: default source: repoURL: https://charts.bitnami.com/bitnami chart: nginx targetRevision: "15..

DevOps, Infra 2023.11.12

Spring Cloud OpenFeign 사용법

개요 open feign 은 RestTemplate , WebClient 와 같이 외부 API 호출 용도로 사용하는 Http client binder 입니다. Rest Template 를 사용해보신 분은 많은 코드가 축소된 것을 확인할 수 있습니다. 의존성 추가 Open Feign은 Spring Cloud 기반의 기술이므로 Spring Cloud에 대한 의존성이 필요하다. Spring Cloud 문서를 보면 현재의 Spring Boot 버전에 맞는 버전이 명시되어 있는데, 적합한 버전을 확인한다. OpenFeign 활성화 OpenFeign을 활성화하려면 다른 스프링 부트 기능들과 유사하게 @EnableFeignClients 어노테이션을 붙여주면 된다. OpenFeign을 활성화하려면 기본적으로 main ..

Spring , JPA 2023.11.12

[CI/CD] Advanced GitLab CI, gitlab-ci.yml

현재 진행중인 프로젝트에서는 CI툴로 gitlab runner 를 helm chart 기반으로 구성하여 eks에 띄워, gitlab ci로 CI 작업을 이행하고 있습니다. gitlab ci 를 사용하며 템플릿 ,공통 yaml 을 구성하며 익힌 팁을 공유합니다. 1. 사전에 정의된 variable GitLab 사전에 정의된 variable 값 사용 (Predefined Variables) CI_COMMIT_BRANCH (커밋 브랜치) , CI_PROJECT_DIR (프로젝트 경로) , CI_PROJECT_NAME (프로젝트 이름) 을 비롯해 CI_COMMIT_TITLE (커밋 메세지) 등은 사전에 gitlab에 정의된 variable들인데 이를 잘 활용하면 프로젝트 정보를 코드에서 쉽게 사용할 수 있습니다..

DevOps, Infra 2023.09.14

Nginx Ingress Rewirte & AWS Load Balancer Controller

(AS-IS) AWS ALB - Ingress - Service - Pod (TO-BE) AWS NLB - Ingress Nginx - Service - Pod 기존에 EKS ALB 와 Ingress 를 사용하여 Path-based Routing 을 적용했으나, 한 도메인으로 여러 Back End , Front End 서비스를 운영해야하는 환경이었으므로 정규식을 이용한 Rewrite 기능이 필요해졌습니다. (23-08 기준, ALB ingress는 rewrite를 지원하지 않습니다.) 1. Nginx Ingress Controller 설치 따라서 NLB 로 변경후 ssl key 는 NLB 에 적용했으며, Nginx Ingress Controller 를 추가로 설치했습니다. 자주 쓰이는 Nginx Ingr..

Kubernetes 2023.09.12

[kubectl] krew - Kubernetes Plugin Manager

쿠버네티스 플러그인 관리자 - Krew Krew는 쿠버네티스 플러그인 패키지 관리자입니다. macOS의 brew, Ubuntu의 apt 와 비슷한 역할을 수행한다고 보면 됩니다. Krew 를 통해 현재 217개이상의 플러그인을 설치할 수 있으며, 사용법도 매우 단순하다. krew 의 주요기능은 다음과 같다. 플러그인 검색 플러그인 설치 플러그인 업데이트 Installing krew 설치 방법 # macOS & Linux # git 이 설치되어 있어야합니다. # () 부분도 포함하여 붙여 넣습니다. ( set -x; cd "$(mktemp -d)" && OS="$(uname | tr '[:upper:]' '[:lower:]')" && ARCH="$(uname -m | sed -e 's/x86_64/amd6..

Kubernetes 2023.07.10