[클라우드/OpenStack - OpenStack 환경 구성하기(1)]

SooYeon Yeon·2022년 9월 18일
1

클라우드 OpenStack

목록 보기
5/9

OpenStack 환경 구성하기

네트워크 만들기

네트워크 생성 → 서브넷 만들기 → 라우터 만들기 → 라우터에 서브넷 추가

  • admin으로 들어감
[root@localhost ~]# source keystonerc_admin
  • 네트워크 생성
[root@localhost ~(logged)]# openstack network create mynet1
  • 서브넷 만들기
[root@localhost ~(logged)]# openstack subnet create --subnet-range 172.16.123.0/24 --gateway 172.16.123.1 --network mynet1 --dhcp --dns-nameserver 8.8.8.8 mysubnet1
  • 만든 서브넷 확인
[root@localhost ~(logged)]# openstack subnet list
+--------------------------------------+-----------+--------------------------------------+-----------------+
| ID                                   | Name      | Network                              | Subnet          |
+--------------------------------------+-----------+--------------------------------------+-----------------+
| 6de82e67-b6ca-4ebd-bdc3-a9a020214ffd | mysubnet1 | 7076d607-5b0e-4877-bd51-4644db97a03b | 172.16.123.0/24 |
+--------------------------------------+-----------+--------------------------------------+-----------------+

[root@localhost ~(logged)]# openstack subnet show mysubnet1
+-------------------+--------------------------------------+
| Field             | Value                                |
+-------------------+--------------------------------------+
| allocation_pools  | 172.16.123.2-172.16.123.254          |
| cidr              | 172.16.123.0/24                      |
| created_at        | 2022-09-15T02:46:29Z                 |
| description       |                                      |
| dns_nameservers   | 8.8.8.8                              |
| enable_dhcp       | True                                 |
| gateway_ip        | 172.16.123.1                         |
| host_routes       |                                      |
| id                | 6de82e67-b6ca-4ebd-bdc3-a9a020214ffd |
| ip_version        | 4                                    |
| ipv6_address_mode | None                                 |
| ipv6_ra_mode      | None                                 |
| name              | mysubnet1                            |
| network_id        | 7076d607-5b0e-4877-bd51-4644db97a03b |
| project_id        | c40873732ac9467aba534da6e8f7a4ec     |
| revision_number   | 0                                    |
| segment_id        | None                                 |
| service_types     |                                      |
| subnetpool_id     | None                                 |
| tags              |                                      |
| updated_at        | 2022-09-15T02:46:29Z                 |
+-------------------+--------------------------------------+
  • 대시보드에서 확인도 가능

  • 대시보드에서도 네트워크 생성 가능

  • 라우터 만들기
[root@localhost ~(logged)]# openstack router create myrouter1
  • 서브넷과 라우터 연결
[root@localhost ~(logged)]# openstack router add subnet myrouter1 mysubnet1

  • 대시보드에서 라우터 만들기

myrouter2 클릭 후 인터페이스 들어가기 > 인터페이스 생성

  • 네트워크 토폴로지 확인

인스턴스 생성 준비

1. key-pair

  • public은 openstack에서 보관

  • private key는 사용자가 가져감

  • 동일한 한쌍의 키가 되면 세션이 열림

  • gildong의 한쌍의 키 생성

[root@localhost ~(logged)]# ssh-keygen -q -f ~/.ssh/gildong.pem -N ""
  • chulsoo의 한쌍의 키 생성
[root@localhost ~(logged)]# ssh-keygen -q -f ~/.ssh/chulsoo.pem -N ""
  • 확인
[root@localhost ~(logged)]# ls ~/.ssh
authorized_keys  chulsoo.pem  chulsoo.pem.pub  gildong.pem  gildong.pem.pub  id_rsa  id_rsa.pub

pem : private key

pem.pub : public key

public key는 openstack에 보관, private은 사용자에게 다운받게 하고, 여기서는 삭제해야함

  • key-pair 생성(gildong)
[root@localhost ~(logged)]# openstack keypair create --public-key ~/.ssh/gildong.pem.pub gildongkey
+-------------+-------------------------------------------------+
| Field       | Value                                           |
+-------------+-------------------------------------------------+
| fingerprint | 91:32:9a:28:1e:ec:2d:55:93:75:be:41:8f:aa:d5:d2 |
| name        | gildongkey                                      |
| user_id     | 327feb443acc4995b4dfd7081a67d4da                |
+-------------+-------------------------------------------------+
  • key-pair 생성(chulsoo)
