Citrix ADC Ingress Controller

Konfigurieren der Pod-zu-Pod-Kommunikation mit Calico

Die Konfiguration eines Netzwerks in Kubernetes ist eine Herausforderung. Sie müssen mit vielen Knoten und Pods in einem Clustersystem umgehen. Es gibt vier Probleme, die Sie bei der Konfiguration des Netzwerks lösen müssen:

  • Container-zu-Container-Kommunikation (die gemeinsam einen Dienst bereitstellt)
  • Pod-zu-Pod-Kommunikation
  • Pod zur Service-Kommunikation
  • Externe Kommunikation

Pod-zu-Pod-Kommunikation

Standardmäßig erstellt Docker eine virtuelle Brücke, die docker0 auf dem Host-Computer aufgerufen wird, und weist ihr einen privaten Netzwerkbereich zu. Für jeden erstellten Container ist ein virtuelles Ethernet-Gerät an diese Brücke angeschlossen. Das virtuelle Ethernet-Gerät wird dann eth0 innerhalb des Containers mit einer IP aus dem Netzwerkbereich zugeordnet. Dieser Prozess findet für jeden Host statt, auf dem Docker ausgeführt wird. Es gibt keine Koordination zwischen diesen Hosts, daher könnten die Netzwerkbereiche kollidieren.

Aus diesem Grund können Container nur mit Containern kommunizieren, die mit derselben virtuellen Brücke verbunden sind. Um mit anderen Containern auf anderen Hosts zu kommunizieren, müssen sie sich auf Port-Mapping verlassen. Das heißt, Sie müssen jedem Container einen Port auf dem Host-Computer zuweisen und dann den gesamten Datenverkehr auf diesem Port an diesen Container weiterleiten.

Da die lokale IP-Adresse der Anwendung in die Host-IP-Adresse und den Port auf dem Host-Computer übersetzt wird, geht Kubernetes davon aus, dass alle Knoten ohne NAT miteinander kommunizieren können. Es wird auch davon ausgegangen, dass die IP-Adresse, die ein Container für sich selbst sieht, dieselbe IP-Adresse ist, die die anderen Container für den Container sehen. Mit diesem Ansatz können Sie auch Anwendungen einfach von virtuellen Maschinen zu Containern Port.

Calico ist eine der vielen verschiedenen Netzwerkoptionen, die diese Funktionen für Kubernetes bieten.

Kaliko

Calico wurde entwickelt, um Cloud-Netzwerke zu vereinfachen, zu skalieren und zu sichern. Das Open Source-Framework ermöglicht Kubernetes-Netzwerk- und Netzwerkrichtlinien für Cluster in der gesamten Cloud. Innerhalb des Kubernetes-Ökosystems entwickelt sich Calico zu einem der am häufigsten verwendeten Netzwerk-Frameworks oder Plug-Ins, wobei viele Unternehmen es in großem Maßstab einsetzen.

Calico verwendet eine reine IP-Netzwerkstruktur, um Kubernetes-Hochleistungsnetzwerke bereitzustellen, und seine Richtlinien-Engine setzt die Absicht der Entwickler für die Verwaltung von Netzwerkrichtlinien auf hoher Ebene durch. Calico bietet Layer-3-Netzwerkfunktionen und ordnet jedem Knoten einen virtuellen Router zu. Es ermöglicht Host-zu-Host- und Pod-zu-Pod-Netzwerke. Calico ermöglicht die Einrichtung von Zonengrenzen durch BGP oder Kapselung durch IP-on-IP- oder VXLAN-Methoden.

Integration zwischen Kubernetes und Calico

Calico lässt sich über ein CNI-Plug-In in Kubernetes integrieren, das auf einer vollständig verteilten Layer-3-Architektur basiert. Daher skaliert es reibungslos von einem einzelnen Laptop bis hin zu großen Unternehmen. Es basiert auf einer IP-Ebene und es ist relativ einfach, mit vorhandenen Tools zu debuggen.

Konfigurieren Sie das Netzwerk mit Calico

Rufen Sie zunächst einen Kubernetes-Cluster mit Calico mithilfe der folgenden Befehle auf:

> kubeadm init --pod-network-cidr=192.168.0.0/16
> export KUBECONFIG=/etc/kubernetes/admin.conf
> kubectl apply -f calico.yaml

Ein Master-Knoten wird mit Calico als CNI erstellt. Nachdem der Master-Knoten in Betrieb ist, können Sie die anderen Knoten mit dem join Befehl mit dem Master verbinden.

Calico-Prozesse, die Teil des Kubernetes-Masterknotens sind, sind:

  • Kaliko usw.

    kube-system calico-etcd-j4rwc 1/1 Wird ausgeführt

  • Kaliko-Controller

    kube-system calico-Kube-Controller-679568f47c-vz69g 1/1 läuft

  • Kaliko-Knoten

    kube-system calico-node-ct6c9 2/2 Wird ausgeführt

Hinweis:

Wenn Sie einen Knoten mit dem Kubernetes-Cluster verbinden, wird ein neuer Calico-Knoten auf dem Kubernetes-Knoten initiiert.

Konfigurieren Sie den BGP-Peer mit Ingress Citrix ADC

Immer wenn Sie eine Anwendung bereitstellen, nachdem Sie das Calico-Netzwerk im Cluster eingerichtet haben, weist Kubernetes dem mit der Anwendung verknüpften Dienst eine IP-Adresse aus dem IP-Adresspool von Calico zu.

