libvirt-qemu-TLS加密虛擬機傳輸實例分析


說明

TLS(Transport Layer Security Protocol),即安全傳輸層協議,其核心是加密兩台計算機之間的通信。
libvirt中使用TLS,可以實現libvirt的安全加密。可以保證數據傳輸的安全性、完整性。
OpenStack環境中,Libvirt默認采用TCP方式,會監聽16509端口。這種方式是不安全的,因此建議采用TLS安全連接的方式。配置TLS最重要的步驟,是證書的生成及管理。證書的生成可以在任意節點進行。

證書的生成

證書的生成主要有以下幾步:

生成中央證書頒發機構證書。只需生成一次,所有節點的服務端證書及客戶端證書,均基於此生成。
生成服務端證書及私鑰。每個計算節點均需要配置與該計算節點對應的服務端證書及私鑰,需生成多次。
生成客戶端證書及私鑰。每個計算節點均需要配置與該計算節點對應的客戶端證書及私鑰,需生成多次。
證書分發。需將中央證書頒發機構證書、與計算節點對應的服務端證書與私鑰、與計算節點對應的客戶端證書與私鑰,分別復制到對應的計算節點目錄上。

證書生成工具安裝,很多服務器默認已經安裝

yum install gnutls-utils

CA證書生成

mkdir /root/pki
cd /root/pki

#將密鑰保存到cakey.pem中
certtool --generate-privkey > cakey.pem


vi ca.info

cn = inspur
ca
cert_signing_key
expiration_days = 700
#注意這里的的cn填寫你組織的名字(Name of your organization)
#然后這里的expiration_days填寫證書過期的日期,如果沒有的話默認是1年的期限

#開始生成ca文件
certtool --generate-self-signed --load-privkey cakey.pem --template ca.info --outfile cacert.pem

現在目錄下有了兩個文件
cakey.pem - CA的私鑰文件(注意保護這個文件)
cacert.pem - CA的公鑰文件(公鑰公鑰就是大家都可以看的那種)

服務端證書生成

certtool --generate-privkey > node02_serverkey.pem


vi node02_server.info

organization = inspur
cn = node02
ip_address = 100.7.34.23
tls_www_server
encryption_key
signing_key
expiration_days = 700

#organization還是填寫你的組織名字
#cn呢如果是公網就填域名,不是的話就是寫你KVM服務器的hostname,hostname用命令hostname查看
#ip_address寫你的kvm服務器的IP地址
#expiration_days和上面一樣

#注冊證書
certtool --generate-certificate --load-privkey node02_serverkey.pem \
  --load-ca-certificate cacert.pem --load-ca-privkey cakey.pem \
  --template node02_server.info --outfile node02_servercert.pem

 

客戶端證書

certtool --generate-privkey > node02_clientkey.pem


vi node02_client.info

country = CN
state = JN
locality = JN
organization = inspur
cn = node02
tls_www_server
encryption_key
signing_key
expiration_days = 700

certtool --generate-certificate --load-privkey node02_clientkey.pem \
  --load-ca-certificate cacert.pem --load-ca-privkey cakey.pem \
  --template node02_client.info --outfile node02_clientcert.pem

證書分發

模板是node1_client.info的就分發到co-dev-node1服務器,如果生成多個計算節點證書,每個計算節點分發包括服務端和客戶端證書,CA證書是同一個。

mkdir -p /etc/pki/libvirt/private  
chmod 755 /etc/pki/libvirt/
chmod 750 /etc/pki/libvirt/private 

分發ca證書
scp cacert.pem @node03:/etc/pki/CA
chmod 444 /etc/pki/CA/cacert.pem

分發服務端證書
scp -p node03_servercert.pem @node03:/etc/pki/libvirt/servercert.pem
scp -p node03_serverkey.pem @node03:/etc/pki/libvirt/private/serverkey.pem
chgrp qemu /etc/pki/libvirt \
              /etc/pki/libvirt/servercert.pem \
			  /etc/pki/libvirt/private \
			  /etc/pki/libvirt/private/serverkey.pem
			  
chmod 440 /etc/pki/libvirt/servercert.pem
chmod 440 /etc/pki/libvirt/private/serverkey.pem

分發客戶端證書
scp -p node03_clientcert.pem @node03:/etc/pki/libvirt/clientcert.pem
scp -p node03_clientkey.pem @node03:/etc/pki/libvirt/private/clientkey.pem

chmod 400 /etc/pki/libvirt/clientcert.pem
chmod 400 /etc/pki/libvirt/private/clientkey.pem

libvirtd配置

修改/etc/libvirt/libvirtd.conf 參數

listen_tcp = 1
listen_tls = 1  #開啟
tls_port = "16514" #端口可以不寫,不寫默認為16514
auth_tcp = "none"
log_level = 3
log_outputs = "3:file:/var/log/kolla/libvirt/libvirtd.log"
listen_addr = "100.2.30.241"
tcp_port = "16509"
host_uuid = "8148c199-01a8-57e4-85f8-50ad834b79f0"
key_file = "/etc/pki/libvirt/private/serverkey.pem" #證書路徑
cert_file = "/etc/pki/libvirt/servercert.pem" #證書路徑
ca_file = "/etc/pki/CA/cacert.pem" #證書路徑

 改完重啟libvirt服務

虛擬機遷移

測試一下證書的可用性

virsh -c qemu+tls://node32/system hostname

p2p的tls通道測試虛擬機在不同的主機間遷移 

virsh migrate --p2p --tunnelled instance-0000000e  qemu+tls://node32/system

 p2p原生遷移

virsh migrate --p2p  instance-00000001 qemu+tcp://100.2.30.242/system

 libvirt客戶端向libvirtd服務端的原生遷移

virsh migrate  instance-00000001 qemu+tcp://100.2.30.242/system
virsh migrate  instance-00000001 qemu+tls://node241/system

 

報錯處理

(1)

(nova-libvirt)[root@node03 /]# virsh migrate --p2p --tunnelled instance-00000005  qemu+tls://node02/system
error: Unable to pre-create chardev file '/var/lib/nova/instances/2105158c-94f2-4c4f-8f26-a211acdd7dd9/console.log': No such file or directory

 目標端創建該文件夾

(2)

(nova-libvirt)[root@node03 2105158c-94f2-4c4f-8f26-a211acdd7dd9]# virsh migrate --p2p --tunnelled instance-00000005  qemu+tls://node02/system
error: Cannot get interface MTU on 'qbrd0f61f69-2e': No such device

 目標端創建該網橋,brctl addbr qbrd0f61f69-2e

(3)

error: internal error: process exited while connecting to monitor: 2019-07-25T02:45:24.440142Z qemu-kvm: -chardev pty,id=charserial0,
logfile=/var/lib/nova/instances/0e4f2c37-b9ba-43f5-ac6c-9a0594caaebe/console.log,logappend=off: Unable to open logfile /var/lib/nova/instances/0e4f2c37-b9ba-43f5-ac6c-9a0594caaebe/console.log: Permission denied

openstack環境,可能路徑的權限不對,看看是不是需要改成nova

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM