最近打算搭一套虛擬機來學(xué)習(xí)一下 k8s界弧,所以就需要搭建多個可以相互訪問的虛擬機并組成一個局域網(wǎng)蔫仙。搭建的時候走了不少彎路,這里記錄一下組網(wǎng)過程耍属。
基礎(chǔ)
本文涉及到了如下部分:
- 宿主機:macOS 10.14.5
- virtualbox:6.0.8
- 虛擬機1:ubuntu server 18.04 主機名:
master1
- 虛擬機2:ubuntu server 18.04 主機名:
worker1
需求
目的是搭建一套網(wǎng)絡(luò)矾兜,滿足下列要求:
- 每個虛擬機都可以訪問互聯(lián)網(wǎng)
- 宿主機可以通過
ssh
訪問每個虛擬機 - 虛擬機直接可以相互訪問
- 虛擬機 ip 固定损趋,且不會依賴宿主機所處網(wǎng)絡(luò)
需求分析
從需求可以看出來,網(wǎng)絡(luò)模式選 橋接網(wǎng)卡 模式肯定就不行了,因為橋接網(wǎng)卡會將虛擬機映射到宿主機所處的網(wǎng)絡(luò)中浑槽,雖然可以將其設(shè)置為靜態(tài) ip蒋失,但是依舊會對宿主機網(wǎng)絡(luò)產(chǎn)生一定影響,如果 宿主機移動到了另一個網(wǎng)絡(luò)中桐玻,而那個網(wǎng)絡(luò)中恰好又有另一個設(shè)備已經(jīng)使用了虛擬機的 ip篙挽,那么勢必會出現(xiàn)問題。所以镊靴,橋接模式 pass铣卡。
然后來看一下 僅主機host-only
模式,這個模式可以滿足第 2偏竟、3 條需求煮落。但是使用該模式后,虛擬機想要訪問互聯(lián)網(wǎng)的話會受到宿主機的host-only
網(wǎng)卡的網(wǎng)絡(luò)狀態(tài)影響踊谋,如果該網(wǎng)卡不能上網(wǎng)的話那么虛擬機就都不能上網(wǎng)蝉仇,雖然可以通過配置完成,但是會修改宿主機的網(wǎng)絡(luò)配置殖蚕,個人不太滿意轿衔,繼續(xù)思考。
一提到簡單的網(wǎng)絡(luò)配置那就想到了 NAT網(wǎng)絡(luò)地址轉(zhuǎn)換 模式了睦疫。這個模式是 VirtualBox 默認的網(wǎng)絡(luò)配置害驹,可以讓虛擬機無需配置就直接連接互聯(lián)網(wǎng)。剛好可以滿足第 1 條需求笼痛。
那么情況就已經(jīng)清晰了裙秋,給每臺虛擬機都配置雙網(wǎng)卡:
- 網(wǎng)卡1采用 VirtualBox 默認的 NAT網(wǎng)絡(luò)地址轉(zhuǎn)換 模式,來為虛擬機提供互聯(lián)網(wǎng)訪問缨伊。
- 網(wǎng)卡2采用 僅主機
host-only
模式,來提供宿主機到虛擬機的連接以及虛擬機直接的訪問进宝。
注意刻坊!該套雙網(wǎng)卡配置的默認網(wǎng)卡是網(wǎng)卡1,且網(wǎng)卡1的NAT地址轉(zhuǎn)換模式是無法訪問其他虛擬機的党晋,而 k8s 有很多網(wǎng)絡(luò)配置將默認使用網(wǎng)卡1谭胚。就會導(dǎo)致很多問題,詳情如下:
動手
目的明確了接下來就是動手了,首先因為 VirtualBox 默認的就是 NAT網(wǎng)絡(luò)地址轉(zhuǎn)換 模式扳剿。且綁定在 網(wǎng)卡1 上旁趟。所以這個就不用我們操作了,可以通過下面步驟確認一下:
因為宿主機訪問虛擬機可以用 網(wǎng)卡2 的host-only
模式完成庇绽,所以這里的端口轉(zhuǎn)發(fā)就不用配置了锡搜。
配置網(wǎng)卡2
然后我們給虛擬機配置第二個網(wǎng)卡橙困,使用host-only
模式。首先需先新建一個host-only
網(wǎng)絡(luò)耕餐,點擊菜單欄中 管理 > 主機網(wǎng)絡(luò)管理器凡傅,再點擊新建創(chuàng)建,就可以創(chuàng)建一個可用的網(wǎng)絡(luò)肠缔。
這個網(wǎng)卡就是虛擬機局域網(wǎng)的網(wǎng)關(guān)夏跷。可以看到默認生生成的網(wǎng)卡地址為192.168.56.1
明未,也就是說我們將要把虛擬機加入到192.168.56.XXX
網(wǎng)段上槽华。因為我們要把虛擬機地址設(shè)為靜態(tài)地址,所以后面的DHCP
服務(wù)器不用去關(guān)心亚隅。
然后就可以給每個虛擬機設(shè)置網(wǎng)卡了硼莽。如下,點擊 虛擬機設(shè)置 > 網(wǎng)絡(luò) > 網(wǎng)卡2 > 連接方式選擇僅主機 > 界面名稱選擇上一步新建的網(wǎng)絡(luò)煮纵。設(shè)置完成后點擊確認就可以完成綁定了懂鸵。
配置 ubuntu
網(wǎng)卡掛載完成后,就可以啟動虛擬機進行配置了行疏,登錄上虛擬機之后ifconfig
看一下:
從圖里可以看到匆光,enp0s3
網(wǎng)卡的 ip 為10.0.2.15
,這是網(wǎng)絡(luò)地址轉(zhuǎn)換模式配置的1號網(wǎng)卡酿联。誒驚了终息,我第二個網(wǎng)卡呢?其實這里已經(jīng)掛載上了贞让,只不過還沒用啟用周崭,用ifconfig -a
就可以看到第二個網(wǎng)卡了。
圖里可以看到網(wǎng)卡2的名字叫enp0s8
喳张,你的有可能不一樣续镇,這個記住,一會要用的销部。
啟用網(wǎng)卡2
接下來就啟用網(wǎng)卡2摸航,首先編輯網(wǎng)卡配置文件。
sudo vi /etc/network/interfaces
然后新增如下內(nèi)容舅桩,記得把里邊的enp0s8
改成自己的網(wǎng)卡名酱虎,我把這臺虛擬機的 ip 設(shè)置成了192.168.56.21
,這個可以自己隨便改擂涛,只要是192.168.56.XXX
網(wǎng)段就行:
auto enp0s8
# 使用靜態(tài) ip
iface enp0s8 inet static
# 設(shè)置 ip 地址
address 192.168.56.21
# 設(shè)置子網(wǎng)掩碼
netmask 255.255.255.0
# 設(shè)置廣播地址
broadcast 192.168.56.255
編輯完成后:wq
保存读串,然后啟用該網(wǎng)卡 下面這個網(wǎng)卡名也要改成自己的:
sudo ifup enp0s8
什么你說報錯了,找不到ifup
?那安上就行了唄:
sudo apt install ifupdown2
啟用完了之后再ifconfig
就可以看到新的網(wǎng)卡了爹土,如果沒看到的話就reboot
重啟一下甥雕。
然后照葫蘆畫瓢配置好另一臺虛擬機就可以測試啦,我配置的信息如下:
主機名 | 主機地址 |
---|---|
master1 | 192.168.56.11 |
woker1 | 192.168.56.21 |
測試
測試的話相互ping
就好了胀茵,互聯(lián)網(wǎng)訪問直接ping www.baidu.com
就行社露,這里就不展示了。
到此虛擬機就算組網(wǎng)成功了琼娘,添加新的虛擬機也只需要將其 ip 添加到192.168..56.XXX
網(wǎng)段上即可峭弟。
使用別名訪問
如果我們想要在一臺虛擬機上訪問另一臺虛擬機,就要用ssh xxx.xxx.xxx.xxx
來連接脱拼,那么怎么通過別名而不是直接輸入 ip 地址進行連接呢瞒瘸,很簡單,使用下述命令編輯文件~/.ssh/config
熄浓,沒有直接新建即可:
sudo vi ~/.ssh/config
然后追加下述內(nèi)容:
# 指定別名為 master1
Host master1
# 指定目標 ip
hostname 192.168.56.11
# 指定登錄用戶名
user root
完成后:wq
保存后測試一下情臭,發(fā)現(xiàn)可以直接用master1
進行訪問了:
root@master1:~/.ssh# ssh master1
root@192.168.56.21's password:
Welcome to Ubuntu 18.04.2 LTS (GNU/Linux 4.15.0-52-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Tue Jun 25 10:53:16 UTC 2019
System load: 0.0 Processes: 98
Usage of /: 40.5% of 9.78GB Users logged in: 1
Memory usage: 16% IP address for enp0s3: 10.0.2.15
Swap usage: 0% IP address for enp0s8: 192.168.56.21
133 packages can be updated.
59 updates are security updates.
Last login: Tue Jun 25 10:33:16 2019 from 10.0.2.15
root@master1:~#
如果在登錄輸入密碼后提示Permission denied, please try again
,那就修改ssh
的配置文件赌蔑,啟用root
登錄俯在。使用sudo vi /etc/ssh/sshd_config
來打開配合文件本刽,并將PermitRootLogin
和PasswordAuthentication
字段的值設(shè)置為yes
民泵。然后使用service sshd restart
重啟服務(wù)即可。
免密鑰登錄
上一步中使用ssh master1
訪問其他虛擬機時座硕,仍然需要輸入密碼趾浅,所以最后再來配置一下免秘鑰登錄愕提,配置過程很簡單,想讓機器 A 訪問機器 B皿哨,就把機器 A 的公鑰放到機器 B 的~/.ssh/authorized_keys
文件里就行了浅侨。
首先我們在worker1
上生成一個密鑰,輸入下述命令后一路回車即可:
ssh-keygen
然后登錄master1
证膨,并依次輸入下述兩條命令將其復(fù)制并寫入到master1
的authorized_keys
中仗颈,注意我下面的scp
命令中使用了worker1
別名,要提前進行配置:
# 復(fù)制到 master1 主機
scp root@worker1:~/.ssh/id_rsa.pub /home
# 寫入到 authorized_keys 中
cat /home/id_rsa.pub >> ~/.ssh/authorized_keys
然后再次使用ssh master1
登錄就可以發(fā)現(xiàn)直接連接上而不需要密碼了椎例。