[root@localhost ~(logged)]# openstack keypair create --public-key ~/.ssh/chulsoo.pem.pub chulsookey
+-------------+-------------------------------------------------+
| Field       | Value                                           |
+-------------+-------------------------------------------------+
| fingerprint | d8:5e:87:4b:93:0e:8d:b8:5f:c8:c1:4b:02:f7:b5:86 |
| name        | chulsookey                                      |
| user_id     | 327feb443acc4995b4dfd7081a67d4da                |
+-------------+-------------------------------------------------+
  • 만들어진 key 확인

Dashboard에서 키페어 생성하면 사용자 입장에서 만들어진다.

2. flavor

관리 > Compute > Flavor

현재 5개가 있는데, xsmall을 만들어보자

  • flavor 생성
[root@localhost ~(logged)]# openstack flavor create --id 6 --vcpus 1 --ram 1024 --disk 20 m1.xsmall
  • 대시보드 확인

만들어진 것을 볼 수 있다.

3. image 등록하기

http://cloud.centos.org/centos/7/images/

centos7을 사용할 것이다.

  • 이미지 설치
[root@localhost ~(logged)]# wget http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud-2003.qcow2.xz
[root@localhost ~(logged)]# xz -d CentOS-7-x86_64-GenericCloud-2003.qcow2.xz
  • 이미지 등록하기
[root@localhost ~(logged)]# openstack image create "CentOS7" --file CentOS-7-x86_64-GenericCloud-2003.qcow2 --disk-format qcow2 --container-format bare --public
  • 이미지 저장 또는 관리 서비스
    • glance @ openstack

    • AMI @ aws

      이미지 public - CSP에서 등록, private

  • 이미지 확인

4. 보안그룹

  • ACL(access-list 100 permit tcp any host 2.2.2.2 eq 80)의 경우에는 서브넷 단위로 보안 정책을 수립한다.

  • 보안그룹은 인스턴스 단위로 보안정책을 수립한다.

  • 일반적으로 보안 그룹에서 inbound, outbound 중 주로 inbound를 작성한다. outbound는 기본적으로 모두 허용하는 것으로 설정된다.

  • 보안 그룹 생성(DashBoard로)

  • 규칙 추가

바깥쪽 모든 이들이 ICMP(Ping 보내는 것) 허용하겠다는 뜻

외부에서 MYSQL로 들어오는 것 허용하겠다는 뜻

8080포트로 들어오는 것 허용

CLI로 보안그룹 및 규칙 생성

외부에서 유입되는 트래픽 중 웹접속(80/tpc, 443/tcp), SSH 접속(22/tcp), ICMP는 허용된다

단, 인스턴스에서 외부로 나가는 것은 모두 허용된다(default)

  • 보안그룹 생성(CLI로)
[root@localhost ~(logged)]# openstack security group create permitweb
  • 규칙 넣기
[root@localhost ~(logged)]# openstack security group rule create --proto tcp --dst-port 80 permitweb
[root@localhost ~(logged)]# openstack security group rule create --proto tcp --dst-port 443 permitweb
[root@localhost ~(logged)]# openstack security group rule create --proto tcp --dst-port 22 permitweb
[root@localhost ~(logged)]# openstack security group rule create --proto icmp permitweb
  • premitweb 보안그룹에 rule이 적용되어 있는 것을 알 수 있다.

SSH를 모두에게 들어올 수 있게 하면 위험하므로 기존 ssh rule을 삭제하고 새로 추가한다.

  • 해당 주소에서만 가능하게 한다

5. 인스턴스 생성하기

using CLI

  • 기본 틀
openstack server create \
--flavor "flavor이름" \
--image "이미지이름" \
--security-group "SG이름" \
--key-name "키이름" \
--nic net-id=$(openstack network list | grep mynet1 | gawk '{print $2}' ) \
CentOS1

openstack image list 이런식으로 검색해서 이름 알아오기

gildong key를 선택할 것임

--min 2 --max 2로 두개 만들 수 있음. min,max 없으면 하나 만드는것

mynet1의 ID를

openstack network list | grep mynet1 | gawk ‘{print $2}’ 를 통해 network id를 뽑아낼 수 있음

이름은 CentOS1으로 한다.

openstack server create --flavor m1.xsmall --image CentOS7 --security-group permitweb --key-name gildongkey --nic net-id=$(openstack network list | grep mynet1 | gawk '{print $2}' ) CentOS1

GUI로 생성

