Merge "Add a user guide for Neutron/Nova DNS integration"
This commit is contained in:
commit
ae3ed981ac
@ -20,6 +20,7 @@ Contents
|
||||
admin/index
|
||||
configuration/index
|
||||
cli/index
|
||||
reference/index
|
||||
|
||||
For information on the Designate API, see the
|
||||
`API Reference <https://docs.openstack.org/api-ref/dns/>`_.
|
||||
|
45
doc/source/reference/glossary.rst
Normal file
45
doc/source/reference/glossary.rst
Normal file
@ -0,0 +1,45 @@
|
||||
..
|
||||
Copyright 2022 Red Hat
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
not use this file except in compliance with the License. You may obtain
|
||||
a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
License for the specific language governing permissions and limitations
|
||||
under the License.
|
||||
|
||||
|
||||
==================
|
||||
Designate Glossary
|
||||
==================
|
||||
|
||||
The following is a glossary of terms that may be used througout the Designate
|
||||
documentation and code.
|
||||
|
||||
.. glossary:: :sorted:
|
||||
|
||||
Fully Qualified Domain Name
|
||||
A domain name that includes all levels of the domain hierarchy,
|
||||
including the root domain (represented by a period at the end). Fully
|
||||
Qualified Domain Name is sometimes abreviated as FQDN.
|
||||
Example: ``www.example.com.``
|
||||
|
||||
Record
|
||||
The data (also known as the RDATA in RFC1034) part of a recordset.
|
||||
Recordsets may have one or more records. An example of a record for a
|
||||
recordset of type **A** would be an IP address, such as 192.0.2.1.
|
||||
|
||||
Recordset
|
||||
A recordset represents one or more DNS :term:`records<Record>` that
|
||||
share the same `Name` and `Type`. For example, a recordset `named`
|
||||
``www.example.com.``, with a `Type` of **A**, may contain two records;
|
||||
192.0.2.1 and 192.0.2.2.
|
||||
|
||||
Zone
|
||||
A zone represents a namespace in DNS, for example the zone
|
||||
``example.com.`` may contain a :term:`recordset<Recordset>` for ``www``.
|
20
doc/source/reference/index.rst
Normal file
20
doc/source/reference/index.rst
Normal file
@ -0,0 +1,20 @@
|
||||
===================
|
||||
Designate Reference
|
||||
===================
|
||||
|
||||
.. toctree::
|
||||
:glob:
|
||||
:maxdepth: 1
|
||||
|
||||
*
|
||||
Application Programming Interface <https://docs.openstack.org/api-ref/dns/>
|
||||
Command Line Interface Reference <https://docs.openstack.org/python-designateclient/latest/cli/index.html>
|
||||
|
||||
.. only:: html
|
||||
|
||||
Indices and Search
|
||||
------------------
|
||||
|
||||
* :ref:`genindex`
|
||||
* :ref:`modindex`
|
||||
* :ref:`search`
|
@ -26,4 +26,4 @@ Working with Recordsets
|
||||
|
||||
manage-recordsets
|
||||
manage-ptr-records
|
||||
|
||||
neutron-integration
|
||||
|
299
doc/source/user/neutron-integration.rst
Normal file
299
doc/source/user/neutron-integration.rst
Normal file
@ -0,0 +1,299 @@
|
||||
..
|
||||
Copyright 2022 Red Hat
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
not use this file except in compliance with the License. You may obtain
|
||||
a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
License for the specific language governing permissions and limitations
|
||||
under the License.
|
||||
|
||||
|
||||
=============================
|
||||
Using DNS with Neutron & Nova
|
||||
=============================
|
||||
|
||||
Neutron can be integrated with Designate to provide automatic
|
||||
:term:`recordset` creation for ports and, by proxy, Nova server instances.
|
||||
This section will describe how you can use this integration to have Designate
|
||||
DNS :term:`recordsets<Recordset>` created for Neutron ports and Nova instances
|
||||
at creation time.
|
||||
|
||||
Neutron DNS Extensions
|
||||
======================
|
||||
|
||||
DNS integration in Neutron is optional and an extension must be enabled in the
|
||||
Neutron configuration file, by a cloud administrator, for DNS names to be
|
||||
assigned automatically to Neutron and Nova resources. You can check if a DNS
|
||||
integration extension is enabled by querying the `Neutron extensions API`_:
|
||||
|
||||
.. _Neutron extensions API: https://docs.openstack.org/api-ref/network/v2/index.html#list-extensions
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack extension list --network -f value -c Alias | grep dns-integration
|
||||
dns-integration
|
||||
|
||||
One of these extensions must be enabled to allow Neutron and, via Neutron, Nova
|
||||
to automatically create DNS :term:`recordsets<Recordset>` in Designate:
|
||||
|
||||
* dns-integration
|
||||
* dns-domain-ports (includes dns-integration)
|
||||
* subnet-dns-publish-fixed-ip (includes dns-integration and dns-domain-ports)
|
||||
* dns-integration-domain-keywords (includes all others)
|
||||
|
||||
dns-integration
|
||||
---------------
|
||||
|
||||
When the `dns-integration` extension is enabled the following DNS attributes
|
||||
will be available via Neutron:
|
||||
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
:widths: 30 30 30
|
||||
|
||||
* - Resource
|
||||
- dns_name
|
||||
- dns_domain
|
||||
* - Ports
|
||||
- Yes
|
||||
- No
|
||||
* - Networks
|
||||
- No
|
||||
- Yes
|
||||
* - Floating IPs
|
||||
- Yes
|
||||
- Yes
|
||||
|
||||
dns-domain-ports
|
||||
----------------
|
||||
|
||||
In addition, if the `dns-domain-ports` extension is enabled in Neutron, ports
|
||||
can be created with a dns_domain specified. This dns_domain will take
|
||||
precedence over the dns_domain setting for the network. You can check if the
|
||||
`dns-domain-ports` extension is enabled by querying the
|
||||
`Neutron extensions API`_:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack extension list --network -f value -c Alias | grep dns-domain-ports
|
||||
dns-domain-ports
|
||||
|
||||
With the `dns-domain-ports` extension is enabled the following DNS settings
|
||||
will be available via Neutron:
|
||||
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
:widths: 30 30 30
|
||||
|
||||
* - Resource
|
||||
- dns_name
|
||||
- dns_domain
|
||||
* - Ports
|
||||
- Yes
|
||||
- Yes
|
||||
* - Networks
|
||||
- No
|
||||
- Yes
|
||||
* - Floating IPs
|
||||
- Yes
|
||||
- Yes
|
||||
|
||||
Both of these extensions impose a set of criteria for when DNS
|
||||
:term:`recordsets<Recordset>` will be created in Designate.
|
||||
|
||||
* A `dns_domain` must be specified either on the network, port, or floating IP.
|
||||
If both the network and the port or floating IP specify a `dns_domain`, the
|
||||
`dns_domain` specified on the port or floating IP will take precedent over
|
||||
the `dns_domain` provided on the network.
|
||||
* The network must not have the `router:external` field set to True.
|
||||
* The network type must be one of: FLAT, VLAN, GRE, VXLAN, or GENEVE.
|
||||
* For VLAN, GRE, VXLAN, or GENEVE networks, the segmentation ID must be outside
|
||||
the ranges configured in the Neutron ml2_confg file. For example, with VXLAN
|
||||
networks, the range setting is [ml2_type_vxlan] vni_ranges.
|
||||
* The :term:`zone` for the `dns_domain` must already exist in Designate and the
|
||||
project ID creating the Nova instance, port, or floating IP must have
|
||||
permission to create :term:`recordsets<Recordset>` in the :term:`zone`.
|
||||
|
||||
These restrictions typically mean that a special network will need to be
|
||||
created by an administrator that will allow :term:`recordsets<Recordset>` to
|
||||
be created in Designate.
|
||||
|
||||
If these criteria are not all met, Neutron will create a DNS assignment in the
|
||||
Neutron internal resolvers using the default `dns_domain` specified in the
|
||||
Neutron configuration file. The current default domain is "openstacklocal.".
|
||||
|
||||
.. warning::
|
||||
|
||||
If the user creating the Nova instance, port, or floating IP does not have
|
||||
permission to create :term:`recordsets<Recordset>` in the :term:`zone` or
|
||||
the :term:`zone` does not exist in Designate, Neutron will create the port
|
||||
with the `dns_assignment` field populated using the `dns_domain` provided,
|
||||
but no :term:`recordset` will be created in Designate. Neutron will log
|
||||
the error "Error publishing port data in external DNS service.".
|
||||
|
||||
|
||||
subnet-dns-publish-fixed-ip
|
||||
---------------------------
|
||||
|
||||
A third Neutron extension is available called `subnet-dns-publish-fixed-ip`.
|
||||
This extension includes the capabilities of the `dns-domain-ports` extension,
|
||||
but removes the restrictions if the subnet `dns_publish_fixed_ip` property is
|
||||
set to True.
|
||||
|
||||
dns-integration-domain-keywords
|
||||
-------------------------------
|
||||
|
||||
The fourth Neutron extension, including the capabilities of the
|
||||
`subnet-dns-publish-fixed-ip` extension, is called
|
||||
`dns-integration-domain-keywords`. It allows the use of keywords in the
|
||||
`dns_domain` that will be replaced when a port is created. Valid keywords are:
|
||||
<project_id>, <project_name>, <user_id>, and <user_name>.
|
||||
|
||||
.. note::
|
||||
|
||||
For more information on enabling DNS integration in Neutron, see the
|
||||
`Neutron Networking Guide <https://docs.openstack.org/neutron/latest/admin/config-dns-int.html>`_.
|
||||
|
||||
DNS for Nova Server Instances
|
||||
=============================
|
||||
|
||||
DNS integration with Neutron allows you to automatically create a DNS
|
||||
:term:`recordset` for Nova instances. When Nova requests the Neutron port to be
|
||||
created for the new instance, Neutron will attempt to create a DNS
|
||||
:term:`recordset` for the port in Designate.
|
||||
|
||||
As an example, we will create a new Nova instance with the DNS name of
|
||||
"server.example.org" registered in Designate.
|
||||
|
||||
.. _Neutron criteria: https://docs.openstack.org/neutron/latest/admin/config-dns-int-ext-serv.html#configuration-of-the-externally-accessible-network-for-use-cases-3b-and-3c
|
||||
|
||||
.. note::
|
||||
This example is for user created networks. DNS records can be automatically
|
||||
created for Nova server instances on networks created by a cloud
|
||||
administrator if they meet the `Neutron criteria`_.
|
||||
|
||||
**Steps**:
|
||||
|
||||
1. Check that the `subnet-dns-publish-fixed-ip` Neutron extension is enabled.
|
||||
2. Create the :term:`zone` "example.org." in Designate.
|
||||
3. Create a network, providing the `dns_domain` of "example.org.", that we will
|
||||
use for the Nova instance.
|
||||
4. Create a subnet on the network with `dns_publish_fixed_ip` set to True.
|
||||
5. Create the Nova instance, with name "server" and a NIC on the network.
|
||||
6. Verify the DNS :term:`recordset` was created in the Designate :term:`zone`.
|
||||
|
||||
.. note::
|
||||
|
||||
The DNS domain must always be a :term:`Fully Qualified Domain Name` (FQDN),
|
||||
meaning it will always end with a period.
|
||||
|
||||
**CLI Commands:**
|
||||
|
||||
.. code-block::
|
||||
|
||||
$ openstack extension list --network -f value -c Alias | grep subnet-dns-publish-fixed-ip
|
||||
$ openstack zone create --email example@example.org example.org.
|
||||
$ openstack network create --dns-domain example.org. example-net
|
||||
$ openstack subnet create --allocation-pool start=192.0.2.10,end=192.0.2.200 --network example-net --subnet-range 192.0.2.0/24 --dns-publish-fixed-ip example-subnet
|
||||
$ openstack server create --image cirros-0.5.2-x86_64-disk --flavor 1 --nic net-id=example-net server
|
||||
$ openstack recordset list --type A example.org.
|
||||
|
||||
+---------------+---------------------+------+------------+--------+--------+
|
||||
| id | name | type | records | status | action |
|
||||
+---------------+---------------------+------+------------+--------+--------+
|
||||
| 7b8d1be6-1b23 | server.example.org. | A | 192.0.2.44 | ACTIVE | NONE |
|
||||
| -478a-94d5-60 | | | | | |
|
||||
| b876dca2c8 | | | | | |
|
||||
+---------------+---------------------+------+------------+--------+--------+
|
||||
|
||||
|
||||
DNS for Neutron Ports
|
||||
=====================
|
||||
|
||||
DNS integration with Neutron allows you to automatically create a DNS
|
||||
:term:`recordset` for Neutron ports.
|
||||
|
||||
As an example, we will create a new Neutron port with the DNS name of
|
||||
"example-port.example.org" registered in Designate.
|
||||
|
||||
.. note::
|
||||
This example is for user created networks. DNS records can be automatically
|
||||
created for Neutron ports on networks created by a cloud administrator if
|
||||
they meet the `Neutron criteria`_.
|
||||
|
||||
**Steps**:
|
||||
|
||||
1. Check that the `subnet-dns-publish-fixed-ip` Neutron extension is enabled.
|
||||
2. Create the :term:`zone` "example.org." in Designate.
|
||||
3. Create a network, providing the `dns_domain` of "example.org.", that we will
|
||||
use for the Neutron port.
|
||||
4. Create a subnet on the network with `dns_publish_fixed_ip` set to True.
|
||||
5. Create the Neutron port specifying the `dns_name` of "example-port" for the
|
||||
port.
|
||||
6. Verify the DNS :term:`recordset` was created in the Designate :term:`zone`.
|
||||
|
||||
.. note::
|
||||
|
||||
The DNS domain must always be a :term:`Fully Qualified Domain Name` (FQDN),
|
||||
meaning it will always end with a period.
|
||||
|
||||
**CLI Commands:**
|
||||
|
||||
.. code-block::
|
||||
|
||||
$ openstack extension list --network -f value -c Alias | grep subnet-dns-publish-fixed-ip
|
||||
$ openstack zone create --email example@example.org example.org.
|
||||
$ openstack network create --dns-domain example.org. example-net
|
||||
$ openstack subnet create --allocation-pool start=192.0.2.10,end=192.0.2.200 --network example-net --subnet-range 192.0.2.0/24 --dns-publish-fixed-ip example-subnet
|
||||
$ openstack port create --network example-net --dns-name example-port my-example-port
|
||||
$ openstack recordset list --type A example.org.
|
||||
|
||||
+---------------+---------------------------+------+-------------+--------+--------+
|
||||
| id | name | type | records | status | action |
|
||||
+---------------+---------------------------+------+-------------+--------+--------+
|
||||
| 9ebbe94f-2442 | example-port.example.org. | A | 192.0.2.149 | ACTIVE | NONE |
|
||||
| -4bb8-9cfa-6d | | | | | |
|
||||
| ca1daba73f | | | | | |
|
||||
+---------------+---------------------------+------+------------+--------+--------+
|
||||
|
||||
|
||||
DNS for Floating IPs
|
||||
====================
|
||||
|
||||
DNS integration with Neutron allows you to automatically create a DNS
|
||||
:term:`recordset` for Neutron floating IP addresses.
|
||||
|
||||
As an example, we will create a new Neutron floating IP with the DNS name of
|
||||
"example-fip.example.org" registered in Designate.
|
||||
|
||||
**Steps**:
|
||||
|
||||
1. Create the Neutron floating IP specifying the `dns_name` of "example-fip"
|
||||
and the `dns_domain` as "example.org.".
|
||||
2. Verify the DNS :term:`recordset` was created in the Designate :term:`zone`.
|
||||
|
||||
.. note::
|
||||
|
||||
The DNS domain must always be a :term:`Fully Qualified Domain Name` (FQDN),
|
||||
meaning it will always end with a period.
|
||||
|
||||
**CLI Commands:**
|
||||
|
||||
.. code-block::
|
||||
|
||||
$ openstack floating ip create --dns-name example-fip --dns-domain example.org. example-net
|
||||
$ openstack recordset list --type A example.org.
|
||||
|
||||
+---------------+--------------------------+------+-------------+--------+--------+
|
||||
| id | name | type | records | status | action |
|
||||
+---------------+--------------------------+------+-------------+--------+--------+
|
||||
| e1eca823-169d | example-fip.example.org. | A | 192.0.2.106 | ACTIVE | NONE |
|
||||
| -4d0a-975e-91 | | | | | |
|
||||
| a9907ec0c1 | | | | | |
|
||||
+---------------+--------------------------+------+------------+--------+--------+
|
Loading…
Reference in New Issue
Block a user