본문 바로가기

Terraform42

[terraform-provider-kubernetes/Issue] StorageClass ReclaimPolicy 관련 이미 생성된 Strorage Class의 경우, Reclaim Policy를 변경할 수 없다. 그러나 Terraform 으로 변경 시도 시 변경된다고 뜸 -> 실제로 변경되진 않음 Terraform으로 변경 시도 시, replacement되도록 변경되어야 한다. 이미 누가 이슈를 올려놨다. https://github.com/hashicorp/terraform-provider-kubernetes/issues/1965 Storage class reclaim_policy changes don't force recreation · Issue #1965 · hashicorp/terraform-provider-kubernetes For a plan like this: # kubernetes_storage_class.. 2023. 9. 5.
[RBAC & IRSA] ECR Secret Updater Cronjob 구성 pod가 ECR의 이미지를 받아오는 방법은 여러가지가 있다. 1. EKS에서 보편적이고 권장되는 방법인, EKS Node Role의 권한으로 받아오는 것 2. ECR Token 값을 받아와 Docker Secret으로 저장 후 pod가 해당 Secret을 물고 올라감 나도 당연히 우리 회사의 새 아키텍처에서 1번으로 세팅해두고 싶었다. 그러나! 새 아키텍처에서는 "모든 계정의 클러스터" 에서 "공용 계정의 ECR" 에서 이미지를 받아오는 것으로 결정됐다. 뭐...그래도 Cross Account로 받아오는 방법이 당연 있을텐데, 역시 ECR Repository 단위로 타 계정을 허용해줄 수 있었다. { "Version": "2008-10-17", "Statement": [ { "Sid": "AllowPus.. 2023. 9. 4.
[Terraform/k8s] aws-auth ConfigMap Patch # aws-auth란? aws와 k8s는 권한 체계를 다르게 가져간다. -> aws에 어드민 권한이 있더라도 eks를 최초로 생성한 User(또는 Role)가 아니라면 내부 리소스를 확인할 수 없다. 하지만 aws에서 올리는 k8s인 eks 특성상, aws의 권한을 인가받을 수 있어야 한다. 예를들면, 당장 eks의 노드(ec2. 또는 fargate session)에서도 k8s 리소스들에 대한 권한이 필요하며, aws의 다른 유저들에게 내가 생성한 eks를 공유할수도 있어야 한다. -> aws authentication을 k8s 권한체계랑 매핑시켜주는게 aws-auth ConfigMap의 역할이다. aws-auth의 full configuration format은 아래에서 확인할 수 있다. https:/.. 2023. 7. 20.
[Terraform/k8s] gp2 Storage Class patch eks를 만들면, gp2 storage class가 자동으로 같이 생성되어 있다. https://docs.aws.amazon.com/eks/latest/userguide/storage-classes.html Storage classes - Amazon EKS Storage classes Amazon EKS clusters that were created prior to Kubernetes version 1.11 weren't created with any storage classes. You must define storage classes for your cluster to use and you should define a default storage class for your persistent vo.. 2023. 6. 5.
[Terraform] Plan만 가능한 권한? Read-Only 권한을 주면 plan만 가능합니다. 2023. 5. 15.
[Terraform/AWS] EC2를 Directory Service에 Seamlessly하게 join시키기 콘솔에서 진행 시엔 적절한 EC2 Role과 Directory Service를 지정해주면 된다. 그러나 API로는 EC2 생성 시 Directory Service를 연결해주는 옵션이 없고, SSM Document를 사용해야 한다. locals { domain = "honglab.com" ec2role_policies = [ "arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore", "arn:aws:iam::aws:policy/AmazonSSMDirectoryServiceAccess", ] } ## Directory Service resource "aws_directory_service_directory" "this" { name = local.domain ## 필.. 2023. 1. 16.
[Terraform/AWS] VPC Peering Module을 만들 때 고려할 점 테라폼은 aws의 api를 사용해서 aws의 리소스를 제어한다. aws의 콘솔은 aws에서 api를 ui로 보기좋게(?) 제공하는 서비스이기 때문에, api를 직접 쓰는 것과는 다른 점들이 존재한다. (콘솔에선 못하지만 api로는 가능한 작업이 있는 점 등등..) 따라서 aws의 콘솔 작업과 aws api 작업 은 차이점이 분명히 존재하며, 멱등성을 제공하는 IaC도구인 terraform의 경우 별도로 고려해야 할 점들이 불가피하게 생긴다. 그 중에서도 최근에 날 괴롭혔던게(?) VPC Peering이었는데, 너무 쉬운 서비스라고 평소에 생각해왔기 때문에 의외로 애를 더 먹어버렸다. 바로 가보자! # 확장성(multi provider)을 고려한 Peering Module 지금까지 TGW를 메인으로 써왔기.. 2022. 10. 30.
[AWS] Session Manager 중앙 집중식 로깅 구현 : SSM Session Manager Cross Account S3 Logging Session Manager Logging은 세션 접속한 동안의 명령까지도 모두 로깅으로 남는다. Multi Account AWS 환경에서 각 계정의 Session Manager Logging을 로깅 계정의 S3로 쌓도록 설정해보자. Encrypt 설정은 하지 않는다. 하게 되면 S3 Bucket 정책 등이 달라져야 할 것이다. # Architecture # 1. SSM Logging 설정 Console에서 하는 법 Systems Manager > Session Manager > Preferences 에서 설정 가능 (CLI, IaC등 API로는 불가) Bucket 이름과 Prefix를 지정해준다 API(CLI or IaC)로 하는 법 SSM-SessionManagerRunShell 문서를 직접 수정 C.. 2022. 8. 28.
[Terraform/k8s] k8s YAML 리소스로 Terraform Code를 쉽게 작성하는 3가지 방법 Terraform으로 kubernetes를 관리하는 경우, yaml 리소스를 한땀한땀 HCL Code로 변경하는건 매우 귀찮다 (너무 당연하게도) 노가다를 자동으로 돌려주는 오픈소스가 이미 있었다 1. k2tf (Open Source) 공식 k8s provider에서 제공하는 API를 사용하는 경우, k2tf를 사용해 간편하게 변환할 수 있다 https://github.com/sl1pm4t/k2tf GitHub - sl1pm4t/k2tf: Kubernetes YAML to Terraform HCL converter Kubernetes YAML to Terraform HCL converter. Contribute to sl1pm4t/k2tf development by creating an account o.. 2022. 8. 21.
[Terraform/EKS/k8s] import 시 Kubernetes: Unauthorized 상황 Terraform의 한 모듈 내에서 EKS Cluster와 k8s 리소스들을 같이 프로비저닝 중 k8s 리소스 블럭들을 추가하였고, 기존 cluster 내부 리소스들을 import 해야하는 상황 ## k8s provider 설정 data "aws_eks_cluster_auth" "cluster" { name = aws_eks_cluster.this.id } provider "kubernetes" { host = aws_eks_cluster.this.endpoint token = data.aws_eks_cluster_auth.cluster.token cluster_ca_certificate = base64decode(aws_eks_cluster.this.certificate_authority[0].d.. 2022. 6. 28.