Skip to content

Commit 9fa11be

Browse files
committed
Expanding README with chapter about IPv6, and dual-stack support
1 parent da19c32 commit 9fa11be

File tree

3 files changed

+32
-12
lines changed

3 files changed

+32
-12
lines changed

Diff for: README.md

+14-4
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@
22
[![Build Status](https://travis-ci.org/nokia/danm.svg?branch=master)](https://travis-ci.org/Nokia/danm)
33
<img src="https://github.com/nokia/danm/raw/master/logo.png" width="100">
44

5-
## Don't like reading? Then start by watching our demo video!
6-
Link temporarily removed while we re-record the demonstration
7-
85
## Table of Contents
96
* [Table of Contents](#table-of-contents)
107
* [Introduction](#introduction)
@@ -27,6 +24,7 @@ Link temporarily removed while we re-record the demonstration
2724
* [Connecting Pods to DanmNets](#connecting-pods-to-danmnets)
2825
* [Internal workings of the metaplugin](#internal-workings-of-the-metaplugin)
2926
* [DANM IPAM](#danm-ipam)
27+
* [IPv6 and dual-stack support](#ipv6-and-dual-stack-support)
3028
* [DANM IPVLAN CNI](#danm-ipvlan-cni)
3129
* [Usage of DANM's Netwatcher component](#usage-of-danms-netwatcher-component)
3230
* [Usage of DANM's Svcwatcher component](#usage-of-danms-svcwatcher-component)
@@ -329,11 +327,23 @@ Network administrators can simply put the CIDR, and the allocation pool into the
329327

330328
The flexible IPAM module also allows Pods to define the IP allocation scheme best suited for them. Pods can ask dynamically allocated IPs from the defined allocation pool, or can ask for one, specific, static address.
331329
The application can even ask DANM to forego the allocation of any IPs to their interface in case a L2 network interface is required.
330+
##### IPv6 and dual-stack support
331+
DANM's IPAM module supports both IPv6, and dual-stack (one IPv4, and one IPv6 address provisioned to the same interface) addresses!
332+
To configure an IPv6 CIDR for a DanmNet, network amdinistrator shall fill the "net6" attribute. Additionally, IP routes for IPv6 subnets can be configured via "routes6".
333+
If both "cidr", and "net6" are configured for a DanmNet, then Pods connecting to that network can ask one IPv4 address, one IPv6 address, or even both at the same time!
334+
335+
That being said, network administrators using IPv6, or dual-stack features need to be aware of the current restrictions of the solution:
336+
* dynamic IPs are randomly allocated from the IPv6 CIDR according to the following algorithm:
337+
* the IP is prefixed with the IPv6 CIDR of the network
338+
* MAC address is randomly generated for the EUI64
339+
* the smallest supported IPv6 CIDR is /64
340+
* allocation pools are cannot be defined for IPv6 CIDR
341+
* DANM does not change kernel level parameters NICs such as "disable_ipv6", "auto_ra", or "autoconf"
332342
#### DANM IPVLAN CNI
333343
DANM's IPVLAN CNI uses the Linux kernel's IPVLAN module to provision high-speed, low-latency network interfaces for applications which need better performance than a bridge (or any other overlay technology) can provide.
334344

335345
*Keep in mind that the IPVLAN module is a fairly recent addition to the Linux kernel, so the feature cannot be used on systems whose kernel is older than 4.4!
336-
4.9, 4.11, or 4.14 would be even better (lotta bug fixes)*
346+
4.14+ would be even better (lotta bug fixes)*
337347

338348
The CNI provisions IPVLAN interfaces in L2 mode, and supports the following extra features:
339349
* attaching IPVLAN sub-interfaces to any host interface

Diff for: schema/DanmNet.yaml

+16-6
Original file line numberDiff line numberDiff line change
@@ -37,17 +37,21 @@ spec:
3737
# OPTIONAL - STRING
3838
host_device: ## PARENT_DEVICE_NAME ##
3939
# The IPv4 CIDR notation of the subnet associated with the network.
40-
# Pods connecting to this network will get their IPs from this subnet, if defined.
40+
# Pods connecting to this network will get their IPv4 IP from this subnet, if defined.
4141
# Only has an effect with dynamically integrated backends. Ignored for other NetworkTypes.
42-
# OPTIONAL - CIDR FORMAT (e.g. "10.0.0.0/24")
42+
# OPTIONAL - IPv4 CIDR FORMAT (e.g. "10.0.0.0/24")
4343
cidr: ## SUBNET_CIDR ##
44-
# IP allocation will be done according to the narrowed down allocation pool parameter, if defined.
45-
# Allocation pool must be provided together with CIDR, and shall be aligned with the CIDR subnet range.
44+
# IPv4 allocation will be done according to the narrowed down allocation pool parameter, if defined.
45+
# Allocation pool must be provided together with "cidr", and shall be included in the subnet range.
4646
# Only has an effect with dynamically integrated backends. Ignored for other NetworkTypes.
47-
# OPTIONAL - IPV4 FORMAT (e.g. "10.0.0.10")
4847
allocation_pool:
4948
start: ## FIRST_ASSIGNABLE_IP ##
5049
end: ## LAST_ASSIGNABLE_IP ##
50+
# The IPv6 CIDR notation of the subnet associated with the network.
51+
# Pods connecting to this network will get their IPv6s from this subnet, if defined.
52+
# Only has an effect with dynamically integrated backends. Ignored for other NetworkTypes.
53+
# OPTIONAL - IPv6 CIDR FORMAT (e.g. "2001:db8::/45")
54+
net6: ## SUBNET_CIDR ##
5155
# Interfaces connected to this network will be renamed to "container_prefix" inside the container.
5256
# If not provided, DANM will dynamically allocate a name for each container interface belonging to this network in Pod instantiation time.
5357
# Generally supported parameter, works with all NetworkTypes.
@@ -57,12 +61,18 @@ spec:
5761
# Generally supported parameter, works with all NetworkTypes.
5862
# OPTIONAL - INTEGER (e.g. 201)
5963
rt_tables: ## HOST_UNIQUE_ROUTING_TABLE_NUMBER ##
60-
# IPv4 routes to be installed by default for all containers connected to this network
64+
# IPv4 routes to be installed into the default routing table of all Pods connected to this network.
6165
# Generally supported parameter, works with all NetworkTypes.
6266
# OPTIONAL - LIST OF DESTINATION_IPV4_CIDR:IPV4_GW ENTRIES (e.g. "10.20.0.0/24: 10.0.0.1")
6367
routes:
6468
## IP_ROUTE_1 ##
6569
## IP_ROUTE_2 ##
70+
# IPv6 routes to be installed into the default routing table of all Pods connected to this network.
71+
# Generally supported parameter, works with all NetworkTypes.
72+
# OPTIONAL - LIST OF DESTINATION_IPV6_CIDR:IPV6_GW ENTRIES
73+
routes6:
74+
## IP_ROUTE_1 ##
75+
## IP_ROUTE_2 ##
6676
# If this parameter is present then traffic going through this network will be VxLAN tagged with the provided identifier
6777
# The VxLAN tag shall be unique on the level of the underlying host.
6878
# Management of the VxLAN interface is handled automatically by DANM. Provisioning is generally supported for all NetworkTypes.

Diff for: schema/network_attach.yaml

+2-2
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ spec:
3939
# Ignored for non-dynamic NetworkTypes.
4040
# OPTIONAL PARAMETER - but either "ip" or "ip6" needs to be present. Presence of either "ip" or "ip6" is MANDATORY
4141
# Possible values:
42-
# - "dynamic": the first free IPv6 address is dynamically allocated from the DanmNet's allocation pool
43-
# - "## DESIRED_STATIC_IPV6_ADDR_FROM_ALLOCATION_POOL ##"
42+
# - "dynamic": a random, free IPv6 address is dynamically allocated from the DanmNet's net6 CIDR
43+
# - "## DESIRED_STATIC_IPV6_ADDR_FROM_NET6 ##"
4444
# - "none": no IPv6 address is allocated to the interface
4545
# "proutes": list of policy-based IPv4 routes to be added to the configured routing table of this interface.
4646
# Generally supported parameter, works with all NetworkTypes.

0 commit comments

Comments
 (0)