描述

当你在openstack平台创建一个network,在这个network上创建两台虚拟机,当这两台虚拟机还需要VIP时,你从这个network分配一个地址做为VIP,配置到虚拟机上,你会发现这个VIP并不能被访问。因为在neutron中,从 VM 端口发送/接收的数据包必须具有该 VM 端口的固定 IP/MAC 地址,所以虚拟机的端口在创建时就会把IP/MAC进行了绑定。有这条规则存在,所以VIP 是无法与外部通信,但可以通过如下两个方法来解决。

  • 方法1(推荐): 为需要使用VIP的虚拟机端口配置allwed_address_pairs
  • 方法2: 为需要使用VIP的虚拟机端口disable_secruity

openstack version: Train

方法1

allwed_address_pairs: 允许一个端口在该端口上添加额外的 IP/MAC 地址对,以允许与这些指定值匹配的流量, 使额外的IP能与外部通信。

安全组放通VRRP协议(可选)

keeplived场景下,虚拟机所在安全组放通VRRP协议,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议,可以认为是实现高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。

# 找到虚拟机所在安全组的id(3a02e44f-d5bb-40de-99b5-f9467e456bc7)
$ openstack security group rule create 3a02e44f-d5bb-40de-99b5-f9467e456bc7 --protocol vrrp --ingress --remote-ip 0.0.0.0/0
$ openstack security group rule create 3a02e44f-d5bb-40de-99b5-f9467e456bc7 --protocol vrrp --egress --remote-ip 0.0.0.0/0
配置allwed_address_pairs
# 虚拟机端口和VIP都是使用这个network分配的IP
$ openstack network list
test_network a75d1c08-73d7-476e-be3a-37d4532672eb # 从test_network创建一个VIP地址为:192.168.2.253 , 名字为:test-vip
$ neutron port-create test_network --allowed-address-pairs type=dict list=true ip_address=192.168.2.253 --name test-vip
+-----------------------+--------------------------------------------------------------------------------------+
| Field | Value |
+-----------------------+--------------------------------------------------------------------------------------+
| admin_state_up | True |
| allowed_address_pairs | {"ip_address": "192.168.2.253", "mac_address": "fa:16:3e:ab:0f:ad"} |
| binding:host_id | |
| binding:profile | {} |
| binding:vif_details | {} |
| binding:vif_type | unbound |
| binding:vnic_type | normal |
| created_at | 2022-02-26T13:57:15Z |
| description | |
| device_id | |
| device_owner | |
| extra_dhcp_opts | |
| fixed_ips | {"subnet_id": "4a7237fc-10a8-4a44-b711-57dfbcee569a", "ip_address": "192.168.2.237"} |
| id | 490ba237-649d-4a52-a923-fbad0c00702a |
| mac_address | fa:16:3e:ab:0f:ad |
| name | test-vip |
| network_id | a75d1c08-73d7-476e-be3a-37d4532672eb |
| port_security_enabled | True |
| project_id | a3f435fc08854b828b3346aa1581d39f |
| revision_number | 1 |
| security_groups | 3a02e44f-d5bb-40de-99b5-f9467e456bc7 |
| status | DOWN |
| tags | |
| tenant_id | a3f435fc08854b828b3346aa1581d39f |
| updated_at | 2022-02-26T13:57:15Z |
+-----------------------+--------------------------------------------------------------------------------------+ # 为需要使用VIP的虚拟机端口添加`allwed_address_pairs`属性。
# vm1 port_id=1bd248cb-a543-46a4-b4ae-8ec9f93ce713
# vm2 port_id=c454a763-2bed-4164-a725-e2ded705c942
$ neutron port-update 1bd248cb-a543-46a4-b4ae-8ec9f93ce713 --allowed-address-pairs type=dict list=true ip_address=192.168.2.253
$ neutron port-update c454a763-2bed-4164-a725-e2ded705c942--allowed-address-pairs type=dict list=true ip_address=192.168.2.253 # 查看端口下是否具有allowed_address_pairs属性。
$ openstack port show 1bd248cb-a543-46a4-b4ae-8ec9f93ce713 | grep allowed_address_pairs
| allowed_address_pairs | ip_address='192.168.2.253', mac_address='fa:16:3e:d1:0d:1d'
$ openstack port show c454a763-2bed-4164-a725-e2ded705c942 | grep allowed_address_pairs
| allowed_address_pairs | ip_address='192.168.2.253', mac_address='fa:16:3e:d1:0d:1d' # 从vm端口删除allwed_address_pairss属性,也就是删除VIP。
$ openstack port unset 1bd248cb-a543-46a4-b4ae-8ec9f93ce713 --allowed-address ip-address='192.168.2.253',mac-address='fa:16:3e:d1:0d:1d'

方法2

删除port安全组

安全组: 连接到虚拟机实例的端口的所有传入和传出流量都被阻止(除非已应用“安全组相应规则”)

# 从test_network创建一个VIP地址为:192.168.2.253 , 名字为:test-vip
$ neutron port-create test_network --allowed-address-pairs type=dict list=true ip_address=192.168.2.253 --name test-vip # 把VIP的端口安全组关闭掉(找到VIP端口的port id)
$ openstack port set --disable-port-security --no-security-group 490ba237-649d-4a52-a923-fbad0c00702a
# 把需要使用VIP的虚拟机端口安全组关闭掉(找到VM端口的port id)
$ openstack port set --disable-port-security --no-security-group 1bd248cb-a543-46a4-b4ae-8ec9f93ce713
$ openstack port set --disable-port-security --no-security-group c454a763-2bed-4164-a725-e2ded705c942

