Purpose: For network engineers, shows how to configure CNI plugins, load balancers, and network policies, covering network topology through security.
Kubernetes networking in openCenter is highly configurable. This guide shows you how to configure CNI plugins, load balancers, subnets, and network security.
Prerequisites
-
openCenter CLI installed
-
Cluster configuration created
-
Understanding of Kubernetes networking concepts (helpful)
Network Topology
Default Network Configuration
openCenter uses these default CIDR ranges:
opencenter:
cluster:
kubernetes:
subnet_pods: "10.42.0.0/16" # Pod network (65,536 IPs)
subnet_services: "10.43.0.0/16" # Service network (65,536 IPs)
networking:
subnet_nodes: "10.2.128.0/22" # Node network (1,024 IPs)
Customize Network Ranges
Change CIDR ranges to avoid conflicts:
opencenter:
cluster:
kubernetes:
subnet_pods: "10.244.0.0/16"
subnet_services: "10.245.0.0/16"
networking:
subnet_nodes: "192.168.1.0/24"
❗ IMPORTANT\ Ensure ranges don’t overlap with:
-
Existing network infrastructure
-
VPN networks
-
Other Kubernetes clusters
CNI Plugin Configuration
Calico (Default)
Calico is enabled by default. For OpenStack clusters, openCenter installs bundled Calico v3.32.0 native projectcalico.org/v3 CRDs, the Tigera operator, and custom-resources-bpf.yaml with eBPF mode enabled after kubeconfig normalization:
opencenter:
cluster:
kubernetes:
network_plugin:
calico:
enabled: true
version: "3.32.0"
install_method: helm
network_policy: true
The Calico manifests are bundled in the CLI for offline installation. The target cluster still needs access to the referenced container images or to a registry mirror.
OpenStack Calico eBPF Behavior
The OpenStack bundled installer patches the cluster pod CIDR into Calico’s default IP pool and preserves Tigera’s eBPF settings:
-
linuxDataplane: BPF -
bpfNetworkBootstrap: Enabled -
kubeProxyManagement: Enabled
The bundled installer does not use Kubespray Calico interface-detection or encapsulation settings.
Cilium
Enable Cilium with eBPF and kube-proxy replacement:
opencenter:
cluster:
kubernetes:
network_plugin:
calico:
enabled: false
cilium:
enabled: true
install_method: helm
operator_enabled: true
kube_proxy_replacement: true
📌 NOTE\
Only one CNI plugin can be enabled at a time. For OpenStack clusters, CNI installation is handled after kubeconfig normalization with install_method: helm or install_method: kustomize-helm; Kubespray is not used to install CNIs. Calico accepts those install method values for compatibility, but OpenStack Calico always uses the bundled eBPF manifest installer.
Load Balancer Configuration
OVN Load Balancer (Default)
Use OVN for load balancing (no external dependency):
opencenter:
cluster:
kubernetes:
loadbalancer_provider: "ovn"
networking:
use_octavia: false
loadbalancer_provider: "ovn"
Octavia Load Balancer
Use OpenStack Octavia for production load balancing:
opencenter:
cluster:
kubernetes:
loadbalancer_provider: "octavia"
networking:
use_octavia: true
loadbalancer_provider: "octavia"
Requirements:
-
OpenStack cloud with Octavia service
-
Sufficient Octavia quota
MetalLB
Use MetalLB for bare metal or VMware:
opencenter:
cluster:
kubernetes:
loadbalancer_provider: "metallb"
Configure IP address pool:
# In GitOps repository after setup
# applications/overlays/<cluster>/services/metallb/ipaddresspool.yaml
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: default
namespace: metallb-system
spec:
addresses:
- 192.168.1.100-192.168.1.200
VRRP Configuration
DNS Configuration
Cluster DNS
Configure DNS nameservers for nodes:
opencenter:
cluster:
networking:
dns_nameservers:
- "8.8.8.8"
- "8.8.4.4"
Use internal DNS:
opencenter:
cluster:
networking:
dns_nameservers:
- "10.0.0.53"
- "10.0.0.54"
OpenStack Designate
Enable DNS integration with OpenStack Designate:
opencenter:
cluster:
networking:
use_designate: true
dns_zone_name: "k8s.example.com"
kubernetes:
dns_zone_name: "k8s.example.com"
Configure Designate in infrastructure:
opencenter:
infrastructure:
cloud:
openstack:
networking:
designate:
dns_zone_name: "k8s.example.com"
NTP Configuration
Configure time synchronization:
opencenter:
cluster:
networking:
ntp_servers:
- "time.sjc3.rackspace.com"
- "time2.sjc3.rackspace.com"
Use public NTP:
opencenter:
cluster:
networking:
ntp_servers:
- "0.pool.ntp.org"
- "1.pool.ntp.org"
Network Allocation
Node Network Allocation
Configure IP allocation pool for nodes:
opencenter:
cluster:
networking:
subnet_nodes: "10.2.128.0/22"
allocation_pool_start: "10.2.128.10"
allocation_pool_end: "10.2.131.250"
This reserves:
-
10.2.128.1-9for infrastructure (gateway, DNS, etc.) -
10.2.128.10-10.2.131.250for nodes -
10.2.131.251-254for future use
Kubernetes API Access
Network Security
Gateway API Configuration
Enable Gateway API
Gateway API is enabled by default:
opencenter:
services:
gateway-api:
enabled: true
gateway:
enabled: true
HTTPRoute Hostname Format
Services use this hostname pattern:
<service>.<org>.<cluster>.<region>.k8s.opencenter.cloud
Example:
auth.my-org.my-cluster.sjc3.k8s.opencenter.cloud
Configure base domain:
opencenter:
cluster:
base_domain: "k8s.opencenter.cloud"
cluster_fqdn: "my-cluster.sjc3.k8s.opencenter.cloud"
Network Validation
Validate network configuration:
opencenter cluster validate
This checks:
-
CIDR ranges don’t overlap
-
Required fields are set (VRRP IP when needed)
-
Network topology is valid
-
DNS configuration is correct
Apply Network Changes
After changing network configuration:
-
Validate:
```bash opencenter cluster validate ``` . *Regenerate manifests:*
```bash opencenter cluster generate ``` . *Review changes:*
```bash cd <git_dir> git diff ``` . *Commit and push:*
```bash git add . git commit -m "Update network configuration" git push ```
⚠️ WARNING\ Changing CNI plugin or network ranges on existing clusters requires cluster rebuild.
Troubleshooting
Pod Network Issues
Problem: Pods can’t communicate
Solution: Check CNI plugin status:
kubectl get pods -n calico-system
kubectl get tigerastatus calico
kubectl get pods -n kube-system -l k8s-app=cilium
kubectl get pods -n kube-system -l app.kubernetes.io/part-of=kube-ovn
Verify interface configuration:
kubectl exec -n calico-system <calico-pod> -- ip addr
Load Balancer Not Working
Problem: LoadBalancer services stuck in Pending
Solution: Check load balancer provider:
# For Octavia
kubectl logs -n kube-system <openstack-cloud-controller-manager-pod>
# For MetalLB
kubectl get ipaddresspool -n metallb-system
kubectl logs -n metallb-system <metallb-controller-pod>
Next Steps
-
customize-services.md[Customize Services] - Configure network-related services
-
add-worker-pools.md[Add Worker Pools] - Scale network capacity
-
troubleshoot-deployment.md[Troubleshoot Deployment] - Fix network issues
Evidence
This how-to guide is based on:
-
Network defaults:
internal/config/defaults.go:177-179,204-205 -
CNI configuration:
internal/config/defaults.go:214-237 -
Schema network plugin:
schema/cluster.schema.json:300-400 -
Load balancer config:
internal/config/defaults.go:206 -
VRRP validation:
tests/features/workflow.feature:38-50 -
Session 1 networking review: A7
-
Session 2 facts inventory: B0 section 5