Overcloud 的 IPv6 网络

Red Hat OpenStack Platform 16.1

配置 Overcloud 以使用 IPv6 网络

OpenStack Documentation Team

摘要

本指南提供有关使用 Red Hat OpenStack Platform director 创建将 IPv6 用于端点的 Overcloud 的信息。这包括 director 如何部署基于 IPv6 的 Overcloud 和配置选项的信息。

使开源包含更多

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。详情请查看 CTO Chris Wright 的信息

对红帽文档提供反馈

我们感谢您对文档提供反馈信息。与我们分享您的成功秘诀。

使用直接文档反馈(DDF)功能

使用 添加反馈 DDF 功能,用于特定句子、段落或代码块上的直接注释。

  1. Multi-page HTML 格式查看文档。
  2. 请确定您看到文档右上角的 反馈 按钮。
  3. 用鼠标指针高亮显示您想评论的文本部分。
  4. 添加反馈
  5. 添加反馈项中输入您的意见。
  6. 可选:添加您的电子邮件地址,以便文档团队可以联系您以讨论您的问题。
  7. Submit

第 1 章 overcloud 的 IPv6 简介

Red Hat OpenStack Platform director 创建名为 overcloud 的云环境。默认情况下,overcloud 使用互联网协议版本 4 (IPv4)来配置服务端点。但是,overcloud 还支持 Internet 协议版本 6 (IPv6)端点,对于支持 IPv6 基础架构的组织有用。

本指南作为 Director 安装和使用 指南的补充信息。Director 安装和使用 中指定的相同要求也适用于本指南。根据需要实施这些要求。

1.1. IPv6 网络简介

IPv6 是 Internet 协议标准的最新版本。Internet Engineering Task Force (IETF)开发了 IPv6 作为从当前通用 IPv4 标准中克服 IP 地址耗尽的方法。IPv6 与 IPv4 有不同的区别,包括:

大型 IP 地址范围
IPv6 范围大于 IPv4 范围。
更好的端到端连接
由于对网络地址转换的依赖,较大的 IP 范围提供更好的端到端连接。
No Broadcasting
IPv6 不支持传统的 IP 广播。相反,IPv6 使用多播以分级方式将数据包发送到适用的主机。
无状态地址自动配置(SLAAC)
IPv6 提供自动配置 IP 地址以及检测网络上的重复地址的功能。这可减少依赖于 DHCP 服务器来分配地址。

IPv6 使用 128 位(使用 16 位组表示的 4 位十六进制)来定义地址,而 IPv4 仅使用 32 位(使用 8 位组表示的十进制数字)。例如,IPv4 地址(192.168.0.1)的表示如下:

representation

11000000

192

10101000

168

00000000

0

00000001

1

对于 IPv6 地址(2001:db8:88ec:9fb3::1),其表示如下:

representation

0010 0000 0000 0001

2001

0000 1101 1011 1000

0db8

1000 1000 1110 1100

88EC

1001 1111 1011 0011

9fb3

0000 0000 0000 0000

0000

0000 0000 0000 0000

0000

0000 0000 0000 0000

0000

0000 0000 0000 0001

0001

您还可以代表每个位组中没有前导零的 IPv6 地址,并为每个 IP 地址省略一组零个组。在本例中,您可以使用 db8 来表示 0db8 位分组,省略三组的 0000 位组,这可以将 2001:0db8:88ec:9fb3:0000:0000:0000:0001 缩短为 2001:db8:88ec:9fb3::1。如需更多信息,请参阅 "RFC 5952: Acommendation for IPv6 地址文本代表"

IPv6 中的子网划分

与 IPv4 类似,IPv6 地址使用位掩码将地址前缀定义为其网络。例如,如果您向示例 IP 地址 2001:db8:88ec:9fb3::1/64 中包含 /64 位掩码,则位掩码充当一个前缀,用于定义前 64 位(2001:db8:88ec:9fb3)作为网络。剩余位 (0000:0000:0000:0001) 用于定义主机。

IPv6 还使用一些特殊的地址类型:

环回
环回设备使用 IPv6 作为主机内部通信。这个设备始终为 ::1/128
链接本地
链接本地地址是在特定网络段中有效的 IP 地址。IPv6 要求每个网络设备具有链接本地地址,并使用前缀 fe80::/10。但是,大多数情况下,这些地址的前缀为 fe80::/64
唯一本地
唯一的本地地址用于本地通信。这些地址使用 fc00::/7 前缀。
多播
主机使用多播地址加入多播组。这些地址使用 ff00::/8 前缀。例如,FF02::1 是网络上所有节点的多播组,FF02::2 是所有路由器的多播组。
全球 Unicast
这些地址通常为公共 IP 地址保留。这些地址使用 2000::/3 前缀。

1.2. 在 Red Hat OpenStack Platform 中使用 IPv6

Red Hat OpenStack Platform (RHOSP) director 将 OpenStack 服务映射到隔离的网络。这些网络包括:

  • 内部 API
  • 存储
  • 存储管理
  • 项目(租户)网络(Neutron VLAN 模式)
  • 外部

有关这些网络流量类型的更多信息,请参阅 Director 安装和使用 指南。

director 还提供用于对这些网络使用 IPv6 通信的方法。这意味着所需的 OpenStack 服务、数据库和其他相关服务使用 IPv6 地址进行通信。这也适用于使用涉及多个 Controller 节点的高可用性解决方案的环境。这有助于组织将 RHOSP 与 IPv6 基础架构集成。

使用下表作为 RHOSP 网络支持 IPv6 的指南:

Network Type支持的互联网协议(IP)备注

内部 API

  • IPv6
  • IPv4
 

存储

  • IPv6
  • IPv4
 

存储管理

  • IPv6
  • IPv4
 

项目网络

  • dual-stack (IPv4/v6)
  • IPv6
  • IPv4
 

项目网络端点

  • 双堆栈(IPv4/v6)
  • IPv6
  • IPv4

这是指托管项目网络隧道的网络 IP 地址,而不是项目网络本身。

用于网络端点的 IPv6 仅支持 VXLAN 和 Geneve。通用路由封装(GRE)尚不受支持。

外部 - 公共 API (和 Horizon)

  • IPv6
  • IPv4
 

external - 浮动 IP

  • 双堆栈(IPv4/v6)
  • IPv4

IPv6 使用全局单播地址(GUA),而不是 NAT 和浮动 IP 地址。Networking (neutron)服务要求项目网络之间的 IPv6 寻址使用 GUA,在项目网络间没有重叠,因此可以在没有 NAT 的情况下进行路由。

使用双栈(IPv4/v6),您可以使用浮动 IP 地址访问 IPv4 子网中的 IP 地址。

提供商网络

  • 双堆栈(IPv4/v6)
  • IPv6
  • IPv4

IPv6 支持取决于项目操作系统。

调配(PXE/DHCP)

  • IPv6
  • IPv4
 

IPMI 或其他 BMC

  • IPv6
  • IPv4

RHOSP 通过 Provisioning 网络与基板管理控制器(BMC)接口通信。

如果 BMC 接口支持双栈 IPv4 或 IPv6,不属于 RHOSP 的工具可以使用 IPv6 与 BMC 通信。

Overcloud Provisioning 网络

IPv6

overcloud 中用于裸机调配服务的调配网络。

overcloud 清理网络

None

在机器准备好重复使用前用于清理机器的隔离网络。

定义场景

本指南的场景是使用 IPv6 的隔离网络创建 overcloud。使用 heat 模板和环境文件来配置网络隔离。该场景还为这些 heat 模板和环境文件提供某些变体,以演示配置中的具体差异。

注意

在这种情况下,undercloud 仍然使用 IPv4 连接进行 PXE 引导、内省、部署和其他服务。

本指南使用类似于高级 overcloud 方案的场景。主要区别在于 Ceph Storage 节点的遗漏。

有关这种情况的详情,请查看 Director 安装和使用 指南。

重要

本指南将 2001:DB8::/32 IPv6 前缀用于 RFC 3849 中定义的文档目的。确保您为来自您自己的网络的 IPv6 地址替换这些示例地址。

第 2 章 为 IPv6 配置 overcloud

以下章节提供运行 openstack overcloud deploy 命令前所需的配置。这包括为 undercloud 上配置 IPv6 地址准备节点,以及创建网络环境文件来为 overcloud 定义 IPv6 参数。

前提条件

2.1. 在 undercloud 上配置 IPv6 地址

undercloud 需要访问 overcloud Public API,该 API 位于 External 网络上。要达到此目的,undercloud 主机需要在连接到外部网络的接口上需要一个 IPv6 地址。

前提条件

  • 成功安装 undercloud。有关更多信息,请参阅在 undercloud 上安装 director
  • 您的网络支持 IPv6 原生 VLAN 和 IPv4 原生 VLAN。
  • 可供 undercloud 使用的 IPv6 地址。

原生 VLAN 或专用接口

如果 undercloud 使用原生 VLAN 或附加到外部网络的专用接口,请使用 ip 命令将 IPv6 地址添加到接口。在本例中,专用接口是 eth0

$ sudo ip link set dev eth0 up; sudo ip addr add 2001:db8::1/64 dev eth0

中继 VLAN 接口

如果 undercloud 使用与 control plane 网桥(br-ctlplane)相同的接口上使用中继的 VLAN 来访问外部网络,请创建新的 VLAN 接口,将它附加到 control plane,并将 IPv6 地址添加到 VLAN。在本例中,External 网络 VLAN ID 为 100

$ sudo ovs-vsctl add-port br-ctlplane vlan100 tag=100 -- set interface vlan100 type=internal
$ sudo ip l set dev vlan100 up; sudo ip addr add 2001:db8::1/64 dev vlan100

确认 IPv6 地址

使用 ip 命令确认添加 IPv6 地址:

$ ip addr

IPv6 地址会出现在所选接口上。

设置持久 IPv6 地址

要使 IPv6 地址永久生效,请在 /etc/sysconfig/network-scripts/ 中创建适当的接口文件。在本例中,在 ifcfg-eth0ifcfg-vlan100 中包括以下几行:

IPV6INIT=yes
IPV6ADDR=2001:db8::1/64

如需更多信息,请参阅如何在红帽客户门户网站中为 IPv6 配置网络接口?

2.2. 为 IPv6 部署注册和检查节点

节点定义模板(instackenv.json)是一个 JSON 格式文件,其中包含用于注册节点的硬件和电源管理详情。例如:

{
    "nodes":[
        {
            "mac":[
                "bb:bb:bb:bb:bb:bb"
            ],
            "cpu":"4",
            "memory":"6144",
            "disk":"40",
            "arch":"x86_64",
            "pm_type":"pxe_ipmitool",
            "pm_user":"admin",
            "pm_password":"p@55w0rd!",
            "pm_addr":"192.0.2.205"
        },
        {
            "mac":[
                "cc:cc:cc:cc:cc:cc"
            ],
            "cpu":"4",
            "memory":"6144",
            "disk":"40",
            "arch":"x86_64",
            "pm_type":"pxe_ipmitool",
            "pm_user":"admin",
            "pm_password":"p@55w0rd!",
            "pm_addr":"192.0.2.206"
        },
        {
            "mac":[
                "dd:dd:dd:dd:dd:dd"
            ],
            "cpu":"4",
            "memory":"6144",
            "disk":"40",
            "arch":"x86_64",
            "pm_type":"pxe_ipmitool",
            "pm_user":"admin",
            "pm_password":"p@55w0rd!",
            "pm_addr":"192.0.2.207"
        },
        {
            "mac":[
                "ee:ee:ee:ee:ee:ee"
            ],
            "cpu":"4",
            "memory":"6144",
            "disk":"40",
            "arch":"x86_64",
            "pm_type":"pxe_ipmitool",
            "pm_user":"admin",
            "pm_password":"p@55w0rd!",
            "pm_addr":"192.0.2.208"
        }
        {
            "mac":[
                "ff:ff:ff:ff:ff:ff"
            ],
            "cpu":"4",
            "memory":"6144",
            "disk":"40",
            "arch":"x86_64",
            "pm_type":"pxe_ipmitool",
            "pm_user":"admin",
            "pm_password":"p@55w0rd!",
            "pm_addr":"192.0.2.209"
        }
        {
            "mac":[
                "gg:gg:gg:gg:gg:gg"
            ],
            "cpu":"4",
            "memory":"6144",
            "disk":"40",
            "arch":"x86_64",
            "pm_type":"pxe_ipmitool",
            "pm_user":"admin",
            "pm_password":"p@55w0rd!",
            "pm_addr":"192.0.2.210"
        }
    ]
}