오른쪽 위 인스턴스 생성 > 이름 : CentOS2 > Next > 새로운 볼륨 생성 아니오 > 이미지 CentOS7 선택 > Next >

네트워크는 mynet2로, 보안그룹은 permitweb, keys는 chulsoo

프로젝트 > Compute > 인스턴스

6. 외부 네트워크 생성하기

가상 스위치 ovs(openvswitch)

[root@localhost ~(logged)]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts(logged)]# rpm -qa | grep openvswitch
openstack-neutron-openvswitch-13.0.7-1.el7.noarch
openvswitch-2.11.0-4.el7.x86_64
python-openvswitch-2.11.0-4.el7.x86_64
  • ovs 기반의 br-ex 가상스위치
[root@localhost network-scripts(logged)]# cp ifcfg-eth0 ifcfg-br-ex
[root@localhost network-scripts(logged)]# vi ifcfg-br-ex
TYPE=OVSBridge
BOOTPROTO=none
NAME=br-ex
DEVICE=br-ex
DEVICETYPE=ovs
ONBOOT=yes
IPADDR=211.183.3.111
PREFIX=24
GATEWAY=211.183.3.2
DNS1=8.8.8.8
NM_CONTROLLED=no

설정해서 br-ex로 했기 때문에 이름을 br-ex로 해야함

  • eth0 스위치
[root@localhost network-scripts(logged)]# vi ifcfg-eth0
TYPE=OVSPort
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
DEVICETYPE=ovs
OVS_BRIDGE=br-ex
ONBOOT=yes
NM_CONTROLLED=no
  • 외부 접속 네트워크 만들기
openstack network create --provider-physical-network extnet --provider-network-type flat --external extnet
  • 서브넷 만들기
openstack subnet create ext_subnet --network extnet --subnet-range 211.183.3.0/24 --allocation-pool start=211.183.3.201,end=211.183.3.239 --no-dhcp --dns-nameserver 8.8.8.8 --gateway 211.183.3.2
openstack network set --external extnet

외부네트워크는 지구모양 표시가 뜬다.

프로젝트 > 네트워크 > 라우터 > 게이트웨이 설정 클릭 >

SNAT : Static NAT (floating IP) 사용

Floating IP를 발행 (인스턴스와 아직 매핑 안한 상태)

인스턴스와 1대1 매핑 해주면 외부로 나갈 수 있다.

연결 클릭 >

[root@localhost network-scripts(logged)]# systemctl restart openvswitch
[root@localhost network-scripts(logged)]# systemctl restart neutron-l3-agent
[root@localhost network-scripts(logged)]# systemctl restart network

윈도우 CMD에서 해당 Floating IP로 ping을 보내면 응답이 온다.

[root@localhost .ssh(logged)]# cat ~/.ssh gildong.pem

복사해서 바탕화면에 저장 gildong.pem

puttygen

Conversions > import key > gildong.pem

Save private key gildong.ppk로 저장

putty

SSH > Auth > ppk 파일 넣기

centos@211.183.3.206 로 접속하기

CentOS1을 mynet2에 생성하기

  1. CentOS1 삭제

    [root@localhost .ssh(logged)]# openstack server delete CentOS1
  2. mynet2에 CentOS1을 다시 생성

    • CentOS2와 동일하게 key : chulsoo 키를 사용해서 생성하기
    openstack server create --flavor m1.xsmall --image CentOS7 --security-group permitweb --key-name chulsookey --nic net-id=$(openstack network list | grep mynet2 | gawk '{print $2}' ) CentOS1
  3. 둘다 floating ip를 할당하고, httpd를 설치해주세요

새로 만든 211.183.3.203 Floating IP 연결 클릭 > CentOS1과 연결

211.183.3.206은 CentOS2와 연결

putty로 centos@211.183.3.203, centos@211.183.3.206 접속(SSH Auth에 chulsoo pri key 넣고)

httpd 설치

```bash
sudo yum -y install httpd
```

- CentOS1, CentOS2의 index.html 파일을 다르게 설정해주기

```bash
[centos@centos1 html]$ sudo touch /var/www/html/index.html
[centos@centos1 html]$ sudo vi /var/www/html/index.html
[centos@centos1 html]$ sudo systemctl enable httpd
[centos@centos1 html]$ sudo systemctl start httpd
```

```bash
[centos@centos1 ~]$ curl http://localhost
<h2>hello1 centos1</h2>
```
  1. 모두 다 종료

0개의 댓글