전체 글

· Cloud/Azure
1. HTTP, HTTPS1) HTTPHyper Text Transfer Protocol 의 약자로, 웹에서 데이터를 주고 받기 위한 프로토콜이다.상태 정보를 저장하지 않는 Stateless의 특징과, 클라이언트의 요청에 응답을 보낸 후 연결을 끊는 특징을 가지고 있다.이전 통신의 정보를 모르기 때문에 매번 인증을 해줘야 하고 이를 해결하기 위해 쿠키나 세션을 사용한다.2) HTTPSHyper-Text Transfer Protocol over Secure socket Layer의 약자로, HTTP에서 보안이 강화된 버전이다.SSL 프로토콜 위에서 돌아가는 HTTP 프로토콜이라고 할 수 있다.3) HTTP와 HTTPS의 차이점HTTP는 평문으로 데이터를 전송하기 때문에, HTTP로 아이디나 패스워드 같은 ..
1. Load Balancer 유형 1) 하드웨어 로드밸런서 하드웨어 로드 밸런싱은 전용 하드웨어 장비를 통해 부하를 분산한다. 하드웨어 장비로 로드밸런싱을 할 경우 가격이 비싸지만 좋은 성능을 제공한다. 주요 제조사로는 F5 Networks, Citrix, A10 Networks 등이 있다. 2) 소프트웨어 로드밸런서 서버에 설치되는 소프트웨어로, 하드웨어 로드밸런서에 비해 비교적 저렴한 비용으로 구성할 수 있다. 가상 머신, 컨테이너, 물리적 서버 등에서 실행 가능하다. 예시 HAProxy 고성능의 오픈 소스 로드밸런서로, TCP 및 HTTP 기반 로드밸런싱을 지원한다. Nginx 웹 서버로 유명하지만, 로드밸런서로도 사용 가능하며, 가벼우면서도 높은 성능을 제공한다. HTTP, HTTPS, TCP ..
1. 아키텍처 ExternalName SVC를 활용하여 서로 다른 Namespace에 있는 SVC로 Nginx Ingress를 설정한다. 2. ExternalName 서비스란? ExternalName는 클러스터 내부의 Pod가 외부 서비스에 도메인 이름을 통해 접근하는 데 사용된다. 이와 반대로 NodePort 및 LoadBalancer는 외부에서 클러스터 내부의 서비스에 접근하기 위해 사용된다. ExternalName 서비스 생성 시 셀렉터가 없고 DNS 이름을 사용한다. 사용 이유 외부 FQDN 주소가 바뀌더라도, CNAME은 그대로 유지할 수 있어 애플리케이션을 다시 작성하거나 빌드하지 않아도 된다. 외부 Domain을 마치 동일한 내부 서비스인 것처럼 참조할 수 있어 편리하다. 클러스터 내부에서도..
1. ArgoCD란? ArgoCD는 GitOps로 관리되는 Kubernetes manifests의 변경사항을 Monitoring 하며 실제 Cluster에 배포된 형태를 이와 동일하게 계속 유지시키는 역할을 한다. 애플리케이션의 상태를 Git Repository에 저장하고, Git Repository의 내용이 업데이트 되면 변경 사항을 기반으로 Kubernets 클러스터에 동기화 시켜주는 방식으로 동작한다. ArgoCD는 Kubernetes와 같이 선언적으로 동작한다. Git Repository의 특정 경로를 지정하고, 해당 경로에 원하는 Kubernetes의 상태가 기술된 manifest 파일들을 위치시키면 ArgoCD가 해당 파일에 선언한 상태들과 동일하게 Object들을 배포해준다. 2. ArgoC..
1. 동일한 자격 증명을 사용하여 여러 Azure 구독에 배포 여러 provider 블록을 생성하고 각각에 대한 alias를 지정한다. provider 블록에 사용하고자 하는 Azure 구독 id를 입력한다. # provider.tf terraform { required_providers { azurerm = { source = "hashicorp/azurerm" version = "=3.0.0" } } } provider "azurerm" { alias = "dev" subscription_id = var.dev_sub_id features {} } provider "azurerm" { alias = "prod" subscription_id = var.prod_sub_id features {} } 1)..
1. Azure CLI를 통한 인증 Terraform을 공유 환경에서 실행할 때는 서비스 주체를 사용하고, 로컬 환경에서 실행할 때는 Azure CLI를 사용하는 것이 좋다. Azure CLI를 통해 인증할 때 Terraform 는 자동으로 기본 구독에 연결된다. Azure CLI를 통한 인증은 사용자 계정을 사용할 때만 지원된다. az login az account set --subscription "" # provider.tf terraform { required_providers { azurerm = { source = "hashicorp/azurerm" version = "~>3.0" } random = { source = "hashicorp/random" version = "~>3.0" } } ..
1. Terraform 기본 명령어 1) terraform init Terraform 구성 파일이 포함된 작업 디렉터리를 초기화하는 데 사용된다. 새 Terraform 구성을 작성하거나 버전 제어에서 기존 구성을 복제한 후 실행해야 하는 첫 번째 명령이다. provider.tf 파일에서 required_providers에 프로바이더를 지정하지 않아도 테라폼이 코드에서 추론해 최신 버전의 프로바이더를 다운로드 받는다. terraform init 명령어 실행 시 생성되는 파일 .terraform 디렉터리 생성 .terraform.lock.hcl 파일 생성 2) terraform plan Terraform이 인프라에 적용하려는 변경 사항을 미리 볼 수 있는 실행 계획을 생성한다. 이전 state와 비교하여 변..
1. Sensitive variable란? 민감한 변수 값임을 알리고 테라폼의 출력문에서 값 노출을 제한한다. 민감한 변수로 지정해도 terraform.tfstate 파일에는 결과물이 평문으로 기록되므로 State 파일의 보안에 유의해야 한다. 2. Sensitive variable 설정 테스트 1) variables.tf에서 resource_group_name 변수에 "sensitive = true" 추가 2) terraform.auto.tfvars에서 resource_group_name의 변수 값은 정의하지 않음 3) terraform apply 명령어 실행 후 변수 값인 "jql-rg" 수동 입력 Sensitive variable로 구성되어 변수 값 입력 시 화면에 표출되지 않는다. 예상 결과 값에..