# 雲端技術實務 HW4&5 - 安裝OpenStack並建置虛擬機 :::success **參考資料** https://hackmd.io/@109213067/BkECVRMbn#%E5%AF%A6%E4%BD%9C https://hackmd.io/@FrCgWmOfTYe5ewU0YFGFmQ/rJy9bDyr2 https://hackmd.io/@Ox4EUOoZSiO_gWIfo6pEAg/Hy93VDP4n#OpenStack ::: :::info **補充問題** https://hackmd.io/@whitefir473/SJcDB5bVR ::: --- ## 1. 緣由 在實驗伺服器(IP為規定的第一組IP)安裝OpenStack並建置一個CirrOS虛擬機(綁對外IP為伺服器第二組IP),並將報告寫至hackmd網站,且公開文章權限並將連結設定到作業截圖內。 --- ## 2. 系統簡介 * **伺服器OS:** Ubuntu 22.04 LTS Server Vision * **Cloud Image:** CirrOS (cirros-0.6.2-x86_64-disk.img) * **伺服器IP:** 10.2.200.142 * **對外IP:** 10.2.200.143 --- ## 3. 安裝過程(虛擬機建立hostname改為學號,IP設定正確並確認網路可通) --- ### 一、安裝Devstack #### Ⅰ. 檢查更新 ```cmd= sudo apt-get update sudo apt-get upgrade -y ``` #### Ⅱ. 建立特權使用者:stack ```cmd= sudo useradd -s /bin/bash -d /opt/stack -m stack sudo chmod +x /opt/stack echo "stack ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/stack ``` #### Ⅲ. 登入 stack 使用者 ```cmd= sudo -u stack -i ``` ![image](https://hackmd.io/_uploads/HyZuOJfQR.png) #### Ⅳ. 安裝 git 套件 && 下載 github 上的 devstack ```cmd= sudo apt-get install -y git git clone https://opendev.org/openstack/devstack ``` #### Ⅴ. 切換到 devstack 文件夾中 && 建立 local.conf 文件 ```cmd= cd devstack sudo nano local.conf ``` ![image](https://hackmd.io/_uploads/BydrnbjGA.png) :::success local.conf 內容如下: ```cmd= [[local|localrc]] ADMIN_PASSWORD=secret DATABASE_PASSWORD=$ADMIN_PASSWORD RABBIT_PASSWORD=$ADMIN_PASSWORD SERVICE_PASSWORD=$ADMIN_PASSWORD HOST_IP=10.2.200.142 ``` ::: ![image](https://hackmd.io/_uploads/rJzv2ZofR.png) #### Ⅵ. 開始安裝 openstack (因網路問題啟動會花較久的時間) ```cmd= ./stack.sh ``` ![image](https://hackmd.io/_uploads/BJTR0-oMC.png) --- ### 二、OpenStack :::success 瀏覽器進入 http://10.2.200.142/dashboard 到登錄介面 * **用戶名稱:** admin or demo (老師建議用demo 但設定子網域要使用到admin) * **密碼:** secret (上方local.conf設定的密碼) ::: ![image](https://hackmd.io/_uploads/BytKTgizC.png) ![image](https://hackmd.io/_uploads/Sk5XxGozA.png) --- ### 三、建立虛擬機 #### Ⅰ. 建立虛擬外網(須與實體內網網段一樣) :::info **在現有public上,直接新增一子網路** Admin(管理員)|Project(專案) -> Network(網路) -> Networks(網路) -> public -> 子網域 -> 新增子網域 ::: ![image](https://hackmd.io/_uploads/Sykk0T-X0.png) ![image](https://hackmd.io/_uploads/HJJgRTWmA.png) ![image](https://hackmd.io/_uploads/rJWQLH4XA.png) #### Ⅱ. 橋接虛擬網卡到實體網卡 :::info sudo microstack.ovs-vsctl add-port br-ex **實體網卡名稱** //把虛擬網卡橋接到實體網卡 sudo ip addr flush dev **實體網卡名稱** //清掉實體網卡的 IP,避免跟虛擬網卡 IP 重複 sudo ip addr add **實體網卡IP/網段數字** dev br-ex //把原本實體網卡的 IP 位址加到虛擬網卡上 sudo ip link set br-ex up //啟用虛擬網卡 ::: ```cmd= sudo ovs-vsctl add-port br-ex eno1 #可能需安裝ovs-vsctl sudo ip addr flush dev eno1 #會斷網 ``` ![image](https://hackmd.io/_uploads/BJT-FGiGC.png) **到server修改00-installer-config.yaml** ![image](https://hackmd.io/_uploads/H13DmzjzA.png) ``` network: version: 2 renderer: networkd ethernets: br-ex: dhcp4: no addresses: [10.2.200.142/25] gateway4: 10.2.200.239 nameservers: search: [] addresses: [8.8.8.8,8.8.4.4] eno1: dhcp4: no eno2: dhcp4: true ``` ![image](https://hackmd.io/_uploads/BJRTqMiMC.png) **更新網路配置:** ```cmd= sudo netplan try ``` 接著繼續 ```cmd= sudo ip addr add 10.2.200.142/25 dev br-ex sudo ip link set br-ex up ip route ``` ![image](https://hackmd.io/_uploads/rkDX6zizC.png) #### Ⅲ. 另外新建網路(虛擬內網) :::info Admin(管理員)|Project(專案) -> Network(網路) -> Networks(網路) -> Create Network(新增網路) ::: ![image](https://hackmd.io/_uploads/HkTB8R-QR.png) > 虛擬內網網段可以自訂,不要跟實體網路一樣就好 ![image](https://hackmd.io/_uploads/rJSkwRZXA.png) ![image](https://hackmd.io/_uploads/B1wgv0Z70.png) #### Ⅳ.建立虛擬 router 連接虛擬內網和外網 :::info Admin(管理員)|Project(專案) -> Network(網路) -> Routers(路由器) -> Create Router(新增路由器) ::: ![image](https://hackmd.io/_uploads/Hy3ukCZQ0.png) **建立對外閘道** :::info Admin(管理員)|Project(專案) -> Network(網路) -> Routers(路由器) -> router -> 網路卡 ::: ![image](https://hackmd.io/_uploads/ryaITAbmR.png) #### Ⅴ.調整安全性群組 :::info Project(專案) -> Network(網路) -> 安全性群組 -> 管理規則 -> 加入規則 ::: ![image](https://hackmd.io/_uploads/B18y4kMQR.png) ![image](https://hackmd.io/_uploads/B1kGNJGmC.png) #### Ⅵ.新增可用的floating IP :::info Admin(管理員)|Project(專案) -> Network(網路) -> Floating IPs(浮動 IP) -> Allocate IP To Project(分配IP到專案) ::: > 選擇從虛擬外網產生一個 floating IP ![image](https://hackmd.io/_uploads/BJWn-0-Q0.png) #### Ⅶ.在虛擬內網建立虛擬機 :::info Project(專案) -> Compute(運算) -> Instances(雲實例) -> Launch Instance(發動雲實例) ::: ![image](https://hackmd.io/_uploads/ByndxrVQA.png) ![image](https://hackmd.io/_uploads/rJlHVA-m0.png) ![image](https://hackmd.io/_uploads/HkP94CW7C.png) ![image](https://hackmd.io/_uploads/Bk_lHyf7A.png) ![image](https://hackmd.io/_uploads/SkgWZS4mC.png) #### Ⅷ. 檢查網路拓樸並配對 floating IP 到虛擬機的虛擬內網 IP :::info Project(專案) -> Network(網路) -> Network Topology(網路拓撲) ::: ![image](https://hackmd.io/_uploads/rk7Fj3N7R.png) :::info Project(專案) -> Network(網路) -> Floating IPs(浮動 IP) -> 找到剛才產生的 floating IP -> Associate(連結) ::: ![image](https://hackmd.io/_uploads/BJMo5nV7R.png) ![image](https://hackmd.io/_uploads/S1whi3470.png) #### Ⅸ.測試連線虛擬機 ##### ⅰ.從cirrOS連外網 :::info Project(專案) -> Compute(運算) -> Instances(雲實例) -> s1092960(雲實例名稱) -> 主控台 ::: ![image](https://hackmd.io/_uploads/BkK6vR47A.png) :::success **預設使用者** : cirros **密碼** : gocubsgo ::: ![image](https://hackmd.io/_uploads/H14GrSVXA.png) ##### ⅱ.使用電腦cmd連線cirrOS ![image](https://hackmd.io/_uploads/HklGGhh4m0.png) ##### ⅲ.使用ubuntu server h01連線cirrOS ![image](https://hackmd.io/_uploads/SyiV3h470.png) --- ## 4. 結論 在網路上找了很多安裝教程,過程中遇到很多問題,像是在建立外網,一開始我們直接新增網路,到後面時才發現,要在現有public上,直接新增子網路,Demo沒有在public建立子網路的權限,因此到後面我們都是使用admin來做更改,router連接也因為我們沒有設定好網路而亂掉,好在有大家集思廣益才能順利解決問題。 :::warning 虛擬機hostname改為學號 ![image](https://hackmd.io/_uploads/BkO91lMXA.png) --- 若發生created even after we waited 191 seconds or 61 attempts可以取消新增雲硬碟 ![image](https://hackmd.io/_uploads/S1zPIR47A.png) --- **private IP, public IP, shared IP** **private IP:** 提供安全高效的內部通訊。 **shared IP:** IP可以在同一虛擬網路的不同subnet之間共享,增加network topology的靈活性,允許複雜的網路設計。 **public IP:** 這種IP用於需要外部連線。 正常 :::