|
| 1 | +# dt-nfv-ovs-dpdk-sriov-2nodesets-ipv6.yml |
| 2 | + |
| 3 | +## Overview |
| 4 | + |
| 5 | +This reproducer is the **IPv6 variant** of `dt-nfv-ovs-dpdk-sriov-2nodesets.yml`. It configures an NFV deployment with OVS-DPDK and SR-IOV support using **IPv6 as the primary IP version** across all OpenStack networks, while maintaining dual-stack configuration on hypervisor bridges for compatibility. |
| 6 | + |
| 7 | +## Key Features |
| 8 | + |
| 9 | +- **IPv6 Primary**: All OpenStack networks use IPv6 addressing |
| 10 | +- **Dual-Stack ctlplane**: Both IPv4 and IPv6 IPAM for ctlplane network |
| 11 | +- **2 NodeSets**: Supports deployments with two different EDPM nodesets (different hardware) |
| 12 | +- **OVS-DPDK**: High-performance DPDK-accelerated networking |
| 13 | +- **SR-IOV**: Direct hardware access for VMs |
| 14 | +- **OpenShift IPv6**: OCP configured with IPv6 networking |
| 15 | + |
| 16 | +## Network Configuration |
| 17 | + |
| 18 | +### IPv6 Network Ranges |
| 19 | + |
| 20 | +| Network | IPv6 Range | VLAN | Purpose | |
| 21 | +|--------------|-------------------------|------|---------| |
| 22 | +| ctlplane | 2620:cf:cf:aaaa::/64 | - | Control plane (dual-stack) | |
| 23 | +| internalapi | 2620:cf:cf:bbbb::/64 | 20 | Internal API | |
| 24 | +| storage | 2620:cf:cf:cccc::/64 | 21 | Storage network | |
| 25 | +| tenant | 2620:cf:cf:eeee::/64 | 22 | Tenant/overlay network | |
| 26 | +| storagemgmt | 2620:cf:cf:dddd::/64 | 23 | Storage management | |
| 27 | +| external | 2620:cf:cf:cf02::/64 | - | External network | |
| 28 | + |
| 29 | +### OpenShift IPv6 Networks |
| 30 | + |
| 31 | +| Network | IPv6 Range | Purpose | |
| 32 | +|------------------|--------------------------|---------| |
| 33 | +| provisioning | fd00:1101::/64 | Provisioning network | |
| 34 | +| external_subnet | 2620:cf:cf:cf02::/64 | External access | |
| 35 | +| service_subnet | 2620:cf:cf:cf03::/112 | OCP services | |
| 36 | +| cluster_subnet | fd01::/48 | OCP pod network | |
| 37 | + |
| 38 | +## Key Differences from IPv4 Version |
| 39 | + |
| 40 | +### Added Configuration |
| 41 | + |
| 42 | +1. **Primary IP Version** |
| 43 | + ```yaml |
| 44 | + cifmw_ci_gen_kustomize_values_primary_ip_version: 6 |
| 45 | + ``` |
| 46 | +
|
| 47 | +2. **IPv6 Networking Definition** |
| 48 | + - All networks configured with IPv6 ranges |
| 49 | + - VLANs preserved from original (20-23) |
| 50 | + - MTU settings maintained |
| 51 | +
|
| 52 | +3. **OpenShift IPv6 Configuration** |
| 53 | + ```yaml |
| 54 | + cifmw_devscripts_config_overrides: |
| 55 | + ip_stack: "v6" |
| 56 | + provisioning_network: "fd00:1101::/64" |
| 57 | + external_subnet_v6: "2620:cf:cf:cf02::/64" |
| 58 | + service_subnet_v6: "2620:cf:cf:cf03::/112" |
| 59 | + cluster_subnet_v6: "fd01::/48" |
| 60 | + ``` |
| 61 | +
|
| 62 | +4. **Dual-Stack ctlplane IPAM** |
| 63 | + ```yaml |
| 64 | + ipam: |
| 65 | + type: whereabouts |
| 66 | + ipRanges: |
| 67 | + - range: "192.168.122.0/24" # IPv4 (compatibility) |
| 68 | + - range: "2620:cf:cf:aaaa::/64" # IPv6 (primary) |
| 69 | + ``` |
| 70 | +
|
| 71 | +### Unchanged Configuration |
| 72 | +
|
| 73 | +- VM definitions (controller, OCP nodes) |
| 74 | +- Libvirt network topology |
| 75 | +- BMH configuration |
| 76 | +- LVMS setup |
| 77 | +- EDPM image configuration |
| 78 | +
|
| 79 | +## Usage |
| 80 | +
|
| 81 | +### In Zuul Jobs |
| 82 | +
|
| 83 | +This reproducer is used by the IPv6 variant of NFV jobs: |
| 84 | +
|
| 85 | +```yaml |
| 86 | +- job: |
| 87 | + name: uni08theta-rhel9-rhoso18.0-nfv-ovs-dpdk-sriov-ipv6-trunk-patches-2nodesets |
| 88 | + vars: |
| 89 | + variable_files: |
| 90 | + - "{{ ci_framework_src }}/scenarios/reproducers/dt-nfv-ovs-dpdk-sriov-2nodesets-ipv6.yml" |
| 91 | + - ... (other variable files) |
| 92 | +``` |
| 93 | +
|
| 94 | +### Manual Deployment |
| 95 | +
|
| 96 | +```bash |
| 97 | +# Set up your environment |
| 98 | +cd ~/ci-framework |
| 99 | + |
| 100 | +# Create your custom variables file |
| 101 | +cat > my-ipv6-vars.yml <<EOF |
| 102 | +cifmw_devscripts_ci_token: <your-token> |
| 103 | +cifmw_devscripts_pull_secret: <your-pull-secret> |
| 104 | +hypervisor: <your-hypervisor-fqdn> |
| 105 | +EOF |
| 106 | + |
| 107 | +# Deploy using this reproducer |
| 108 | +ansible-playbook deploy-edpm.yml \ |
| 109 | + -e @scenarios/reproducers/dt-nfv-ovs-dpdk-sriov-2nodesets-ipv6.yml \ |
| 110 | + -e @my-ipv6-vars.yml |
| 111 | +``` |
| 112 | + |
| 113 | +## Infrastructure Requirements |
| 114 | + |
| 115 | +### Switch Configuration |
| 116 | + |
| 117 | +The physical switch must support IPv6 on all VLANs: |
| 118 | + |
| 119 | +``` |
| 120 | +# Enable IPv6 globally |
| 121 | +ipv6 unicast-routing |
| 122 | +
|
| 123 | +# Configure VLAN IPv6 gateways |
| 124 | +interface Vlan20 # internalapi |
| 125 | + ipv6 address 2620:cf:cf:bbbb::1/64 |
| 126 | + ipv6 nd managed-config-flag |
| 127 | + ipv6 nd prefix 2620:cf:cf:bbbb::/64 |
| 128 | +
|
| 129 | +interface Vlan21 # storage |
| 130 | + ipv6 address 2620:cf:cf:cccc::1/64 |
| 131 | + ipv6 nd managed-config-flag |
| 132 | + ipv6 nd prefix 2620:cf:cf:cccc::/64 |
| 133 | +
|
| 134 | +interface Vlan22 # tenant |
| 135 | + ipv6 address 2620:cf:cf:eeee::1/64 |
| 136 | + ipv6 nd managed-config-flag |
| 137 | + ipv6 nd prefix 2620:cf:cf:eeee::/64 |
| 138 | +
|
| 139 | +interface Vlan23 # storagemgmt |
| 140 | + ipv6 address 2620:cf:cf:dddd::1/64 |
| 141 | + ipv6 nd managed-config-flag |
| 142 | + ipv6 nd prefix 2620:cf:cf:dddd::/64 |
| 143 | +
|
| 144 | +# Enable MLD snooping (IPv6 multicast) |
| 145 | +ipv6 mld snooping |
| 146 | +``` |
| 147 | + |
| 148 | +### Hypervisor Requirements |
| 149 | + |
| 150 | +- **IPv6 enabled**: `sysctl net.ipv6.conf.all.disable_ipv6=0` |
| 151 | +- **IPv6 forwarding**: `sysctl net.ipv6.conf.all.forwarding=1` |
| 152 | +- **Bridges with IPv6**: All bridges (ocpbm, ocppr, osp_external, osp_trunk) must have IPv6 addresses |
| 153 | +- **Router Advertisements**: Enable RA if using SLAAC |
| 154 | + |
| 155 | +### DNS Requirements |
| 156 | + |
| 157 | +- DNS server with IPv6 support (AAAA records) |
| 158 | +- Reverse DNS for IPv6 (ip6.arpa zones) |
| 159 | +- DNS reachable at 2620:cf:cf:aaaa::1 |
| 160 | + |
| 161 | +## Topology |
| 162 | + |
| 163 | +``` |
| 164 | + ┌─────────────────┐ |
| 165 | + │ Hypervisor │ |
| 166 | + │ (dual-stack) │ |
| 167 | + └────────┬────────┘ |
| 168 | + │ |
| 169 | + ┌────────────────────┼────────────────────┐ |
| 170 | + │ │ │ |
| 171 | + ┌────▼────┐ ┌────▼────┐ ┌────▼────┐ |
| 172 | + │ OCP │ │ OCP │ │ OCP │ |
| 173 | + │ Master │ │ Master │ │ Master │ |
| 174 | + │ #1 │ │ #2 │ │ #3 │ |
| 175 | + └─────────┘ └─────────┘ └─────────┘ |
| 176 | + │ │ │ |
| 177 | + └────────────────────┼────────────────────┘ |
| 178 | + │ |
| 179 | + ┌────────▼────────┐ |
| 180 | + │ controller-0 │ |
| 181 | + │ (IPv6: aaaa::9) │ |
| 182 | + └────────┬────────┘ |
| 183 | + │ |
| 184 | + ┌────────────────────┼────────────────────┐ |
| 185 | + │ │ │ |
| 186 | + ┌────▼────┐ ┌────▼────┐ ┌────▼────┐ |
| 187 | + │ Compute │ │ Compute │ │ Compute │ |
| 188 | + │ Node │ │ Node │ │ Node │ |
| 189 | + │ (Set 1) │ │ (Set 2) │ │ (Set 2) │ |
| 190 | + └─────────┘ └─────────┘ └─────────┘ |
| 191 | + OVS-DPDK OVS-DPDK OVS-DPDK |
| 192 | + SR-IOV SR-IOV SR-IOV |
| 193 | +``` |
| 194 | + |
| 195 | +## Verification |
| 196 | + |
| 197 | +After deployment, verify IPv6 configuration: |
| 198 | + |
| 199 | +```bash |
| 200 | +# On hypervisor - check IPv6 addresses |
| 201 | +ip -6 addr show osp_trunk |
| 202 | +# Should show: 2620:cf:cf:aaaa::1/64 (if configured by nmstate) |
| 203 | + |
| 204 | +# Test connectivity to controller-0 |
| 205 | +ping6 2620:cf:cf:aaaa::9 |
| 206 | + |
| 207 | +# On compute nodes - check IPv6 configuration |
| 208 | +ssh heat-admin@<compute-node> |
| 209 | +ip -6 addr show |
| 210 | +# Should show IPv6 addresses on bond interfaces |
| 211 | + |
| 212 | +# Verify OpenStack endpoints use IPv6 |
| 213 | +openstack endpoint list |
| 214 | +# Should show IPv6 addresses like [2620:cf:cf:aaaa::X] |
| 215 | +``` |
| 216 | + |
| 217 | +## Troubleshooting |
| 218 | + |
| 219 | +### Common Issues |
| 220 | + |
| 221 | +**Issue**: Computes can't reach control plane |
| 222 | +- **Check**: DHCPv6 or SLAAC working on ctlplane |
| 223 | +- **Verify**: `tcpdump -i osp_trunk -n icmp6` |
| 224 | + |
| 225 | +**Issue**: Services not listening on IPv6 |
| 226 | +- **Check**: `cifmw_ci_gen_kustomize_values_primary_ip_version: 6` is set |
| 227 | +- **Verify**: `ss -tlnp6` on controller |
| 228 | + |
| 229 | +**Issue**: DNS resolution fails |
| 230 | +- **Check**: AAAA records exist for all services |
| 231 | +- **Verify**: `dig AAAA keystone.openstack.svc` |
| 232 | + |
| 233 | +**Issue**: VLANs not working |
| 234 | +- **Check**: Switch has IPv6 enabled on VLANs 20-23 |
| 235 | +- **Verify**: MLD snooping enabled |
| 236 | + |
| 237 | +## Related Files |
| 238 | + |
| 239 | +- **Original IPv4 reproducer**: `dt-nfv-ovs-dpdk-sriov-2nodesets.yml` |
| 240 | +- **Job definition**: `zuul.d/ci-framework-rhoso-18-rhel9-trunk-nfv-jobs.yaml` |
| 241 | +- **IPv6 UNI scenario example**: `scenarios/uni/uni04delta-ipv6/` |
| 242 | + |
| 243 | +## References |
| 244 | + |
| 245 | +- [IPv6 Networking in OpenStack](https://docs.openstack.org/neutron/latest/admin/config-ipv6.html) |
| 246 | +- [OVS-DPDK Documentation](https://docs.openvswitch.org/en/latest/topics/dpdk/) |
| 247 | +- [SR-IOV Configuration](https://docs.openstack.org/neutron/latest/admin/config-sriov.html) |
| 248 | +- CI Framework IPv6 examples |
| 249 | + |
| 250 | +## Author |
| 251 | + |
| 252 | +Generated for NFV IPv6 testing scenarios. |
| 253 | + |
| 254 | +## Version History |
| 255 | + |
| 256 | +- **1.0** (2025-01-06): Initial IPv6 variant created based on dt-nfv-ovs-dpdk-sriov-2nodesets.yml |
0 commit comments