[VIP] openstack环境配置VIP的更多相关文章

  1. Centos7 Openstack - (第一节)基本环境配置

    Centos7 install Openstack - (第一节)基本环境配置 我的blog地址:http://www.cnblogs.com/caoguo 根据openstack官方文档配置 官方文 ...

  2. 配置VIP地址

    10.10.10.7  mysql主 redis从 10.10.10.8  mysql从 redis主 现游戏架构如上,游戏后端数据库配置集群.场景描述:若是一台服务器宕机之后,及时切换数据库保持业务 ...

  3. keepalived主备节点都配置vip,vip切换异常案例分析

    原文地址:http://blog.51cto.com/13599730/2161622 参考地址:https://blog.csdn.net/qq_14940627/article/details/7 ...

  4. 安装配置好openstack环境的虚拟机,须要改动ip时,在数据库中同步改动ip的方法

    感谢朋友支持本博客,欢迎共同探讨交流,因为能力和时间有限,错误之处在所难免,欢迎指正. 假设转载,请保留作者信息. 博客地址:http://blog.csdn.net/qq_21398167 原博文地 ...

  5. Kolla 4.0.0环境下VIP无法迁移问题排查

    VRRP无法切换VIP的问题分析: Keepalived的配置文件:/etc/kolla/keepalived/keepalived.conf当中,nopreempt选项是影响切换的因素之一,另一个因 ...

  6. Centos 7 搭建OpenStack 私有云——(1)基础环境配置

    1.简介: OpenStack是一个由NASA(美国国家航空航天局)和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目. OpenStack是一个开源的云计算管理 ...

  7. KingbaseES R6 集群手工配置VIP案例

    经常有用户问,V8R6集群搭建时没有配置VIP,搭建完成后,如何添加VIP?以下向大家介绍下手动添加VIP 的过程. 一.操作系统环境 操作系统(UOS): root@uos01:~# cat /et ...

  8. Oracle 12cR1 RAC 在VMware Workstation上安装(上)—OS环境配置

    Oracle 12cR1 RAC 在VMware Workstation上安装(上)-OS环境配置 1.1  整体规划部分 1.1.1  所需软件介绍 Oracle RAC不支持异构平台.在同一个集群 ...

  9. Spring Cloud:多环境配置、eureka 安全认证、容器宿主机IP注册

    记录一下搭建 Spring Cloud 过程中踩过的一些坑,测试的东西断断续续已经弄了好多了,一直没有时间整理搭建过程,时间啊~时间~ Spring 版本 Spring Boot:2.0.6.RELE ...

随机推荐

  1. [.Net]使用ABP 数据库迁移migration遇到的坑及解决方案

    ​ 问题:在使用Update-Database时,突然出现"数据库中已存在名为 'XXX' 的对象". 检查发现__EFMigrationsHistory表中的MigrationI ...

  2. 性能优化-使用双buffer实现无锁队列

    借助本文,实现一种在"读多写一"场景下的无锁实现方式 在我们的工作中,多线程编程是一件太稀松平常的事.在多线程环境下操作一个变量或者一块缓存,如果不对其操作加以限制,轻则变量值或者 ...

  3. C++ 从&到&&

    人类发展史,就是不断挖坑.填坑的过程. 语言发展史也是如此! 任何一门设计合理的语言,给你的限制或提供的什么特性,都不是没有代价的. C的指针 指针:pointer 指针的思想起源于汇编.指针思想是编 ...

  4. 1月29日 体温APP开发记录

    1.阅读构建之法 现代软件工程(第三版) 2.观看Android开发视频教程最新版 Android Studio开发 3.高德地图API下载获取key  

  5. 【涨姿势】原来golang的case <-time.After(xxx)还有这样的坑

    偶然看到这样一篇文章:<使用 pprof 排查 Golang 内存泄露>https://www.toutiao.com/i6881796351139676680/ 最后一段让我很疑惑: 修 ...

  6. 话说C#程序员人手一个ORM

    话说C#程序员人手一个ORM,确实没有必要再写ORM了,不过我的ORM并不是新的,是从DBHelper演化过来的,算是DBHelper魔改版. 目前流行的ORM有EF.Dapper.SqlSugar. ...

  7. golang中的原子操作atomic包

    1. 概念 原子操作 atomic 包 加锁操作涉及到内核态的上下文切换,比较耗时,代价高, 针对基本数据类型我们还可以使用原子操作来保证并发的安全, 因为原子操作是go语言提供的方法,我们在用户态就 ...

  8. 谷歌浏览器和火狐浏览器如何查看HTTP协议

    谷歌浏览器和火狐浏览器如何查看HTTP协议 谷歌浏览器查看HTTP协议 火狐浏览器查看HTTP协议

  9. 从新建文件夹开始构建ShadowPlay Engine游戏引擎(6)

    本篇序言 在经历了为期很长时间的调试以及思维纠错后,我们可以开始实现我们的内存管理模块了,我在前面说过如果各位要继续跟着学习的话可能会需要一定的计算机组成原理和操作系统的知识,不过在莽代码的过程中,我 ...

  10. Swift循环的介绍

    循环的介绍 在开发中经常会需要循环 常见的循环有:for/while/do while. 这里我们只介绍for/while,因为for/while最常见 for循环的写法 最常规写法 // 传统写法 ...