Skip to content

Instantly share code, notes, and snippets.

@LionelJouin
Last active September 23, 2024 11:52
Show Gist options
  • Save LionelJouin/3cf494db1db592fb01b16ff16b6493c8 to your computer and use it in GitHub Desktop.
Save LionelJouin/3cf494db1db592fb01b16ff16b6493c8 to your computer and use it in GitHub Desktop.
Meridio: Multiple attractor with same VLAN ID using multus

Meridio: Multiple attractor with same VLAN ID using multus

Requirements

  • Multus with CNI plugins >= v1.3.0
  • Meridio support for multiple network-attachments (Nordix/Meridio#421)

How it works

Bridge-VLAN drawio

Example

NetworkAttachmentDefinition

cat <<EOF | kubectl apply -f -
---
apiVersion: "k8s.cni.cncf.io/v1"
kind: NetworkAttachmentDefinition
metadata:
  name: macvlan-eth0
  namespace: default
spec:
  config: '{
        "cniVersion":"0.4.0",
        "type":"macvlan",
        "name":"macvlan-eth0",
        "master": "eth0",
        "mode": "bridge",
        "linkInContainer": false
    }'
EOF
cat <<EOF | kubectl apply -f -
---
apiVersion: "k8s.cni.cncf.io/v1"
kind: NetworkAttachmentDefinition
metadata:
  name: vlan-100
  namespace: default
spec:
  config: '{
        "cniVersion":"0.4.0",
        "type":"vlan",
        "name":"vlan-100",
        "master": "macvlan",
        "vlanId": 100,
        "linkInContainer": true,
        "ipam": {
            "log_file": "/tmp/whereabouts.log",
            "type": "whereabouts",
            "ipRanges": [
                {
                    "range": "169.254.100.0/24",
                    "exclude": [
                        "169.254.100.150/32"
                    ]
                }, {
                    "range": "100:100::/64",
                    "exclude": [
                        "100:100::150/128"
                    ]
                }
            ]
        }
    }'
EOF

Meridio CRs

cat <<EOF | kubectl apply -f -
---
apiVersion: meridio.nordix.org/v1
kind: Trench
metadata:
  name: trench-a
  namespace: red
spec:
  ip-family: dualstack
---
apiVersion: meridio.nordix.org/v1
kind: Attractor
metadata:
  name: attractor-a-1
  namespace: red
  labels:
    trench: trench-a
spec:
  replicas: 2
  composites:
  - conduit-a-1
  gateways:
  - gateway-v4-a-1
  - gateway-v6-a-1
  vips:
  - vip-a-1-v4
  - vip-a-1-v6
  interface:
    name: ext-vlan0
    type: network-attachment
    network-attachments:
      - name: macvlan-eth0
        namespace: default
        interface: "macvlan"
      - name: vlan-100
        namespace: default
---
apiVersion: meridio.nordix.org/v1
kind: Gateway
metadata:
  name: gateway-v4-a-1
  namespace: red
  labels:
    trench: trench-a
spec:
  address: 169.254.100.150
  bgp:
    local-asn: 8103
    remote-asn: 4248829953
    hold-time: 24s
    local-port: 10179
    remote-port: 10179
    bfd:
      switch: true
      min-tx: 300ms
      min-rx: 300ms
      multiplier: 5
---
apiVersion: meridio.nordix.org/v1
kind: Gateway
metadata:
  name: gateway-v6-a-1
  namespace: red
  labels:
    trench: trench-a
spec:
  address: 100:100::150
  bgp:
    local-asn: 8103
    remote-asn: 4248829953
    hold-time: 24s
    local-port: 10179
    remote-port: 10179
    bfd:
      switch: true
      min-tx: 300ms
      min-rx: 300ms
      multiplier: 5
---
apiVersion: meridio.nordix.org/v1
kind: Vip
metadata:
  name: vip-a-1-v4
  namespace: red
  labels:
    trench: trench-a
spec:
  address: "20.0.0.1/32"
---
apiVersion: meridio.nordix.org/v1
kind: Vip
metadata:
  name: vip-a-1-v6
  namespace: red
  labels:
    trench: trench-a
spec:
  address: "2000::1/128"
---
apiVersion: meridio.nordix.org/v1
kind: Conduit
metadata:
  name: conduit-a-1
  namespace: red
  labels:
    trench: trench-a
spec:
  type: stateless-lb
---
apiVersion: meridio.nordix.org/v1
kind: Stream
metadata:
  name: stream-a-i
  namespace: red
  labels:
    trench: trench-a
spec:
  conduit: conduit-a-1
---
apiVersion: meridio.nordix.org/v1
kind: Flow
metadata:
  name: flow-a-z-tcp
  namespace: red
  labels:
    trench: trench-a
spec:
  stream: stream-a-i
  priority: 1
  vips:
  - vip-a-1-v4
  - vip-a-1-v6
  source-subnets:
  - 0.0.0.0/0
  - 0:0:0:0:0:0:0:0/0
  source-ports:
  - any
  destination-ports:
  - "4000"
  protocols:
  - tcp
---
apiVersion: meridio.nordix.org/v1
kind: Attractor
metadata:
  name: attractor-a-2
  namespace: red
  labels:
    trench: trench-a
spec:
  replicas: 2
  composites:
  - conduit-a-2
  gateways:
  - gateway-v4-a-2
  - gateway-v6-a-2
  vips:
  - vip-a-3-v4
  - vip-a-3-v6
  interface:
    name: ext-vlan0
    type: network-attachment
    network-attachments:
      - name: macvlan-eth0
        namespace: default
        interface: "macvlan"
      - name: vlan-100
        namespace: default
---
apiVersion: meridio.nordix.org/v1
kind: Gateway
metadata:
  name: gateway-v4-a-2
  namespace: red
  labels:
    trench: trench-a
spec:
  address: 169.254.100.150
  bgp:
    local-asn: 8103
    remote-asn: 4248829953
    hold-time: 24s
    local-port: 10179
    remote-port: 10179
    bfd:
      switch: true
      min-tx: 300ms
      min-rx: 300ms
      multiplier: 5
---
apiVersion: meridio.nordix.org/v1
kind: Gateway
metadata:
  name: gateway-v6-a-2
  namespace: red
  labels:
    trench: trench-a
spec:
  address: 100:100::150
  bgp:
    local-asn: 8103
    remote-asn: 4248829953
    hold-time: 24s
    local-port: 10179
    remote-port: 10179
    bfd:
      switch: true
      min-tx: 300ms
      min-rx: 300ms
      multiplier: 5
---
apiVersion: meridio.nordix.org/v1
kind: Vip
metadata:
  name: vip-a-3-v4
  namespace: red
  labels:
    trench: trench-a
spec:
  address: "40.0.0.1/32"
---
apiVersion: meridio.nordix.org/v1
kind: Vip
metadata:
  name: vip-a-3-v6
  namespace: red
  labels:
    trench: trench-a
spec:
  address: "4000::1/128"
---
apiVersion: meridio.nordix.org/v1
kind: Conduit
metadata:
  name: conduit-a-2
  namespace: red
  labels:
    trench: trench-a
spec:
  type: stateless-lb
---
apiVersion: meridio.nordix.org/v1
kind: Stream
metadata:
  name: stream-a-iv
  namespace: red
  labels:
    trench: trench-a
spec:
  conduit: conduit-a-2
---
apiVersion: meridio.nordix.org/v1
kind: Flow
metadata:
  name: flow-a-w-tcp
  namespace: red
  labels:
    trench: trench-a
spec:
  stream: stream-a-iv
  priority: 1
  vips:
  - vip-a-3-v4
  - vip-a-3-v6
  source-subnets:
  - 0.0.0.0/0
  - 0:0:0:0:0:0:0:0/0
  source-ports:
  - any
  destination-ports:
  - "4000"
  protocols:
  - tcp
EOF
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment