概述
爲了搭建雲IDS平臺,需要選型合適的虛擬化方案,以及對相應部署做一定的優化。基本設計架構爲,在以Centos操作系統安裝的宿主機中再部署IDS虛擬機(基於Centos操作系統)。
本設計文檔所述的設計方案,基於以下環境:
- Intel x86架構的cpu,支持intel VT和VT-d
- BIOS中enable VT和VT-d
- BIOS中建議開啓Intel Hyper-Threading Tech
- 使用kvm虛擬化
- 宿主機和IDS虛擬機爲Centos7.2操作系統
- 宿主機操作系統內核使用Linux內核3.18.24
設計方案
本次選擇的技術和方案如下:
- 使用libvirt和virsh管理套件管理虛擬機
- 使用virtio半虛擬化方案提升性能
- 使用網卡透傳方式提升流量接入性能
- 通過把虛擬機中指定的vcpu綁定到指定的物理cpu核上,提升cpu性能
內核模塊配置
宿主機環境是Linux內核3.18.24,爲了支持後續部署的IDS虛擬機所需的一些功能,需要修改內核中的配置選項,並重新編譯內核。
主要內核的配置選項如下:
- 需要開啓的VIRTIO相關模塊
CONFIG_VIRTIO_BLK=m
CONFIG_SCSI_VIRTIO=m
CONFIG_VIRTIO_NET=m
CONFIG_VIRTIO=m
CONFIG_VIRTIO_PCI=m
CONFIG_VIRTIO_BALLOON=m
- 需要開啓Intel_IOMMU
CONFIG_INTEL_IOMMU=y
- 開啓vfio模塊
CONFIG_VFIO_IOMMU_TYPE1=m
CONFIG_VFIO=m
CONFIG_VFIO_PCI=m
CONFIG_VFIO_PCI_VGA=y
CONFIG_KVM_VFIO=y
- 壓縮內核
爲了減小內核的大小,開啓內核中對模塊進行壓縮的操作。
CONFIG_MODULE_COMPRESS=y
# CONFIG_MODULE_COMPRESS_GZIP is not set
CONFIG_MODULE_COMPRESS_XZ=y
以下就是對內核的編譯和安裝了。
虛擬化技術選型
透傳網卡
爲了讓部署在宿主機中的IDS虛擬機可以更好的接入數據流量,需要把宿主機中一定數量的網卡透傳給IDS虛擬機。
PCI網卡透傳的條件
- 確認在BIOS中打開了硬件輔助虛擬化功能支持
在BIOS中查看VT(VT-X)及VT-d,設置爲enable
- 確認內核集成vfio、DMAR、IOMMU模塊
IOMMU模塊會把設備的I/O地址重映射爲內存物理地址,運行在CPU上的操作系統以互斥的方式管理MMU與IOMMU。
設置指定網卡透傳給IDS
- IOMMU_group分組
IOMMU模塊會把所有網卡分成不同的IOMMU_group管理,每個IOMMU_group下會有一個或者多個網卡設備。查看網卡設備屬於哪個IOMMU_group,可以通過網卡的PCI地址,查看如下:
如上可以查看到網卡當前使用的驅動爲igb,iommu_group爲6。
- PCI網卡透傳
網卡透傳通過編輯創建IDS虛擬機的配置文件的方式,在使用virsh define創建虛擬機時實現。
在設置透傳的網卡時,同一個IOMMU_group中的網卡不能有些透傳,有些沒有透傳,透傳後的網卡驅動會綁定爲vfio-pci驅動如下:
- 網卡透傳後
根據iommu_group選擇需要透傳的網卡。比如:如果透傳iommu_group號爲1和7的網卡,在透傳完成後,會在系統的/dev/vfio中生成如下文件:
virtio半虛擬化
爲了增加IDS虛擬機的運行性能,使用virtio虛擬化方案,主要使用以下相關功能:
- 使用virtio_balloon驅動,實現內存的高效利用
- 使用virtio-net,提升網絡性能
- 使用vhost-net提升網絡性能。
結束語
關於虛擬化的技術點有很多,本文只是一個簡單的設計思路,以後還需要繼續深入學習。