主機名(hostname)是Linux系統中用于標識網絡上特定設備的名稱,它在網絡通信、服務配置(如 Kubernetes 集群、數據庫)以及日志記錄中扮演著至關重要的角色。對于初學者來說,配置主機名似乎很簡單,但若不理解其背后的機制,可能會在未來遇到服務無法解析、網絡通信失敗等問題。
本文將為你詳細解析如何在 Ubuntu 20.04 或更高版本中正確地配置主機名,并介紹一種現代且高效的方法。
主機名的兩種類型:短主機名與 FQDN
在配置主機名之前,我們首先要理解兩種常見的主機名類型:
- 短主機名(short hostname): 比如
k8s-node03
。它通常用于本地網絡中,易于記憶和使用。 - 完全限定域名(FQDN - Fully Qualified Domain Name): 比如
k8s-node03.ilinux.io
。它包含了主機名和域名,是全球唯一的,用于互聯網或更復雜的網絡環境。
在 Linux 系統中,一個設備只能有一個靜態主機名,但這個名稱可以是短主機名,也可以是 FQDN。為了確保兼容性和可擴展性,最佳實踐是將靜態主機名設置為 FQDN。
方法一:使用 hostnamectl
命令(推薦)
hostnamectl
是 systemd
軟件包的一部分,是管理主機名的首選工具。它不僅能修改主機名,還能立即生效,并且會自動更新相關配置文件。
1. 修改靜態主機名
使用 hostnamectl
命令來設置你的新主機名。我們推薦直接設置為 FQDN。
sudo hostnamectl set-hostname k8s-node03.ilinux.io
這個命令會:
- 立即將內核中的主機名修改為
k8s-node03.ilinux.io
。 - 自動更新
/etc/hostname
文件,確保重啟后主機名依然生效。
2. 驗證更改
你可以使用 hostnamectl
或 hostname
命令來驗證更改是否成功。
hostnamectl
hostname
方法二:修改 /etc/hosts
文件(重要步驟!)
hostnamectl
命令雖然強大,但它不會修改 /etc/hosts
文件。這個文件用于將 IP 地址映射到主機名,是本地 DNS 解析的關鍵。若不更新它,一些服務(如 sudo
、某些網絡服務)可能無法正確解析本機主機名,導致奇怪的錯誤。
1. 編輯 /etc/hosts
文件
使用你喜歡的文本編輯器打開文件:
sudo nano /etc/hosts
2. 添加長短主機名映射
找到 127.0.1.1
這一行,確保它同時包含你的 FQDN 和短主機名。
修改前:
127.0.0.1 localhost
127.0.1.1 ubuntu-server
修改后:
127.0.0.1 localhost
127.0.1.1 k8s-node03.ilinux.io k8s-node03
重要說明:關于 127.0.1.1
的混淆點
在許多 Linux 發行版中,主機名通常映射到 127.0.0.1
。但對于 Ubuntu 來說,官方約定使用 127.0.1.1
來專門映射主機名,而 127.0.0.1
僅用于 localhost
。這樣做是為了避免某些依賴網絡服務的程序在解析時產生沖突,是 Ubuntu 的最佳實踐。
將 FQDN 和短主機名放在同一行,并用空格分隔。這樣做的好處是,無論是哪個程序查詢主機名,都能正確地解析到本地地址,確保所有服務都能正常運行。
關于臨時修改
如果你只是想在當前會話中臨時更改主機名進行測試,可以使用 hostname
命令。但請注意,這種方式不會修改任何配置文件,重啟后會恢復原狀,因此不推薦用于生產環境。
sudo hostname 新主機名
總結
正確配置 Ubuntu 主機名需要兩個關鍵步驟:
- 使用
sudo hostnamectl set-hostname FQDN
設置靜態主機名。 - 手動修改
/etc/hosts
文件,將 FQDN 和短主機名都映射到127.0.1.1
。
遵循這個流程,你的 Ubuntu 服務器將在任何網絡環境中都擁有一個健壯且可用的主機名。