Summary
Add comprehensive IPv6 subnet support to the AWS Multi-ENI Controller, enabling IPv6-only and dual-stack (IPv4 + IPv6) ENI configurations through NodeENI resources.
Motivation
As AWS VPCs increasingly adopt IPv6 for modern cloud-native applications, the AWS Multi-ENI Controller needs to support IPv6 subnets to remain relevant for next-generation networking requirements. This includes support for IPv6-only environments and dual-stack configurations that many enterprises are adopting.
Feature Description
Core Functionality
- IPv6 Subnet Support: Ability to specify IPv6 subnet IDs in NodeENI resource specifications
- Dual-Stack Configuration: Support for both IPv4 and IPv6 subnets in a single NodeENI resource
- IPv6 Address Management: Automatic IPv6 address assignment and management for attached ENIs
- AWS VPC Integration: Full integration with AWS VPC IPv6 functionality and routing
- Status Reporting: Enhanced ENI attachment status to include IPv6 addresses and subnet information
- Multus CNI Compatibility: Ensure seamless integration with existing Multus CNI configurations
- SR-IOV/DPDK Compatibility: Maintain compatibility with existing SR-IOV and DPDK functionality
Proposed NodeENI Resource Schema
apiVersion: networking.k8s.aws/v1alpha1
kind: NodeENI
metadata:
name: dual-stack-eni
spec:
nodeSelector:
ng: ipv6-enabled
# IPv4 Configuration (existing)
subnetIDs:
- subnet-12345678 # IPv4 subnet
# NEW: IPv6 Configuration
ipv6SubnetIDs:
- subnet-ipv6-abcdef123 # IPv6 subnet
# Alternative: Combined subnet configuration
# subnets:
# - id: subnet-12345678
# type: ipv4
# - id: subnet-ipv6-abcdef123
# type: ipv6
securityGroupIDs:
- sg-12345678
deviceIndex: 2
# IPv6-specific configuration
ipv6Config:
enabled: true
addressCount: 1 # Number of IPv6 addresses to assign
prefixDelegation: false # Enable IPv6 prefix delegation
status:
attachments:
- eniID: eni-12345678
deviceIndex: 2
status: attached
# IPv4 information (existing)
subnetID: subnet-12345678
subnetCIDR: "10.0.1.0/24"
privateIPAddress: "10.0.1.100"
# NEW: IPv6 information
ipv6SubnetID: subnet-ipv6-abcdef123
ipv6SubnetCIDR: "2001:db8::/64"
ipv6Addresses:
- "2001:db8::100"
- "2001:db8::101"
lastUpdated: "2025-05-28T10:00:00Z"
Example Configurations
1. IPv6-Only ENI
apiVersion: networking.k8s.aws/v1alpha1
kind: NodeENI
metadata:
name: ipv6-only-eni
spec:
nodeSelector:
workload: ipv6-native
ipv6SubnetIDs:
- subnet-ipv6-123456
securityGroupIDs:
- sg-ipv6-789012
deviceIndex: 2
ipv6Config:
enabled: true
addressCount: 2
2. Dual-Stack ENI (IPv4 + IPv6)
apiVersion: networking.k8s.aws/v1alpha1
kind: NodeENI
metadata:
name: dual-stack-eni
spec:
nodeSelector:
network: dual-stack
subnetIDs:
- subnet-ipv4-abc123 # IPv4 subnet
ipv6SubnetIDs:
- subnet-ipv6-def456 # IPv6 subnet
securityGroupIDs:
- sg-dual-stack-789
deviceIndex: 3
ipv6Config:
enabled: true
addressCount: 1
3. IPv6 with SR-IOV (Non-DPDK)
apiVersion: networking.k8s.aws/v1alpha1
kind: NodeENI
metadata:
name: ipv6-sriov-eni
spec:
nodeSelector:
workload: high-performance-ipv6
ipv6SubnetIDs:
- subnet-ipv6-sriov-123
securityGroupIDs:
- sg-sriov-ipv6-456
deviceIndex: 2
# SR-IOV Configuration
enableDPDK: false
dpdkPCIAddress: "0000:00:07.0"
dpdkResourceName: "intel.com/sriov_ipv6_kernel"
# IPv6 Configuration
ipv6Config:
enabled: true
addressCount: 1
4. IPv6 with DPDK
apiVersion: networking.k8s.aws/v1alpha1
kind: NodeENI
metadata:
name: ipv6-dpdk-eni
spec:
nodeSelector:
workload: dpdk-ipv6
ipv6SubnetIDs:
- subnet-ipv6-dpdk-789
securityGroupIDs:
- sg-dpdk-ipv6-012
deviceIndex: 4
# DPDK Configuration
enableDPDK: true
dpdkDriver: "vfio-pci"
dpdkPCIAddress: "0000:00:08.0"
dpdkResourceName: "intel.com/sriov_dpdk_ipv6"
# IPv6 Configuration
ipv6Config:
enabled: true
addressCount: 2
5. Multus CNI NetworkAttachmentDefinition for IPv6
apiVersion: "k8s.cni.cncf.io/v1"
kind: NetworkAttachmentDefinition
metadata:
name: ipv6-secondary-network
namespace: default
spec:
config: '{
"cniVersion": "0.3.1",
"type": "ipvlan",
"master": "eth2",
"mode": "l2",
"ipam": {
"type": "static",
"addresses": [
{
"address": "2001:db8::100/64",
"gateway": "2001:db8::1"
}
],
"routes": [
{
"dst": "::/0",
"gw": "2001:db8::1"
}
]
}
}'
Implementation Approach
1. NodeENI CRD Updates
// Proposed Go structures
type NodeENISpec struct {
// Existing fields...
SubnetIDs []string `json:"subnetIDs,omitempty"`
// NEW: IPv6 support
IPv6SubnetIDs []string `json:"ipv6SubnetIDs,omitempty"`
IPv6Config *IPv6Config `json:"ipv6Config,omitempty"`
// Alternative: Unified subnet configuration
// Subnets []SubnetConfig `json:"subnets,omitempty"`
}
type IPv6Config struct {
Enabled bool `json:"enabled"`
AddressCount int32 `json:"addressCount,omitempty"`
PrefixDelegation bool `json:"prefixDelegation,omitempty"`
}
type ENIAttachment struct {
// Existing IPv4 fields...
ENIID string `json:"eniID"`
SubnetID string `json:"subnetID"`
SubnetCIDR string `json:"subnetCIDR"`
PrivateIPAddress string `json:"privateIPAddress"`
// NEW: IPv6 fields
IPv6SubnetID string `json:"ipv6SubnetID,omitempty"`
IPv6SubnetCIDR string `json:"ipv6SubnetCIDR,omitempty"`
IPv6Addresses []string `json:"ipv6Addresses,omitempty"`
}
// Alternative unified approach
type SubnetConfig struct {
ID string `json:"id"`
Type string `json:"type"` // "ipv4" or "ipv6"
}
2. AWS EC2 Client Enhancement
- Extend EC2 client to support IPv6 subnet operations
- Add IPv6 address assignment and management
- Implement IPv6 subnet validation and discovery
- Support for dual-stack ENI creation and configuration
3. ENI Manager Updates
- Update interface configuration logic for IPv6
- Add IPv6 routing and address management
- Ensure IPv6 compatibility with existing SR-IOV/DPDK functionality
- Update status reporting to include IPv6 information
4. Controller Logic Enhancement
- Extend NodeENI controller to handle IPv6 subnets
- Add validation for IPv6 subnet configurations
- Implement IPv6-aware reconciliation logic
- Support for mixed IPv4/IPv6 environments
Acceptance Criteria
Core IPv6 Functionality
Status and Monitoring
Integration Compatibility
AWS Integration
Testing
Technical Considerations
1. AWS VPC IPv6 Requirements
- VPC must have IPv6 CIDR block assigned
- Subnets must have IPv6 CIDR blocks configured
- Route tables must include IPv6 routes
- Security groups must allow IPv6 traffic
2. Kubernetes IPv6 Support
- Ensure cluster supports IPv6 (dual-stack or IPv6-only)
- Pod networking must be IPv6-capable
- Service discovery and DNS must support IPv6
- Ingress controllers must support IPv6
3. Container Runtime Considerations
- Container runtime must support IPv6 networking
- CNI plugins must be IPv6-capable
- Network policies must support IPv6 rules
4. Backwards Compatibility
- Existing IPv4-only NodeENI resources must continue to work
- No changes to existing API behavior
- Graceful handling of mixed IPv4/IPv6 environments
- Optional IPv6 configuration (disabled by default)
Migration Strategy
Phase 1: Basic IPv6 Support
- Add IPv6 subnet configuration to NodeENI CRD
- Implement IPv6 ENI creation and attachment
- Basic IPv6 status reporting
Phase 2: Dual-Stack Support
- Support for both IPv4 and IPv6 in single NodeENI
- Enhanced status reporting for dual-stack
- Comprehensive testing
Phase 3: Advanced Features
- IPv6 prefix delegation support
- Advanced IPv6 routing configurations
- Performance optimizations
Related Work
- Current ENI Management: Build upon existing ENI attachment logic in v1.3.5
- SR-IOV Integration: Ensure IPv6 works with current SR-IOV functionality
- DPDK Integration: Maintain IPv6 compatibility with DPDK configurations
- Multus CNI: Leverage existing Multus integration for IPv6 secondary networks
Future Enhancements
- IPv6 Prefix Delegation: Support for AWS IPv6 prefix delegation
- IPv6 Load Balancing: Integration with AWS IPv6 load balancers
- IPv6 Monitoring: Enhanced metrics and monitoring for IPv6 networks
- IPv6 Security: Advanced IPv6 security group and NACLs support
- IPv6 Performance: IPv6-specific performance optimizations
Baseline Version: v1.3.5
Priority: High (IPv6 adoption is accelerating)
Complexity: High
Dependencies: AWS VPC IPv6 support, Kubernetes IPv6 support
Summary
Add comprehensive IPv6 subnet support to the AWS Multi-ENI Controller, enabling IPv6-only and dual-stack (IPv4 + IPv6) ENI configurations through NodeENI resources.
Motivation
As AWS VPCs increasingly adopt IPv6 for modern cloud-native applications, the AWS Multi-ENI Controller needs to support IPv6 subnets to remain relevant for next-generation networking requirements. This includes support for IPv6-only environments and dual-stack configurations that many enterprises are adopting.
Feature Description
Core Functionality
Proposed NodeENI Resource Schema
Example Configurations
1. IPv6-Only ENI
2. Dual-Stack ENI (IPv4 + IPv6)
3. IPv6 with SR-IOV (Non-DPDK)
4. IPv6 with DPDK
5. Multus CNI NetworkAttachmentDefinition for IPv6
Implementation Approach
1. NodeENI CRD Updates
2. AWS EC2 Client Enhancement
3. ENI Manager Updates
4. Controller Logic Enhancement
Acceptance Criteria
Core IPv6 Functionality
Status and Monitoring
Integration Compatibility
AWS Integration
Testing
Technical Considerations
1. AWS VPC IPv6 Requirements
2. Kubernetes IPv6 Support
3. Container Runtime Considerations
4. Backwards Compatibility
Migration Strategy
Phase 1: Basic IPv6 Support
Phase 2: Dual-Stack Support
Phase 3: Advanced Features
Related Work
Future Enhancements
Baseline Version: v1.3.5
Priority: High (IPv6 adoption is accelerating)
Complexity: High
Dependencies: AWS VPC IPv6 support, Kubernetes IPv6 support