Infisical CRD 매니페스트 작성 및 자동 시크릿 동기화

💡 핵심 요약 (Executive Summary)

본 가이드는 crd infisical set 핵심 가이드 및 실전 아키텍처의 핵심 개념, 실전 구성 명령어 및 아키텍처 베스트 프랙티스를 다룹니다. 클라우드 네이티브 및 인프라 엔지니어링 실무에 즉시 활용 가능하도록 체계적으로 정리했습니다.

📑 Table of Contents
Secret: infisical-secrets
Reference & Guidelines (NOTE)

infisical 설치시에 사용되는 비밀키 등 환경정보

env
bash
AUTH_SECRET=$(openssl rand -base64 32)
ENCRYPTION_KEY=$(openssl rand -hex 16)
REDIS_URL=redis://default:[email protected]:6379
DB_CONNECTION_URI=postgresql://infisical:[email protected]:5432/infisical
default
yaml
apiVersion: v1
kind: Secret
metadata:
  name: infisical-secrets
  namespace: $ns
type: Opaque
stringData:
  AUTH_SECRET: $AUTH_SECRET
  ENCRYPTION_KEY: $ENCRYPTION_KEY
EOF
external DB, Redis
yaml
apiVersion: v1
kind: Secret
metadata:
  name: infisical-secrets
type: Opaque
stringData:
  AUTH_SECRET: $AUTH_SECRET
  ENCRYPTION_KEY: $ENCRYPTION_KEY
  REDIS_URL: $REDIS_URL
  DB_CONNECTION_URI: $DB_CONNECTION_URI
Secret: universal-auth-credentials
Reference & Guidelines (NOTE)

kubernetes secret-operator사용 시 InfisicalSecret에서 참조 가능한 clientId, clientSecret

generate
bash
kubectl create secret generic \
--from-literal=clientId="$clientId" \
--from-literal=clientSecret="$clientSecret" \
-n kube-system \
infisical-universal-auth-credentials
sample
yaml
apiVersion: v1
data:
  clientId: NjNkYWY2N2QtZDA4My00MTFkLTgxMGQtNzc4MzcyZTkwNDA0
  clientSecret: YTkxZDEyYzE3YzQwYzI4MzA5ZDAwMzQ5YjYzNjQ5NDg5ZTJjMTI0YzNjOTJkMDhhZDdjYzk3ODlkMDQwNGYzMg==
kind: Secret
metadata:
  name: infisical-universal-auth-credentials
  namespace: kube-system
type: Opaque
InfisicalSecret
Reference & Guidelines (NOTE)

kubernetes secret-operator사용 시 infisical의 특정 project, env, path를 kubernetes의 특정 ns, secret으로 동기화하겠다는 명세서

impl
yaml
apiVersion: secrets.infisical.com/v1alpha1
kind: InfisicalSecret
metadata:
  name: infisicalsecret-cicd
  namespace: cicd
spec:
  hostAPI: http://infisical-infisical-standalone-infisical.datastore.svc.cluster.local:8080/api
  resyncInterval: 10 #sec
  authentication:
    # Make sure to only have 1 authentication method defined, serviceToken/universalAuth.
    # If you have multiple authentication methods defined, it may cause issues.
    universalAuth:
      secretsScope:
        projectSlug: infra
        envSlug: dev # "dev", "staging", "prod", etc..
        secretsPath: "/test1" # Root is "/"
        recursive: true # Fetch all secrets from the specified path and all sub-directories. Default is false.
      
      credentialsRef:
        secretName: infisical-universal-auth-credentials
        secretNamespace: kube-system

  managedSecretReference:
    secretName: infisical-managed-secret
    secretNamespace: cicd
    creationPolicy: "Orphan" ## Owner | Orphan (default)
    # secretType: kubernetes.io/dockerconfigjson
sample
yaml
apiVersion: secrets.infisical.com/v1alpha1
kind: InfisicalSecret
metadata:
  name: infisicalsecret-sample
  labels:
    label-to-be-passed-to-managed-secret: sample-value
  annotations:
    example.com/annotation-to-be-passed-to-managed-secret: "sample-value"
spec:
  #if public domain
  hostAPI: https://app.infisical.com/api
  #if internal domain
  #hostAPI: http://<backend-svc-name>.<namespace>.svc.cluster.local:4000/api
  resyncInterval: 10 #sec
  authentication:
    # Make sure to only have 1 authentication method defined, serviceToken/universalAuth.
    # If you have multiple authentication methods defined, it may cause issues.
    universalAuth:
      secretsScope:
        projectSlug: <project-slug>
        envSlug: <env-slug> # "dev", "staging", "prod", etc..
        secretsPath: "<secrets-path>" # Root is "/"
        recursive: true # Fetch all secrets from the specified path and all sub-directories. Default is false.
      
      credentialsRef:
        secretName: infisical-universal-auth-credentials
        secretNamespace: kube-system

      # Service tokens are deprecated and will be removed in the near future. Please use Machine Identities for authenticating with Infisical.
    serviceToken:
      serviceTokenSecretReference:
        secretName: service-token
        secretNamespace: default
      secretsScope:
        envSlug: <env-slug>
        secretsPath: <secrets-path> # Root is "/"
        recursive: true # Fetch all secrets from the specified path and all sub-directories. Default is false.

  managedSecretReference:
    secretName: managed-secret
    secretNamespace: default
    creationPolicy: "Orphan" ## Owner | Orphan (default)
    # secretType: kubernetes.io/dockerconfigjson

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *