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- (선택) 플러그인 실행 시 설정할 환경 변수의 맵.