brunch

You can make anything
by writing

C.S.Lewis

by Master Seo Sep 20. 2024

NCP 23탄-6. 테라폼-웹서버-2024-09

<1> 테라폼으로 웹서버 1대 만들기

<2> 테라폼으로 웹서버 1대 만들기 - 원하는 네트워크로 변경

<3> 테라폼 - 사전 공부 자료





<1> 테라폼으로 웹서버 1대 만들기




1

명령서버 1대 만들기


콘솔로 우선 VPC 1개, Pub1 subnet 1개 네트워크 생성

로키 리눅스 1 대 생성  - 로그인

테라폼 사용을 위한 툴 설치  - 아래 참조 1 링크에 4번까지 진행


// 네이버 클라우드는 VPC는 기본 3개 제공한다. 

// 생성 후 VPC 삭제하며 테스트하자.



VPC

10.0.0.0/16


Pub1

10.0.1.0/24




또는

MAC pc 이면 

테라폼 사용을 위한 툴 설치  - 아래 링크에 4번까지 진행




2

참조 1


https://brunch.co.kr/@topasvga/3943



3

소스


cd

wget  https://github.com/NaverCloudPlatform/terraform-provider-ncloud/archive/refs/heads/master.zip

unzip master.zip



cd /root/terraform-provider-ncloud-main/examples/vpc/scenario01





4

# 설정 파일이 3개이다.


[root@ngame-web01-dev 2]# ls

main.tf    variables.tf  versions.tf


[root@ngame-web01-dev scenario01]#

[root@ngame-web01-dev scenario01]# more *.tf

::::::::::::::

main.tf

::::::::::::::

# VPC > User scenario > Scenario 1. Single Public Subnet

# https://docs.ncloud.com/ko/networking/vpc/vpc_userscenario1.html

provider "ncloud" {

  support_vpc = true

  region      = "KR"

  access_key  = var.access_key

  secret_key  = var.secret_key

}

resource "ncloud_login_key" "key_scn_01" {

  key_name = var.name_scn01

}

resource "ncloud_vpc" "vpc_scn_01" {

  name            = var.name_scn01

  ipv4_cidr_block = "10.0.0.0/16"

}

resource "ncloud_subnet" "subnet_scn_01" {

  name           = var.name_scn01

  vpc_no         = ncloud_vpc.vpc_scn_01.id

  subnet         = cidrsubnet(ncloud_vpc.vpc_scn_01.ipv4_cidr_block, 8, 1)

  // 10.0.1.0/24

  zone           = "KR-2"

  network_acl_no = ncloud_vpc.vpc_scn_01.default_network_acl_no

  subnet_type    = "PUBLIC"

  // PUBLIC(Public) | PRIVATE(Private)

}

resource "ncloud_server" "server_scn_01" {

  subnet_no                 = ncloud_subnet.subnet_scn_01.id

  name                      = var.name_scn01

  server_image_product_code = "SW.VSVR.OS.LNX64.CNTOS.0703.B050"

  login_key_name            = ncloud_login_key.key_scn_01.key_name

}

resource "ncloud_public_ip" "public_ip_scn_01" {

  server_instance_no = ncloud_server.server_scn_01.id

  description        = "for ${var.name_scn01}"

}

locals {

  scn01_inbound = [

    [1, "TCP", "0.0.0.0/0", "80", "ALLOW"],

    [2, "TCP", "0.0.0.0/0", "443", "ALLOW"],

    [3, "TCP", "${var.client_ip}/32", "22", "ALLOW"],

    [4, "TCP", "${var.client_ip}/32", "3389", "ALLOW"],

    [5, "TCP", "0.0.0.0/0", "32768-65535", "ALLOW"],

    [197, "TCP", "0.0.0.0/0", "1-65535", "DROP"],

    [198, "UDP", "0.0.0.0/0", "1-65535", "DROP"],

    [199, "ICMP", "0.0.0.0/0", null, "DROP"],

  ]

  scn01_outbound = [

    [1, "TCP", "0.0.0.0/0", "80", "ALLOW"],

    [2, "TCP", "0.0.0.0/0", "443", "ALLOW"],

    [3, "TCP", "${var.client_ip}/32", "1000-65535", "ALLOW"],

    [197, "TCP", "0.0.0.0/0", "1-65535", "DROP"],

    [198, "UDP", "0.0.0.0/0", "1-65535", "DROP"],

    [199, "ICMP", "0.0.0.0/0", null, "DROP"]

  ]

}