前提条件

流程

  1. 创建节点定义模板后,将文件保存到 stack 用户的主目录(/home/stack/instackenv.json),然后将其导入到 director:

    $ openstack overcloud node import ~/instackenv.json

    此命令导入模板,并将每个节点从模板注册到 director。

  2. 将内核和 ramdisk 镜像分配给所有节点:

    $ openstack overcloud node configure

    现在,节点已在 director 中注册并进行配置。

验证步骤

  • 注册节点后,检查每个节点的硬件属性:

    $ openstack overcloud node introspect --all-manageable
    重要

    节点必须处于 manageable 状态。确保此进程完成运行。它可能需要 15 分钟来检查这些裸机节点。

2.3. 为 IPv6 部署标记节点

注册并检查节点的硬件后,将每个节点标记为特定的配置集。这些配置集标签将您的节点映射到类别,然后类别分配到部署角色。

前提条件

流程

  1. 检索节点列表来识别它们的 UUID:

    $ ironic node-list
  2. 在每个节点的 properties/capabilities 参数中添加 profile 选项。例如,要标记三个节点以使用控制器配置集和三个节点来使用计算配置集,请使用以下命令:

    $ ironic node-update 1a4e30da-b6dc-499d-ba87-0bd8a3819bc0 add properties/capabilities='profile:control,boot_option:local'
    $ ironic node-update 6faba1a9-e2d8-4b7c-95a2-c7fbdc12129a add properties/capabilities='profile:control,boot_option:local'
    $ ironic node-update 5e3b2f50-fcd9-4404-b0a2-59d79924b38e add properties/capabilities='profile:control,boot_option:local'
    $ ironic node-update 484587b2-b3b3-40d5-925b-a26a2fa3036f add properties/capabilities='profile:compute,boot_option:local'
    $ ironic node-update d010460b-38f2-4800-9cc4-d69f0d067efe add properties/capabilities='profile:compute,boot_option:local'
    $ ironic node-update d930e613-3e14-44b9-8240-4f3559801ea6 add properties/capabilities='profile:compute,boot_option:local'

    添加 profile:controlprofile:compute 选项会把节点标记为相关的配置集。

    注意

    作为手动标记的替代选择,使用自动配置集标记基于基准测试数据标记大量节点。

2.4. 配置 IPv6 网络

本节检查 overcloud 的网络配置。这包括隔离 OpenStack 服务以使用特定的网络流量并使用 IPv6 选项配置 overcloud。

2.4.1. 配置可组合的 IPv6 网络

前提条件

流程

  1. 复制默认 network_data 文件:

    $ cp /usr/share/openstack-tripleo-heat-templates/network_data.yaml /home/stack/.
  2. 编辑 network_data.yaml 文件的本地副本,并修改参数以符合您的 IPv6 网络要求。例如,External 网络包含以下默认网络详情:

    - name: External
      vip: true
      name_lower: external
      vlan: 10
      ipv6: true
      ipv6_subnet: '2001:db8:fd00:1000::/64'
      ipv6_allocation_pools: [{'start': '2001:db8:fd00:1000::10', 'end': '2001:db8:fd00:1000:ffff:ffff:ffff:fffe'}]
      gateway_ipv6: '2001:db8:fd00:1000::1'
    • name 是唯一强制的值,但您也可以使用 name_lower 规范化名称来提高可读性。例如,将 InternalApi 更改为 internal_api
    • VIP :true 在新网络中创建一个虚拟 IP 地址(VIP),剩余参数设置新网络的默认值。
    • ipv6 定义是否启用 IPv6。
    • ipv6_subnetipv6_allocation_poolsgateway_ip6 设置网络的默认 IPv6 子网和 IP 范围。
  3. 使用 -n 选项,将自定义 network_data 文件与您的部署包含。如果没有 -n 选项,部署命令将使用默认网络详细信息。

