variable "SSL_DOMAINS" {
description = "List of ssl domains"
type = list(string)
}
variable "GCS_BUCKET_NAME" {
description = "The unique name of the gcs bucket"
type = string
}
variable "GKE_PROJECT_ID" {
description = "The id of the gke project"
type = string
}
terraform plan 명령어 입력 시 Call to function "yamldecode" failed: on line 68, column 1: could not find expected directive name. 에러 발생
terraform plan 시 yamlcode 함수에서 오류가 발생하는 이유는 두 가지의 경우가 존재합니다. 1. yaml 파일의 형식이나 내용 혹은 파일의 인코딩에 문제가 있을 경우 2. yamlcode 함수의 사용 방식에 문제가 있을 경우 해당 오류 메시지는 1번의 경우에 속하는데 yaml 파일은 올바르게 작성되었다. 따라서 인코딩과 관련된 문제였다. yaml 파일을 확인하면 domain 변수 삽입을 위해 go 템플릿 문법을 사용하는데 yaml 파일 내에서 go 템플릿 문법을 사용할 경우에는 templatefile 함수를 통해 이 템플릿을 처리해야 합니다. 하지만 기존에는 config = yamldecode(file("config.yaml"))를 사용해 인코딩했기 때문에 다음과 같은 에러가 발생한 것입니다. 따라서 아래와 같이 config.tf를 변경해 주었습니다.
yamlcode의 인코딩 관련 에러를 해결하고 terraform plan이 성공적으로 끝나 terraform apply를 실행했다. 그런데 아래와 같은 에러가 발생했습니다. Error: Error creating ManagedSslCertificate: googleapi: Error 403 에러 메시지를 보니 해당 에러 메시지가 뜬 이유를 짐작할 수 있었는데요...
gcp는 처음 프로젝트를 만들고 사용할 api를 직접 사용 버튼을 클릭해야 하는데 처음 프로젝트를 만들고 사용 버튼을 누르지 않아 발생했던 에러였습니다 ㅎ..ㅎ 머쓱
다시 두근두근 apply 시간
그런데..
🚨 Trouble Shooting3
저에게 이런 시련을 주었지만 이겨내 보겠습니다.
Error: Error creating BackendService: googleapi: Error 404: The resource 'projects/project_id/zones/asia-northeast3-c/networkEndpointGroups/ingress-nginx-80-neg' was not found, notFound 우선 에러 메시지를 통해 Network Endpoint Group(NEG)가 존재하지 않거나 아직 생성되지 않아 발생한 에러라는 점을 캐치했다. 에러 메시지에서 알려준 ../../gcp/loadbalancer/main.tf의 15번째 줄을 따라가 보니 ingress와 loadbalancer를 설정하는 과정에서 발생한 문제라는 것을 알 수 있었습니다.
🛠️ 오류 해결 과정 1. 우선 loadbalancer와 관련된 테라폼 코드가 실행되지 않도록 주석처리 후 terraform apply 실행 - 가장 먼저 실행되는 main.tf(../../example/gcp/main.tf)의 loadbalancer 부분 - config.tf(../../example/gcp/config.tf)의 loadbalancer 부분
-> 결과는 성공! 이로써 네트워크에 문제가 있다는 걸 발견했습니다. 2. 문득 네임서버를 제대로 설정했던가 하는 의문이 들어 확인해 봤습니다. - 역시나!! 네임서버가 설정이 안 되어 있었습니다... 후후 - 저는 gcp를 사용했기 때문에 cloud dns 영역 만들기를 한 후 만들어진 영역의 네임서버를 가비아의 제 도메인에 적용시켰습니다. (여담이지만 가비아에서 500원에 1년 사용 가능한 도메인을 팔길래 냉큼 샀습니다.)
3. helm을 이용해 ingress nginx controller를 설치해 줍니다. - helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx - ingress-nginx는 nginx를 역방향 프록시 및 로드 밸런서로 사용하는 K8s용 Ingress 컨트롤러입니다. 여기서는 로드 밸런서로 nginx를 사용하기 위해 해당 오픈소스를 사용했습니다. ingress-nginx 설치 후 helm upgrade를 통해 helm 차트의 변동사항을 release에 적용합니다.
4. gke의 neg를 사용하기 - gcloud compute network-endpoint-groups list - neg를 조회하기 위해 위와 같은 명령어를 사용했고 설정한 리전의 가용영역 별로 하나씩 neg가 생성되어 있는 것을 확인했습니다.