描述

当你在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. 【刷题-LeetCode】205. Isomorphic Strings

    Isomorphic Strings Given two strings *s* and *t*, determine if they are isomorphic. Two strings are ...

  2. 【记录一个问题】铁威马NAS,升级系统后,所有安装的配置项都丢失了

    因为铁威马的系统功能真的是弱,所以写了一些家庭照片处理的系统. 上上周升级了系统后,丢失了以下内容: anaconda 2.及其conda下python3环境的各种库 3.nginx的转发配置 铁威马 ...

  3. after effects的xml格式工程文件aepx的格式分析(一)

    表面上看,AE的工程文件可以另存为xml格式,我们可以通过直接编辑XML来做一些事情. 很可惜,通过aepx文件修改AE工程,能做到的非常有限.理由是: 1.重要的属性都放在了标签的bdata这个属性 ...

  4. Redis数据库各种数据结构的内部实现。

    Redis数据库是一种非关系型数据库,基于key/value对,运行时加载到内存,对value支持虚拟内存, 支持多种数据结构,支持持久化,以性能著称,可用于存储,缓存,消息队列等场景.主要介绍下Re ...

  5. gin中模型的绑定和验证

    要将请求体绑定到结构体中,使用模型绑定. Gin目前支持JSON.XML.YAML和标准表单值的绑定(foo=bar&boo=baz). Gin使用 go-playground/validat ...

  6. socket编程(struct报头)网络编程

    目录 一:socket编程 1.简介 2.参数说明: 3.socket套接字方法 4.socket编程思路: 二:socket套接字编程 1.socket简易版编程 2.通信循环 三:通信循环及代码优 ...

  7. python类和函数

    #/usr/bin/python #coding=utf-8 class Car(): def __init__(self,name,year): self.name = name self.year ...

  8. Android Studio如何查看自己设计的数据库

    首先点击左上角进入Device File Explorer 进入后 点击data-data 找到你的项目名称 进入后点击你建立的数据库 一步步按照提示进行操作,即可显示你的表

  9. 初步认识微前端(single-spa 和 qiankun)

    初步认识微前端 微前端是什么 现在的前端应用,功能.交互日益复杂,若只由一个团队负责,随着时间的推进,会越来越庞大,愈发难以维护. 微前端这个名词,第一次提出是在2016年底.它将微服务(将单一应用程 ...

  10. JavaScript 中如何将日期格式化为 DD/MM/YYYY

    在 JavaScript 中要将日期格式化为 dd/mm/yyyy .需要遵循以下步骤: 使用 getDate().getMonth() 和 getFullYear() 方法获取特定日期的日.月和年. ...