2.4.2. overcloud 中的 IPv6 网络隔离

overcloud 默认为 provisioning 网络分配服务。但是,director 可以将 overcloud 网络流量划分为隔离的网络。这些网络在部署命令行中的文件中定义,默认为 network_data.yaml

当服务使用 IPv6 地址侦听网络时,您必须提供参数默认值来指示服务在 IPv6 网络上运行。每个服务在上运行的网络都由文件 network/service_net_map.yaml 定义,并通过声明单个 ServiceNetMap 条目的参数默认值来覆盖。这些服务需要在环境文件中设置参数默认值:

parameter_defaults:
  # Enable IPv6 for Ceph.
  CephIPv6: True
  # Enable IPv6 for Corosync. This is required when Corosync is using an IPv6 IP in the cluster.
  CorosyncIPv6: True
  # Enable IPv6 for MongoDB. This is required when MongoDB is using an IPv6 IP.
  MongoDbIPv6: True
  # Enable various IPv6 features in Nova.
  NovaIPv6: True
  # Enable IPv6 environment for RabbitMQ.
  RabbitIPv6: True
  # Enable IPv6 environment for Memcached.
  MemcachedIPv6: True
  # Enable IPv6 environment for MySQL.
  MysqlIPv6: True
  # Enable IPv6 environment for Manila
  ManilaIPv6: True
  # Enable IPv6 environment for Redis.
  RedisIPv6: True

核心 heat 模板中的 environments/network-isolation.j2.yaml 文件是一个 Jinja2 文件,该文件在您的可组合网络文件中为每个 IPv6 网络定义所有端口和 VIP。在呈现时,它会使用完整资源 registry 在同一位置生成一个 network-isolation.yaml 文件。

2.4.3. 配置 IPv6 隔离网络

默认的 heat 模板集合包含一个基于 Jinja2 的环境文件,用于默认网络配置。此文件是 environments/network-environment.j2.yaml。使用我们的 network_data 文件渲染时,它会生成名为 network-environment.yaml 的标准 YAML 文件。该文件的某些部分可能需要覆盖。

前提条件

流程

  • 创建一个自定义环境文件(/home/stack/network-environment.yaml),详情如下:

    parameter_defaults:
      DnsServers: ["8.8.8.8","8.8.4.4"]
      ControlPlaneDefaultRoute: 192.0.2.1
      ControlPlaneSubnetCidr: "24"

    parameter_defaults 部分包含在 IPv4 上保留的某些服务的自定义。

2.4.4. IPv6 网络接口模板

overcloud 需要一组网络接口模板。director 包含一组基于 Jinja2 的 Heat 模板,它会根据您的 network_data 文件进行呈现:

NIC 目录Description环境文件

single-nic-vlans

带有附加到默认 Open vSwitch 网桥的 control plane 和 VLAN 的单个 NIC (nic1)。

environments/net-single-nic-with-vlans-v6.j2.yaml

single-nic-linux-bridge-vlans

带有附加到默认 Linux 网桥的 control plane 和 VLAN 的单个 NIC (nic1)。

environments/net-single-nic-linux-bridge-with-vlans-v6.yaml

bond-with-vlans

附加至 nic1 的 control plane。默认 Open vSwitch 网桥带有绑定的 NIC 配置(nic2nic3)并附加了 VLAN。

environments/net-bond-with-vlans-v6.yaml

multiple-nics

附加至 nic1 的 control plane。为 network_data 文件中定义的每个网络分配每个后续 NIC。默认情况下,Storage 到 nic2, Storage Management 到 nic3, Internal API 到 nic4, Tenant 到 br-tenant 网桥上的 nic5,External 到默认 Open vSwitch 网桥上的 nic6

environments/net-multiple-nics-v6.yaml

2.5. 部署 IPv6 overcloud

