10.96.0.0/12
Private (RFC 1918) RFC 1918The 10.96.0.0/12 range is the default service CIDR used by kubeadm-bootstrapped Kubernetes clusters. All ClusterIP Services get a virtual IP from this range. The range covers 10.96.0.0 through 10.111.255.255 — over 1 million addresses — providing headroom for large clusters.
Network address — the base address of the block (10.96.0.0). All devices in this subnet share this prefix. Cannot be assigned to a host.
Broadcast address — packets sent to 10.111.255.255 are delivered to every device in the subnet. Also reserved — not assignable.
Usable hosts — the 1,048,574 addresses between those two that you can assign to servers, VMs, or interfaces.
Subnet mask — 255.240.0.0 is the dotted-decimal equivalent of /12. Older tools and Cisco configs use this format instead of CIDR slash notation.
Full Details
| CIDR Notation | 10.96.0.0/12 |
| Network Address | 10.96.0.0 |
| Broadcast Address | 10.111.255.255 |
| Subnet Mask | 255.240.0.0 |
| Wildcard Mask | 0.15.255.255 |
| Prefix Length | /12 |
| IP Address Class | Class A |
| Total IP Addresses | 1,048,576 |
| Usable Host Addresses | 1,048,574 |
| First Usable IP | 10.96.0.1 |
| Last Usable IP | 10.111.255.254 |
| Network (Hex) | 0x0A600000 |
| Broadcast (Hex) | 0x0A6FFFFF |
| Governing RFC | RFC 1918 |
| Address Type | Private (RFC 1918) |
Binary Representation
The first 12 bits (1s in the mask) identify the network. The remaining 20 bits identify hosts within the network.
Split into Equal Subnets
Split 10.96.0.0/12 into 2 equal /13 subnets (524,286 usable hosts each).
| # | CIDR | Network | First Usable | Last Usable | Broadcast | Hosts |
|---|---|---|---|---|---|---|
| 1 | 10.96.0.0/13 | 10.96.0.0 | 10.96.0.1 | 10.103.255.254 | 10.103.255.255 | 524,286 |
| 2 | 10.104.0.0/13 | 10.104.0.0 | 10.104.0.1 | 10.111.255.254 | 10.111.255.255 | 524,286 |
Split 10.96.0.0/12 into 4 equal /14 subnets (262,142 usable hosts each).
| # | CIDR | Network | First Usable | Last Usable | Broadcast | Hosts |
|---|---|---|---|---|---|---|
| 1 | 10.96.0.0/14 | 10.96.0.0 | 10.96.0.1 | 10.99.255.254 | 10.99.255.255 | 262,142 |
| 2 | 10.100.0.0/14 | 10.100.0.0 | 10.100.0.1 | 10.103.255.254 | 10.103.255.255 | 262,142 |
| 3 | 10.104.0.0/14 | 10.104.0.0 | 10.104.0.1 | 10.107.255.254 | 10.107.255.255 | 262,142 |
| 4 | 10.108.0.0/14 | 10.108.0.0 | 10.108.0.1 | 10.111.255.254 | 10.111.255.255 | 262,142 |
Split 10.96.0.0/12 into 8 equal /15 subnets (131,070 usable hosts each).
| # | CIDR | Network | First Usable | Last Usable | Broadcast | Hosts |
|---|---|---|---|---|---|---|
| 1 | 10.96.0.0/15 | 10.96.0.0 | 10.96.0.1 | 10.97.255.254 | 10.97.255.255 | 131,070 |
| 2 | 10.98.0.0/15 | 10.98.0.0 | 10.98.0.1 | 10.99.255.254 | 10.99.255.255 | 131,070 |
| 3 | 10.100.0.0/15 | 10.100.0.0 | 10.100.0.1 | 10.101.255.254 | 10.101.255.255 | 131,070 |
| 4 | 10.102.0.0/15 | 10.102.0.0 | 10.102.0.1 | 10.103.255.254 | 10.103.255.255 | 131,070 |
| 5 | 10.104.0.0/15 | 10.104.0.0 | 10.104.0.1 | 10.105.255.254 | 10.105.255.255 | 131,070 |
| 6 | 10.106.0.0/15 | 10.106.0.0 | 10.106.0.1 | 10.107.255.254 | 10.107.255.255 | 131,070 |
| 7 | 10.108.0.0/15 | 10.108.0.0 | 10.108.0.1 | 10.109.255.254 | 10.109.255.255 | 131,070 |
| 8 | 10.110.0.0/15 | 10.110.0.0 | 10.110.0.1 | 10.111.255.254 | 10.111.255.255 | 131,070 |
Split 10.96.0.0/12 into 16 equal /16 subnets (65,534 usable hosts each).
| # | CIDR | Network | First Usable | Last Usable | Broadcast | Hosts |
|---|---|---|---|---|---|---|
| 1 | 10.96.0.0/16 | 10.96.0.0 | 10.96.0.1 | 10.96.255.254 | 10.96.255.255 | 65,534 |
| 2 | 10.97.0.0/16 | 10.97.0.0 | 10.97.0.1 | 10.97.255.254 | 10.97.255.255 | 65,534 |
| 3 | 10.98.0.0/16 | 10.98.0.0 | 10.98.0.1 | 10.98.255.254 | 10.98.255.255 | 65,534 |
| 4 | 10.99.0.0/16 | 10.99.0.0 | 10.99.0.1 | 10.99.255.254 | 10.99.255.255 | 65,534 |
| 5 | 10.100.0.0/16 | 10.100.0.0 | 10.100.0.1 | 10.100.255.254 | 10.100.255.255 | 65,534 |
| 6 | 10.101.0.0/16 | 10.101.0.0 | 10.101.0.1 | 10.101.255.254 | 10.101.255.255 | 65,534 |
| 7 | 10.102.0.0/16 | 10.102.0.0 | 10.102.0.1 | 10.102.255.254 | 10.102.255.255 | 65,534 |
| 8 | 10.103.0.0/16 | 10.103.0.0 | 10.103.0.1 | 10.103.255.254 | 10.103.255.255 | 65,534 |
| 9 | 10.104.0.0/16 | 10.104.0.0 | 10.104.0.1 | 10.104.255.254 | 10.104.255.255 | 65,534 |
| 10 | 10.105.0.0/16 | 10.105.0.0 | 10.105.0.1 | 10.105.255.254 | 10.105.255.255 | 65,534 |
| 11 | 10.106.0.0/16 | 10.106.0.0 | 10.106.0.1 | 10.106.255.254 | 10.106.255.255 | 65,534 |
| 12 | 10.107.0.0/16 | 10.107.0.0 | 10.107.0.1 | 10.107.255.254 | 10.107.255.255 | 65,534 |
| 13 | 10.108.0.0/16 | 10.108.0.0 | 10.108.0.1 | 10.108.255.254 | 10.108.255.255 | 65,534 |
| 14 | 10.109.0.0/16 | 10.109.0.0 | 10.109.0.1 | 10.109.255.254 | 10.109.255.255 | 65,534 |
| 15 | 10.110.0.0/16 | 10.110.0.0 | 10.110.0.1 | 10.110.255.254 | 10.110.255.255 | 65,534 |
| 16 | 10.111.0.0/16 | 10.111.0.0 | 10.111.0.1 | 10.111.255.254 | 10.111.255.255 | 65,534 |
Common Use Cases
- → Kubernetes ClusterIP service virtual IPs
- → kube-dns service (typically 10.96.0.10)
- → kubeadm default --service-cidr value
- → Service network planning to avoid VPC overlap
Code Examples
# Terraform — EKS cluster with custom service CIDR
resource "aws_eks_cluster" "main" {
name = "main"
role_arn = aws_iam_role.eks.arn
vpc_config {
subnet_ids = var.subnet_ids
}
kubernetes_network_config {
service_ipv4_cidr = "10.96.0.0/12"
ip_family = "ipv4"
}
}
# kubeadm init — specify service CIDR explicitly kubeadm init \ --service-cidr 10.96.0.0/12 \ --pod-network-cidr 10.244.0.0/16 # Check current service CIDR on a running cluster kubectl cluster-info dump \ | grep -m1 service-cluster-ip-range