kubernetes 백엔드

kubernetes 백엔드

Terraform state를 Kubernetes 시크릿(secret)으로 저장하는 kubernetes 백엔드를 설명해 드릴게요. Lease 리소스로 state 잠금을 지원해요.

출처: 문서

본문

kubernetes 백엔드는 state를 Kubernetes secret으로 저장해요. 이 백엔드는 state 잠금을 지원하며, Lease 리소스로 잠금을 수행해요.

예시 구성 (Example Configuration)

terraform {
  backend "kubernetes" {
    secret_suffix    = "state"
    config_path      = "~/.kube/config"
  }
}

이 예시는 Terraform을 실행하는 사용자/서비스 계정이 시크릿을 저장하는 데 사용하는 namespace에서 시크릿을 읽고 쓸 권한이 있다고 가정해요.

config_path 또는 config_paths 속성이 설정되면 백엔드가 클러스터에 접근하기 위해 kubeconfig 파일을 사용하려 시도해요. in_cluster_config 플래그가 설정되면 백엔드가 서비스 계정으로 클러스터에 접근하려 시도해요. 이는 Kubernetes 클러스터에서 실행되는 pod 안에서 Terraform을 실행할 때 사용할 수 있어요.

대부분의 사용 사례에서 in_cluster_config, config_path, 또는 config_paths 중 하나를 설정해야 해요. 모든 플래그가 설정되면 config_path의 구성을 사용해요. 접근 자격 증명에는 부분 구성을 권장해요.

예시 참조 (Example Referencing)

data "terraform_remote_state" "foo" {
  backend = "kubernetes"
  config = {
    secret_suffix    = "state"
    load_config_file = true
  }
}

구성 변수 (Configuration Variables)

경고: 자격 증명과 기타 민감 데이터를 제공할 때는 환경 변수를 사용하는 것을 권장해요. -backend-config를 사용하거나 이런 값을 구성에 직접 하드코딩하면 Terraform이 .terraform 하위 디렉터리와 plan 파일 양쪽에 이 값을 포함해요. 자세한 내용은 Credentials and Sensitive Data를 참고해요.

다음 구성 옵션을 지원해요:

  • secret_suffix - (필수) 시크릿을 만들 때 사용하는 접미사. 시크릿은 tfstate-{workspace}-{secret_suffix} 형식으로 이름 지어져요. 백엔드는 큰 state 파일을 여러 시크릿으로 분할할 때 시크릿 이름에 자체 숫자 인덱스를 추가할 수 있어요. 이 경우 tfstate-{workspace}-{secret_suffix}-{index} 형식의 여러 시크릿이 존재해요.
  • labels - (선택) 시크릿과 lease에 적용할 추가 레이블의 맵.
  • namespace - (선택) 시크릿과 lease를 저장할 namespace. KUBE_NAMESPACE로부터 가져올 수 있어요.
  • in_cluster_config - (선택) pod 안에서 클러스터에 인증하는 데 사용. KUBE_IN_CLUSTER_CONFIG로부터 가져올 수 있어요.
  • host - (선택) Kubernetes 마스터의 호스트 이름(URI 형식). KUBE_HOST로부터 가져올 수 있어요. 기본값은 https://localhost.
  • username - (선택) Kubernetes 마스터 엔드포인트에 접근할 때 HTTP 기본 인증에 사용할 사용자 이름. KUBE_USER로부터 가져올 수 있어요.
  • password - (선택) Kubernetes 마스터 엔드포인트에 접근할 때 HTTP 기본 인증에 사용할 비밀번호. KUBE_PASSWORD로부터 가져올 수 있어요.
  • insecure - (선택) TLS 인증서를 검증하지 않고 서버에 접근할지 여부. KUBE_INSECURE로부터 가져올 수 있어요. 기본값은 false.
  • client_certificate - (선택) TLS 인증용 PEM 인코딩 클라이언트 인증서. KUBE_CLIENT_CERT_DATA로부터 가져올 수 있어요.
  • client_key - (선택) TLS 인증용 PEM 인코딩 클라이언트 인증서 키. KUBE_CLIENT_KEY_DATA로부터 가져올 수 있어요.
  • cluster_ca_certificate - (선택) TLS 인증용 PEM 인코딩 루트 인증서 번들. KUBE_CLUSTER_CA_CERT_DATA로부터 가져올 수 있어요.
  • config_path - (선택) kube config 파일의 경로. KUBE_CONFIG_PATH로부터 가져올 수 있어요.
  • config_paths - (선택) kube config 파일 경로의 목록. KUBE_CONFIG_PATHS로부터 가져올 수 있어요.
  • config_context - (선택) config 파일에서 선택할 컨텍스트. KUBE_CTX로부터 가져올 수 있어요.
  • config_context_auth_info - (선택) kube config의 인증 정보 컨텍스트 (kubeconfig 사용자 이름, kubectl--user 플래그). KUBE_CTX_AUTH_INFO로부터 가져올 수 있어요.
  • config_context_cluster - (선택) kube config의 클러스터 컨텍스트 (kubeconfig 클러스터 이름, kubectl--cluster 플래그). KUBE_CTX_CLUSTER로부터 가져올 수 있어요.
  • token - (선택) 서비스 계정의 토큰. KUBE_TOKEN로부터 가져올 수 있어요.
  • exec - (선택) exec 기반 자격 증명 플러그인을 사용하기 위한 구성 블록. 예: 사용자 자격 증명을 받기 위해 외부 명령 호출.
    • api_version - (필수) ExecCredentials 리소스를 디코딩할 때 사용할 API 버전. 예: client.authentication.k8s.io/v1beta1.
    • command - (필수) 실행할 명령.
    • args - (선택) 플러그인 실행 시 전달할 인자 목록.
    • env - (선택) 플러그인 실행 시 설정할 환경 변수의 맵.

더 알아보기 (Learn more)