若要部署使用 IPv6 网络的 overcloud,必须在部署命令中包括额外的参数。

前提条件

流程

$ openstack overcloud deploy --templates \
  -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml \
  -e /usr/share/openstack-tripleo-heat-templates/environments/net-single-nic-with-vlans.yaml \
  -e /home/stack/templates/network-environment.yaml \
  --ntp-server pool.ntp.org \
  [ADDITIONAL OPTIONS]

以上命令使用以下选项:

  • --templates - 从默认的 heat 模板集合中创建 overcloud。
  • -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml - 为 overcloud 部署添加额外环境文件。在本例中,它是一个环境文件,用于初始化 IPv6 的网络隔离配置。
  • -e /usr/share/openstack-tripleo-heat-templates/environments/net-single-nic-with-vlans.yaml - 将额外的环境文件添加到 overcloud 部署。在本例中,它是一个环境文件,用于初始化 IPv6 的网络隔离配置。
  • -e /home/stack/network-environment.yaml - 为 overcloud 部署添加一个额外的环境文件。在本例中,它包含与 IPv6 相关的覆盖。

    确保 network_data.yaml 文件包含设置 ipv6: true。Red Hat OpenStack director 的早期版本包括两个路由:一个用于外部网络上的 IPv6 (默认),另一个用于 Control Plane 上的 IPv4。要使用这两个默认路由,请确保 roles_data.yaml 文件中的 Controller 定义在 default_route_networks 参数中包含这两个网络。例如,default_route_networks: ['External', 'ControlPlane']

  • --NTP-server pool.ntp.org - 设置 NTP 服务器。

overcloud 创建过程开始,director 置备 overcloud 节点。完成此过程需要一些时间。要查看 overcloud 创建的状态,请以 stack 用户身份打开一个单独的终端并运行:

$ source ~/stackrc
$ heat stack-list --show-nested

访问 overcloud

director 会生成脚本来配置和帮助认证 director 主机与 overcloud 的交互。director 将此文件(overcloudrc)保存到 stack 用户的主目录中。运行以下命令来使用此文件:

$ source ~/overcloudrc

这会加载必要的环境变量,以便从 director 主机 CLI 与 overcloud 交互。要返回与 director 主机交互,请运行以下命令:

$ source ~/stackrc

第 3 章 部署后 IPv6 操作

使用 IPv6 网络部署 overcloud 后,您必须执行一些额外的配置。

前提条件

3.1. 在 overcloud 上创建 IPv6 项目网络

overcloud 需要基于 IPv6 的项目网络来进行实例。提供 overcloudrc 文件,并在 neutron 中创建初始项目网络。

前提条件

流程

  1. 提供 overcloud 凭据文件:

    $ source ~/overcloudrc
  2. 创建网络和子网:

    $ openstack network create default --external --provider-physical-network datacentre --provider-network-type vlan --provider-segment 101
    
    $ openstack subnet create default --subnet-range 2001:db8:fd00:6000::/64 --ipv6-address-mode slaac --ipv6-ra-mode slaac --ip-version 6 --network default

    这会创建一个名为 default 的基本 neutron 网络。

验证步骤

  • 验证网络是否已成功创建:

    $ openstack network list
    $ openstack subnet list

3.2. 在 overcloud 上创建 IPv6 公共网络

将节点接口配置为使用外部网络后,您必须在 overcloud 中创建此网络以启用网络访问。

前提条件

流程

  1. 创建外部网络和子网:

    $ openstack network create public --external --provider-physical-network datacentre --provider-network-type vlan --provider-segment 100
    
    $ openstack subnet create public --network public --subnet-range 2001:db8:0:2::/64 --ip-version 6 --gateway 2001:db8::1 --allocation-pool start=2001:db8:0:2::2,end=2001:db8:0:2::ffff --ipv6-address-mode slaac --ipv6-ra-mode slaac

    此命令将创建名为 public 的网络,它将为实例提供 65000 个 IPv6 地址的分配池。

  2. 创建一个路由器,将实例流量路由到外部网络。

    $ openstack router create public-router
    $ openstack router set public-router --external-gateway public

法律通告

Copyright © 2023 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.