Calico

Calico ist eine Möglichkeit, einen Network Provider in Kubernetes bereitzustellen. Im Rahmen der Control Plane Installation erfolgte bereits die Installation von Calico als SDN (Software Defined Network) Lösung. Calico hat den Vorteil, dass es BGP4 unterstützt und damit eine Integration in bestehende Layer3 Netze recht einfach ist. Damit Calico richtig genutzt werden kann, sind weitere Schritte notwendig. Zunächst muss noch calicoctl installiert werden: https://docs.projectcalico.org/getting-started/clis/calicoctl/install.

Calico benötigt eine Anpassung der Datei calico.yaml, damit die Installation unter Kubic funktioniert. Zunächst wird die Config Datei mit curl -O -L https://docs.projectcalico.org/manifests/calico.yaml heruntergeladen und installiert. Mit der folgenden Anpassung funktioniert Calico dann auch mit Kubic:

t14s-kubic:~ $ diff -u calico.yaml.ORIG calico.yaml
--- calico.yaml.ORIG 2020-12-10 06:52:40.750123828 +0100
+++ calico.yaml 2020-12-10 06:55:48.937468639 +0100
@@ -3779,7 +3779,8 @@
- name: flexvol-driver-host
hostPath:
type: DirectoryOrCreate
- path: /usr/libexec/kubernetes/kubelet-plugins/volume/exec/nodeagent~uds
+ #path: /usr/libexec/kubernetes/kubelet-plugins/volume/exec/nodeagent~uds
+ path: /usr/local/libexec/kubernetes/kubelet-plugins/volume/exec/nodeagent~uds
---

apiVersion: v1

Nun kann Calico mit kubectl apply -f calico.yaml installiert werden. Ein erster Test kann mit ./calicoctl node status erfolgen. Es sollten nur die aktiven Nodes aufgelistet werden:

Calico process is running.

IPv4 BGP status
No IPv4 peers found.

IPv6 BGP status
No IPv6 peers found.

BGP Verbindungen sind noch keine zu sehen.

BGP

In der Datei calico-bgp.yaml wird die BGP-Konfiguration vorgenommen:

apiVersion: projectcalico.org/v3
kind: BGPPeer
metadata:
name: opnsense
spec:
peerIP: 10.67.254.1
asNumber: 64512

In diesem Fall dient als BGP Peer eine OPNsense Firewall mit FRR. Installiert wird das mit ./calicoctl create -f calico-bgp.yaml und die BGP Session sollte aktiv werden, sofern auf der Peer Seite konfiguriert. Sofern man ein fully meshed BGP betreiben möchte, dann sollten alle Kubernetes Nodes als Neighbors auf der Firewall konfiguriert werden. Bei großen Installationen wird das jedoch schnell unübersichtlich. In diesem Fall sollte man zu BGP Route Reflectors oder Confederations greifen.

Ein erster Test kann mit ./calicoctl node status erfolgen. Es sollten nur die aktiven Nodes aufgelistet werden:

Calico process is running.

IPv4 BGP status
+--------------+-------------------+-------+----------+-------------+
| PEER ADDRESS | PEER TYPE | STATE | SINCE | INFO |
+--------------+-------------------+-------+----------+-------------+
| 10.67.0.17 | node-to-node mesh | up | 08:31:23 | Established |
| 10.67.0.18 | node-to-node mesh | up | 08:33:53 | Established |
| 10.67.2.16 | node-to-node mesh | up | 08:36:27 | Established |
| 10.67.2.17 | node-to-node mesh | up | 08:36:34 | Established |
+--------------+-------------------+-------+----------+-------------+

IPv6 BGP status
No IPv6 peers found.

Für den Einstieg in Calico ist https://docs.projectcalico.org/about/ zu empfehlen.

Router

Wenn man nicht gerade einen Router zu Hand hat, dann kann man auch für Calico OPNsense zum Testen verwendet. Dazu muss das Paket FRR installiert werden, das u.A. auch einen BGP4 Router enthält. Ein OPNsense Cluster ist auch sehr gut dafür geeignet, als DHCP und DNS Server im Kubernetes Cluster zu dienen.