네트워크 생성 → 서브넷 만들기 → 라우터 만들기 → 라우터에 서브넷 추가
[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 클릭 후 인터페이스 들어가기 > 인터페이스 생성
public은 openstack에서 보관
private key는 사용자가 가져감
동일한 한쌍의 키가 되면 세션이 열림
gildong의 한쌍의 키 생성
[root@localhost ~(logged)]# ssh-keygen -q -f ~/.ssh/gildong.pem -N ""
[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은 사용자에게 다운받게 하고, 여기서는 삭제해야함
[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 |
+-------------+-------------------------------------------------+
[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 |
+-------------+-------------------------------------------------+
Dashboard에서 키페어 생성하면 사용자 입장에서 만들어진다.
관리 > Compute > Flavor
현재 5개가 있는데, xsmall을 만들어보자
[root@localhost ~(logged)]# openstack flavor create --id 6 --vcpus 1 --ram 1024 --disk 20 m1.xsmall
만들어진 것을 볼 수 있다.
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
ACL(access-list 100 permit tcp any host 2.2.2.2 eq 80)의 경우에는 서브넷 단위로 보안 정책을 수립한다.
보안그룹은 인스턴스 단위로 보안정책을 수립한다.
일반적으로 보안 그룹에서 inbound, outbound 중 주로 inbound를 작성한다. outbound는 기본적으로 모두 허용하는 것으로 설정된다.
보안 그룹 생성(DashBoard로)
바깥쪽 모든 이들이 ICMP(Ping 보내는 것) 허용하겠다는 뜻
외부에서 MYSQL로 들어오는 것 허용하겠다는 뜻
8080포트로 들어오는 것 허용
외부에서 유입되는 트래픽 중 웹접속(80/tpc, 443/tcp), SSH 접속(22/tcp), ICMP는 허용된다
단, 인스턴스에서 외부로 나가는 것은 모두 허용된다(default)
[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
SSH를 모두에게 들어올 수 있게 하면 위험하므로 기존 ssh rule을 삭제하고 새로 추가한다.
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
오른쪽 위 인스턴스 생성 > 이름 : CentOS2 > Next > 새로운 볼륨 생성 아니오 > 이미지 CentOS7 선택 > Next >
네트워크는 mynet2로, 보안그룹은 permitweb, keys는 chulsoo
프로젝트 > Compute > 인스턴스
가상 스위치 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
[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로 해야함
[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 삭제
[root@localhost .ssh(logged)]# openstack server delete CentOS1
mynet2에 CentOS1을 다시 생성
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
둘다 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>
```