DasBorder Gateway Protocol (BGP) verwendet die autonome Systemnummer (AS-Nummer), um die Remote-Knoten zu identifizieren. Die AS-Nummer ist eine spezielle Nummer, die von IANA zugewiesen wird und hauptsächlich mit BGP verwendet wird, um ein Netzwerk unter einer einzigen Netzwerkverwaltung zu identifizieren, die eine eindeutige Routing-Richtlinie verwendet

Konfigurieren Sie BGP auf Kubernetes mit Ingress Citrix ADC

Mithilfe einer YAML-Datei können Sie die BGP-Konfiguration eines Remote-Knotens mit dem kubectl create Befehl anwenden. In der YAML-Datei müssen Sie die Peer-IP-Adresse und die AS-Nummer hinzufügen. Die Peer-IP-Adresse ist die Ingress Citrix ADC IP-Adresse und die AS-Nummer ist die AS-Nummer, die im Ingress Citrix ADC verwendet wird.

Besorgen Sie sich die AS-Nummer des Clusters

Mit dem calicoctl Befehl können Sie die AS-Nummer abrufen, die von Calico BGP im Kubernetes-Cluster verwendet wird, wie in der folgenden Abbildung dargestellt:

AS-Nummer abrufen

Konfigurieren des globalen BGP-Peers

Mit dem calicoctl Dienstprogramm können Sie Calico-Knoten mit globalen BGP-Lautsprechern verbinden. Diese Art von Peers wird als globale Peers bezeichnet.

Erstellen Sie eine YAML-Definitionsdatei bgp.yml mit dem Namen mit der folgenden Definition:


apiVersion: projectcalico.org/v3  # This is the version of Calico
kind: BGPPeer  # BGPPeer specifies that its Global peering.
metadata:
    name: bgppeer-global-3040  # The name of the configuration
spec:
    peerIP: 10.102.33.208  # IP address of the Ingress Citrix ADC
    asNumber: 500  # AS number configured on the Ingress Citrix ADC
<!--NeedCopy-->

Stellen Sie die Definitionsdatei mit dem folgenden Befehl bereit:

> kubectl create -f bgp.yml

Fügen Sie die BGP-Konfigurationen auf dem Ingress Citrix ADC hinzu

Führen Sie folgende Schritte aus:

  1. Melden Sie sich bei der Citrix ADC-Befehlszeilenschnittstelle an.

  2. Aktivieren Sie die BGP-Funktion mit dem folgenden Befehl:

    > en feature bgp
      Done
    
  3. Geben Sie ein vtysh und drücken Sie die EIN

    > vtysh
    ns#
    
  4. Wechseln Sie mit dem conf t Befehl zum Konfigurationsterminal:

    ns#conf t
    Enter configuration commands, one per line. End with CNTL/Z.
    ns(config)#
    
  5. Fügen Sie die BGP-Route mit der AS-Nummer zu Demonstrationszwecken als 500 hinzu. Sie können eine beliebige Zahl als AS-Nummer verwenden.

    ns(config)# router bgp 500
    ns(config-router)#
    
  6. Fügen Sie Nachbarn mit dem folgenden Befehl hinzu:

    ns(config-router)# Neighbor 10.102.33.198 remote-as 64512
    ns(config-router)# Neighbor 10.102.22.202 remote-as 64512
    
  7. Prüfen Sie die laufende Konfiguration mit dem folgenden Befehl:

    ns(config-router)#show running-config
    !
    log syslog
    log record-priority
    !
    ns route-install bgp
    !
    interface lo0
     ip adress 127.0.0.1/8
     ipv6 address fe80: :1/64
     ipv6 address : :1/128
    !
    interface vlan0
     ip address 10.102.33.208/24
     ipv6 address fe80::2cf6:beff:fe94:9f63/64
    !
    router bgp 500
     max-paths ebgp 8
     max-paths ibgp 8
     neighbor 10.102.33.198 remote-as 64512
     neighbor 10.102.33.202 remote-as 64512
    !
    end
    ns(config-router)# In der Stichprobe ist die AS-Nummer von Calico 64512. Sie können diese Nummer gemäß Ihren Anforderungen ändern.
    
  8. Installieren Sie die BGP-Routen zur Citrix ADC-Routingtabelle mit dem folgenden Befehl:

    ns(config)# ns route-install bgp
    ns(config)# 
    exit
    ns#exit
     Done
    
  9. Überprüfen Sie die Route und fügen Sie sie mit dem folgenden Befehl zur Routingtabelle hinzu:

    Sh-Route

Sobald die Route installiert ist, kann der Citrix ADC mit Diensten kommunizieren, die im Kubernetes-Cluster vorhanden sind:

Zusammenfassung

Problembehandlung

Sie können die BGP-Konfigurationen auf dem Masterknoten im Kubernetes-Cluster mithilfe des calicoctl Skripts überprüfen.

Peer-IP-Adressen und AS-Nummer-Konfigurationen anzeigen

Sie können die Peer-IP-Adresse und die Konfiguration der AS-Nummer mit dem folgenden Befehl anzeigen:

>./calicoctl.1 get bgpPeer
NAME                    PEERIP          NODE        ASN
bgppeer-global-3040  10.102.33.208    (global)      500

Den BGP-Knotenstatus anzeigen

Sie können den Status eines BGP-Knotens mit dem folgenden Befehl anzeigen:

>calicoctl node status
IPV4 BGP status
+---------------+-----------+-------+----------+-------------+
| PEER ADDRESS | PEER TYPE | STATE | SINCE | INFO |
+---------------+-----------+-------+----------+-------------+
| 10.102.33.208 | global | up | 16:38:14 | Established |
+---------------+-----------+-------+----------+-------------+
Konfigurieren der Pod-zu-Pod-Kommunikation mit Calico