Skip to content

Commit d874876

Browse files
committed
Document dual-stack requirement for IPv6 backends
1 parent de01740 commit d874876

3 files changed

Lines changed: 29 additions & 2 deletions

File tree

docs/configuration/annotations.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ The keys and the values in [annotations must be strings](https://kubernetes.io/d
4040
| `firewall-acl` | string | | The Firewall rules to be applied to the NodeBalancer. See [Firewall Configuration](#firewall-configuration) |
4141
| `nodebalancer-type` | string | | The type of NodeBalancer to create (options: common, premium, premium_40gb). See [NodeBalancer Types](#nodebalancer-type). Note: NodeBalancer types should always be specified in lowercase. |
4242
| `enable-ipv6-ingress` | bool | `false` | When `true`, both IPv4 and IPv6 addresses will be included in the LoadBalancerStatus ingress |
43-
| `enable-ipv6-backends` | bool | `false` | When `true`, non-VPC NodeBalancer services use public IPv6 backend nodes, and reconciliation fails if a selected backend node does not have public IPv6. |
43+
| `enable-ipv6-backends` | bool | `false` | When `true`, non-VPC NodeBalancer services use public IPv6 backend nodes. This requires a dual-stack cluster and a dual-stack Service configuration. Reconciliation fails if a selected backend node does not have public IPv6. |
4444
| `backend-ipv4-range` | string | | The IPv4 range from VPC subnet to be applied to the NodeBalancer backend. See [Nodebalancer VPC Configuration](#nodebalancer-vpc-configuration) |
4545
| `backend-vpc-name` | string | | VPC which is connected to the NodeBalancer backend. See [Nodebalancer VPC Configuration](#nodebalancer-vpc-configuration) |
4646
| `backend-subnet-name` | string | | Subnet within VPC which is connected to the NodeBalancer backend. See [Nodebalancer VPC Configuration](#nodebalancer-vpc-configuration) |

docs/configuration/environment.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ The CCM supports the following flags:
5353
| `--nodebalancer-backend-ipv4-subnet-name` | String | `""` | ipv4 subnet name to use for NodeBalancer backends |
5454
| `--disable-nodebalancer-vpc-backends` | Boolean | `false` | don't use VPC specific ip-addresses for nodebalancer backend ips when running in VPC (set to `true` for backward compatibility if needed) |
5555
| `--enable-ipv6-for-loadbalancers` | Boolean | `false` | Set both IPv4 and IPv6 addresses for all LoadBalancer services (when disabled, only IPv4 is used). This can also be configured per-service using the `service.beta.kubernetes.io/linode-loadbalancer-enable-ipv6-ingress` annotation. |
56-
| `--enable-ipv6-for-nodebalancer-backends` | Boolean | `false` | Use public IPv6 addresses for non-VPC NodeBalancer service backends. If enabled, every selected backend node must have public IPv6 or reconciliation will fail. This can also be configured per-service using the `service.beta.kubernetes.io/linode-loadbalancer-enable-ipv6-backends` annotation. |
56+
| `--enable-ipv6-for-nodebalancer-backends` | Boolean | `false` | Use public IPv6 addresses for non-VPC NodeBalancer service backends. This requires a dual-stack cluster and dual-stack Service configuration. If enabled, every selected backend node must have public IPv6 or reconciliation will fail. This can also be configured per-service using the `service.beta.kubernetes.io/linode-loadbalancer-enable-ipv6-backends` annotation. |
5757
| `--node-cidr-mask-size-ipv4` | Int | `24` | ipv4 cidr mask size for pod cidrs allocated to nodes |
5858
| `--node-cidr-mask-size-ipv6` | Int | `64` | ipv6 cidr mask size for pod cidrs allocated to nodes |
5959
| `--nodebalancer-prefix` | String | `ccm` | Name prefix for NoadBalancers. |

docs/configuration/loadbalancer.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ When IPv6 is enabled (either globally or per-service), both IPv4 and IPv6 addres
4848
4949
IPv6 frontends and IPv6 backends are configured independently. Frontend IPv6 controls what the Service publishes in `status.loadBalancer.ingress`, while backend IPv6 controls which node addresses a NodeBalancer targets.
5050

51+
IPv6 backends require a dual-stack workload cluster. In practice, the cluster networking stack must support IPv6 NodePort traffic, and the Service itself should be created as dual-stack. A single-stack IPv4 `LoadBalancer` Service can still be annotated for IPv6 backends, but the NodeBalancer health checks and traffic path may fail because the backend NodePort is not exposed over IPv6.
52+
5153
For newly created non-VPC NodeBalancer services, you can enable public IPv6 backends globally:
5254

5355
```yaml
@@ -72,10 +74,35 @@ When IPv6 backends are enabled:
7274
- only non-VPC NodeBalancer services are affected
7375
- existing services are not migrated automatically
7476
- every selected backend node must have public IPv6
77+
- the workload cluster and Service must be configured for dual-stack networking
7578
- reconciliation fails and CCM logs an error if a selected backend node does not have public IPv6
7679

7780
VPC backend behavior is unchanged and continues to use the existing IPv4/VPC backend flow.
7881

82+
Recommended Service configuration for IPv6 backends:
83+
84+
```yaml
85+
apiVersion: v1
86+
kind: Service
87+
metadata:
88+
name: my-service
89+
annotations:
90+
service.beta.kubernetes.io/linode-loadbalancer-enable-ipv6-backends: "true"
91+
spec:
92+
type: LoadBalancer
93+
ipFamilyPolicy: RequireDualStack
94+
ipFamilies:
95+
- IPv4
96+
- IPv6
97+
ports:
98+
- port: 80
99+
targetPort: 8080
100+
selector:
101+
app: my-app
102+
```
103+
104+
If your cluster does not provide IPv6-capable NodePort routing, the NodeBalancer may still be created with IPv6 backend addresses, but the backends will not become healthy.
105+
79106
### Basic Configuration
80107

81108
Create a LoadBalancer service:

0 commit comments

Comments
 (0)