resource "ncloud_network_acl_rule" "network_acl_01_rule" {

  network_acl_no = ncloud_vpc.vpc_scn_01.default_network_acl_no

  dynamic "inbound" {

    for_each = local.scn01_inbound

    content {

      priority    = inbound.value[0]

      protocol    = inbound.value[1]

      ip_block    = inbound.value[2]

      port_range  = inbound.value[3]

      rule_action = inbound.value[4]

      description = "for ${var.name_scn01}"

    }

  }

  dynamic "outbound" {

    for_each = local.scn01_outbound

    content {

      priority    = outbound.value[0]

      protocol    = outbound.value[1]

      ip_block    = outbound.value[2]

      port_range  = outbound.value[3]

      rule_action = outbound.value[4]

      description = "for ${var.name_scn01}"

    }

  }

}




::::::::::::::

variables.tf

::::::::::::::

variable name_scn01 {

  default = "tf-scn01"

}

variable client_ip {

  default = "2.2.2.2"

}

variable access_key {

  default = "ncp_iam_BboCA"

}

variable secret_key {

  default = "ncp_iam_BPKZ7Gt"

}



::::::::::::::

versions.tf

::::::::::::::

terraform {

  required_providers {

    ncloud = {

      source = "navercloudplatform/ncloud"

    }

  }

  required_version = ">= 0.13"

}








5

변수 파일 =  값을 넣어야 한다!!!!


more variables.tf


variable name_scn01 {

  default = "tf-scn01"

}

variable client_ip {

  default = "YOUR_CLIENT_IP"

}

variable access_key {

  default = "YOUR_ACCESS_KEY"

}

variable secret_key {

  default = "YOUR_SECRET_KEY"

}





변수

변수 처리하는데 서브넷 계산법을 알아야 한다.


cidrsubnet(prefix, newbits, netnum) 계산법?


cidrsubnet(prefix, newbits, netnum)

prefix ending in /16 and a newbits value of 4, the resulting subnet address will have length /20.



1)

 ipv4_cidr_block = "10.0.0.0/16"

 subnet         = cidrsubnet(ncloud_vpc.vpc_scn_01.ipv4_cidr_block, 8, 1)


/16에 8을 더해 24비트로 결과가 나온다.

1로 시작한다.

10.0.1.0/24 


16+8 = 24

1로 시작



2)

/21


21 3 2


21+3 = 24

2로 시작


10.0.2.0 /24 로 만들어짐






6

실행

terraform init

terraform plan

terraform apply -auto-approve





7

결과


tf-scn01

10.0.0.0/16


tf-scn01

10.0.1.0/24

KR-2

Public



서버 이름 

 tf-scn01 

10.0.1.6

223.130.141.61


// os가 구 버전인 centos 7.5로 생성됨. 최신 이미지로 변경 필요 (확인중)



ACG

tf-scn01-default-acg

TCP0.0.0.0/0  3389

TCP0.0.0.0/0   22

10.0.0.0/16




8

리소스 삭제


terraform destroy  -auto-approve








<3> 테라폼 - 사전 공부 자료




1

https://www.youtube.com/watch?v=cP2IWGepwV4




2

https://www.youtube.com/watch?v=e_8ZtT_d0hg



4

테라폼으로 네트워크 만들기


https://brunch.co.kr/@topasvga/3594




다음

https://brunch.co.kr/@topasvga/4058


감사합니다.



                    

매거진의 이전글 NCP 23탄-5. 콘솔로 쿠버네티스 생성-2024
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari