kvm如何搭建集群,并且是否可以实现不同节点之间的漂移?

kvm 大家怎么搭建集群的
kvm能实现不通节点之间的漂移吗

参与4

1同行回答

zhuhaiqiangzhuhaiqiang项目经理银行
KVM集群远程控制方案1、API角色上的操作(管理证书)创建临时目录,以将文件和更改保存到其中: mkdir /opt/cert_file cd /opt/cert_file 使用 openssl 命令创建 2048 位 RSA 密钥: openssl genrsa -out cakey.pem 2048 使用该密钥针对本地 CA 创建自签名证书:这里参数: ...显示全部

KVM集群远程控制方案

1、API角色上的操作(管理证书)

创建临时目录,以将文件和更改保存到其中:

    mkdir /opt/cert_file
    cd /opt/cert_file

使用 openssl 命令创建 2048 位 RSA 密钥:

   openssl genrsa -out cakey.pem 2048

使用该密钥针对本地 CA 创建自签名证书:

这里参数: 按需修改:/C=> CN> /L=> GDFS> /O=> EFLY> /CN=> KVM CA
  openssl req -new -x509 -days 1095 -key cakey.pem -out cacert.pem -sha256 \\
-subj "/C=CN/L=GDFS/O=EFLY/CN=KVM CA"

检查 CA 证书:

   openssl x509 -noout -text -in cacert.pem
创建客户端和KVM服务端的证书

1、创建密钥:

 openssl genrsa -out serverkey.pem 2048
 openssl genrsa -out clientkey.pem 2048

为服务器创建证书签名请求。

这里默认是用代理映射端口, 所以CN需要设置为集群名(IP也可以), 而不是KVM的hostname
 openssl req -new -key serverkey.pem -out serverkey.csr \\
      -subj "/C=CN/O=EFLY/CN=${KVM}"
 exp: openssl req -new -key serverkey.pem -out serverkey.csr \\
      -subj "/C=CN/O=EFLY/CN=KVM_PROXY"

为客户机创建证书签名请求:

openssl req -new -key clientkey.pem -out clientkey.csr \\
-subj "/C=CN/O=EFLY/OU=virtualization/CN=root"

创建客户机和服务器证书

 openssl x509 -req -days 3650 -in clientkey.csr -CA cacert.pem -CAkey cakey.pem \\
      -set_serial 1 -out clientcert.pem
 openssl x509 -req -days 3650 -in serverkey.csr -CA cacert.pem -CAkey cakey.pem \\
      -set_serial 94345 -out servercert.pem

检查密钥:

 openssl rsa -noout -text -in clientkey.pem
 openssl rsa -noout -text -in serverkey.pem

检查证书:

 openssl x509 -noout -text -in clientcert.pem
 openssl x509 -noout -text -in servercert.pem

2、服务端

1、将认证中心 (CA) 证书 cacert.pem 文件复制到 /etc/pki/CA/cacert.pem

scp [proxy_ip]:/path/cacert.pem /etc/pki/CA/cacert.pem

2、创建 /etc/pki/libvirt 目录。将 servercert.pem 服务器证书文件复制到 /etc/pki/libvirt/servercert.pem。创建 /etc/pki/libvirt/private 目录。将 serverkey.pem 服务器密钥文件复制到 /etc/pki/libvirt/private/serverkey.pem 目录。确保只有 root 用户才能够访问专用密钥。

mkdir /etc/pki/libvirt
scp [proxy_ip]:/path/servercert.pem /etc/pki/libvirt/.
mkdir /etc/pki/libvirt/private
scp [proxy_ip]:/path/serverkey.pem /etc/pki/libvirt/private/.
chmod -R o-rwx /etc/pki/libvirt/private

验证这些文件是否已正确放置:

find /etc/pki/CA/*|xargs ls -l
ls -lR /etc/pki/libvirt

3、配置libvirt

生成 /etc/default/libvirtd 文件和 /etc/libvirt/libvirtd.conf 文件的副本。

编辑 /etc/default/libvirtd 文件

# Start libvirtd to handle qemu/kvm:
start_libvirtd="yes"
# options passed to libvirtd, add "-l" to listen on tcp
-  libvirtd_opts=""
+  libvirtd_opts="-l"
ps:- 是修改前内容, + 是修改后内容

4、 编辑 /etc/libvirt/libvirtd.conf 文件,并在 libvirtd.conf 文件中使用 tls_allowed_dn_list 伪指令配置一组允许的主题。以下示例显示原始文件中的更改。它将可接受的客户机证书限制为具有 O=IBM,OU=virtualization 值的证书,而系统可能会对国家或地区 (C) 和公共名 (CN) 分配任何值。主题中字段的顺序必须与您创建证书时使用的顺序相同。

- #tls_allowed_dn_list = ["DN1", "DN2"]
+tls_allowed_dn_list =     ["C=*,O=EFLY,OU=virtualization,CN=*"]
- listen_tcp = 0
+ listen_tls = 1
+ tls_port = "16514"

重新启动 libvirtd 守护程序服务,以使更改生效:

$ /etc/init.d/libvirtd restart
Stopping libvirtd daemon:                                  [  OK  ]
Starting libvirtd daemon:                                  [  OK  ]

3、客户端操作

1、 将认证中心 (CA) 证书 cacert.pem 从 PowerKVM 主机复制到管理站 /etc/pki/CA/ 目录。请勿变更文件名。

  scp [proxy_ip]:/path/cacert.pem /etc/pki/CA/

2、将客户机证书 clientcert.pem 复制到 /etc/pki/libvirt/ 目录,并将客户机密钥 clientkey.pem 从 PowerKVM 主机复制到 /etc/pki/libvirt/private/ 目录。使用缺省文件名称,并确保只有 root 用户才能够访问专用密钥。

mkdir -p /etc/pki/libvirt/
scp [proxy_ip]:/path/clientcert.pem /etc/pki/libvirt/.
mkdir /etc/pki/libvirt/private
scp [proxy_ip]:/path/clientkey.pem /etc/pki/libvirt/private/.
chmod -R o-rwx /etc/pki/libvirt/private

3、验证这些文件是否已正确放置:

ls -lR /etc/pki/libvirt/

4、设置hosts

这里主要是libvirt tls远程需要域名解析,与上面证书的CN值有关

vim /etc/hosts
10.10.250.35 KVM_PROXY

4、设置代理可以使用nginx 或者 haproxy等工具,如haproxy

apt-get install haproxy
vim /etc/haproxy/haproxy.cfg
  listen kvm-proxy-35
  bind 0.0.0.0:16515
  mode tcp
  use_backend kvm-tls-35
backend kvm-tls-35
  mode tcp
  server kvm-tls-35 10.10.250.35:16514

启动haproxy

service haproxy restart

验证连通

root@KvmApiServer:~# virsh -c qemu+tls://KVM_PROXY:16515/system hostname
ubuntu-kvm35

返回正常, 则完成远程

5、Sasl认证 (1)libvirt sasl配置在/etc/sasl2/libvirt.conf,Tls是tcp的加密传输协议,所以mech_list:需要设置成digest-md5。

vim /etc/sasl2/libvirt.conf
- #sasldb_path: /etc/libvirt/passwd.db
+ sasldb_path: /etc/libvirt/passwd.db
- mech_list: gssapi
# mech_list: gssapi
mech_list: digest-md5   # mandatory for TCP connections

(2)创建用户

root@ubuntu-kvm35:/etc/libvirt# saslpasswd2 -a libvirt efly
Password:
Again (for verification):

(3)指定密码库

root@ubuntu-kvm35:/etc/sasl2# sasldblistusers2 -f /etc/libvirt/passwd.db
efly@ubuntu-kvm35: userPassword

(4)重启libvirtd

systemctl restart  libvirtd

(5)测试连接

root@KvmApiServer:~# virsh -c qemu+tls://KVM_PROXY:16515/system hostname
Please enter your authentication name: efly
Please enter your password:
ubuntu-kvm35

收起
银行 · 2019-08-27
浏览3185

提问者

jianghenglz
运维奇安信
擅长领域: 服务器系统管理存储

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2019-07-25
  • 关注会员:2 人
  • 问题浏览:3704
  • 最近回答:2019-08-27
  • X社区推广