Add docs for creating private networks
parent
d01bea732b
commit
272791e5b7
1 changed files with 180 additions and 1 deletions
181
Guide-VM.md
181
Guide-VM.md
|
|
@ -1,2 +1,181 @@
|
||||||
# WIP
|
# Private L2 LANs on OpenShift (Pods + VMs)
|
||||||
|
|
||||||
|
Create an L2 overlay private lan with OVN-Kubernetes and attach Pods and KubeVirt VMs. VM gets an IP automatically via IPAM (Option A) or via static IP via cloud-init (Option B).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Prereqs
|
||||||
|
- Namespace `demo-ns` exists
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1) NetworkAttachmentDefinition (NAD)
|
||||||
|
|
||||||
|
### Option A — with Pod IPAM
|
||||||
|
```yaml
|
||||||
|
apiVersion: k8s.cni.cncf.io/v1
|
||||||
|
kind: NetworkAttachmentDefinition
|
||||||
|
metadata:
|
||||||
|
name: demo-net
|
||||||
|
namespace: demo-ns
|
||||||
|
spec:
|
||||||
|
config: |-
|
||||||
|
{
|
||||||
|
"cniVersion": "0.3.1",
|
||||||
|
"name": "demo-net",
|
||||||
|
"type": "ovn-k8s-cni-overlay",
|
||||||
|
"topology": "layer2",
|
||||||
|
"subnets": "192.168.0.0/24",
|
||||||
|
"netAttachDefName": "demo-ns/demo-net"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Option B — pure L2 (no IPAM; static or DHCP in-guest)
|
||||||
|
```yaml
|
||||||
|
apiVersion: k8s.cni.cncf.io/v1
|
||||||
|
kind: NetworkAttachmentDefinition
|
||||||
|
metadata:
|
||||||
|
name: demo-net
|
||||||
|
namespace: demo-ns
|
||||||
|
spec:
|
||||||
|
config: |-
|
||||||
|
{
|
||||||
|
"cniVersion": "0.3.1",
|
||||||
|
"name": "demo-net",
|
||||||
|
"type": "ovn-k8s-cni-overlay",
|
||||||
|
"topology": "layer2",
|
||||||
|
"netAttachDefName": "demo-ns/demo-net"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Apply:
|
||||||
|
```bash
|
||||||
|
oc apply -f demo-net-nad.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2) Pod on the overlay
|
||||||
|
```yaml
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Pod
|
||||||
|
metadata:
|
||||||
|
name: demo-net
|
||||||
|
namespace: demo-ns
|
||||||
|
annotations:
|
||||||
|
k8s.v1.cni.cncf.io/networks: >-
|
||||||
|
[{"name":"demo-net","namespace":"demo-ns"}]
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: c
|
||||||
|
image: quay.io/curl/curl
|
||||||
|
command: ["sleep","infinity"]
|
||||||
|
```
|
||||||
|
|
||||||
|
### Static Pod IP on pure L2 (use only when NAD has no `subnets`)
|
||||||
|
```yaml
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
k8s.v1.cni.cncf.io/networks: '[
|
||||||
|
{
|
||||||
|
"name": "demo-net",
|
||||||
|
"namespace": "demo-ns",
|
||||||
|
"interface": "net1",
|
||||||
|
"ips": ["192.168.0.20/24"],
|
||||||
|
"mac": "02:03:04:05:06:07"
|
||||||
|
}
|
||||||
|
]'
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3) VM with pod network (masquerade) + overlay (static IP via cloud-init)
|
||||||
|
```yaml
|
||||||
|
apiVersion: kubevirt.io/v1
|
||||||
|
kind: VirtualMachine
|
||||||
|
metadata:
|
||||||
|
name: demo-vm
|
||||||
|
namespace: demo-ns
|
||||||
|
spec:
|
||||||
|
running: false
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
kubevirt.io/domain: demo-vm
|
||||||
|
spec:
|
||||||
|
domain:
|
||||||
|
devices:
|
||||||
|
disks:
|
||||||
|
- name: containerdisk
|
||||||
|
disk: {}
|
||||||
|
- name: cloudinitdisk
|
||||||
|
disk: {}
|
||||||
|
interfaces:
|
||||||
|
- name: podnet
|
||||||
|
masquerade: {}
|
||||||
|
model: virtio
|
||||||
|
- name: vxlan
|
||||||
|
bridge: {}
|
||||||
|
model: virtio
|
||||||
|
macAddress: "02:de:ad:be:ef:01"
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
memory: 2Gi
|
||||||
|
networks:
|
||||||
|
- name: podnet
|
||||||
|
pod: {}
|
||||||
|
- name: vxlan
|
||||||
|
multus:
|
||||||
|
networkName: demo-ns/demo-net
|
||||||
|
volumes:
|
||||||
|
- name: containerdisk
|
||||||
|
containerDisk:
|
||||||
|
image: quay.io/containerdisks/ubuntu:22.04
|
||||||
|
- name: cloudinitdisk
|
||||||
|
cloudInitNoCloud:
|
||||||
|
userData: |
|
||||||
|
#cloud-config
|
||||||
|
hostname: demo-vm
|
||||||
|
ssh_authorized_keys:
|
||||||
|
- ssh-rsa AAAA...replace-with-your-key
|
||||||
|
networkData: |
|
||||||
|
version: 2
|
||||||
|
ethernets:
|
||||||
|
vxlan0:
|
||||||
|
match:
|
||||||
|
macaddress: "02:de:ad:be:ef:01"
|
||||||
|
set-name: eth1
|
||||||
|
dhcp4: false
|
||||||
|
addresses:
|
||||||
|
- 192.168.0.11/24
|
||||||
|
# Optional default route via overlay router VM
|
||||||
|
routes:
|
||||||
|
- to: 0.0.0.0/0
|
||||||
|
via: 192.168.0.1
|
||||||
|
nameservers:
|
||||||
|
addresses: [1.1.1.1, 9.9.9.9]
|
||||||
|
```
|
||||||
|
|
||||||
|
Start:
|
||||||
|
```bash
|
||||||
|
oc apply -f demo-vm.yaml
|
||||||
|
virtctl start demo-vm -n demo-ns
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4) Optional DHCP on the overlay
|
||||||
|
- If no `subnets` or for VMs, run a DHCP server Pod on `demo-net` (e.g., dnsmasq)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6) Verify
|
||||||
|
```bash
|
||||||
|
# Pod overlay NIC
|
||||||
|
oc exec -n demo-ns pod/demo-net -- ip -c a
|
||||||
|
oc exec -n demo-ns pod/demo-net -- ping -c1 192.168.0.11
|
||||||
|
|
||||||
|
# VM overlay NIC
|
||||||
|
virtctl console demo-vm -n demo-ns
|
||||||
|
ip -c a
|
||||||
|
```
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue