Bereitstellen des Container Network Interface-Plug-Ins von Azure Virtual Network
Das CNI-Plug-In (Container Network Interface) von Azure Virtual Network wird auf einem virtuellen Azure-Computer installiert und bietet so Virtual Network-Funktionen für Kubernetes-Pods und Docker-Container. Weitere Informationen zu dem Plug-In finden Sie unter Verwenden von Azure Virtual Network-Funktionen für Container. Zudem kann das Plug-In mit Azure Kubernetes Service (AKS) verwendet werden, und zwar durch Auswählen der Option Erweiterte Funktionen für Netzwerkbetrieb und Skalierung, über die AKS-Container automatisch in einem virtuellen Netzwerk platziert werden.
Bereitstellen des Plug-Ins für Azure Container Service-Engine Kubernetes-Cluster
Die Azure Container Service-Engine stellt einen Kubernetes-Cluster mit einer Azure Resource Manager-Vorlage bereit. Die Clusterkonfiguration wird in einer JSON-Datei angegeben, die beim Generieren der Vorlage an das Tool übergeben wird. Weitere Informationen zur gesamten Liste der unterstützten Clustereinstellungen und deren Beschreibungen finden Sie in der Clusterdefinition für die Azure Container Service-Engine (AKS). Das Plug-In ist das standardmäßige Netzwerk-Plug-In für Cluster, die mithilfe der Azure Container Service-Engine erstellt werden. Folgende Netzwerkkonfigurationseinstellungen sind beim Konfigurieren des Plug-Ins zu beachten:
Einstellung | BESCHREIBUNG |
---|---|
firstConsecutiveStaticIP | Die IP-Adresse, die dem Hauptknoten zugeordnet ist. Diese Einstellung ist obligatorisch. |
clusterSubnet unter kubernetesConfig | CIDR des Subnetzes des virtuellen Netzwerks, in dem der Cluster bereitgestellt wird und von dem IP-Adressen zu Pods zugeordnet werden. |
vnetSubnetId unter masterProfile | Gibt die ID der Azure Resource Manager-Ressource des Subnetzes an, in dem der Cluster bereitgestellt werden soll. |
vnetCidr | CIDR des virtuellen Netzwerks, in dem der Cluster bereitgestellt wird. |
max-Pods unter kubeletConfig | Maximale Anzahl der Pods auf jedem virtuellen Agent-Computer. Für das Plug-In ist 30 als Standardwert festgelegt. Sie können bis zu 250 angeben. |
Beispielkonfiguration
Das folgende JSON-Beispiel gilt für einen Cluster mit den folgenden Eigenschaften:
Ein Hauptknoten und zwei Agent-Knoten
Wird im Subnetz KubeClusterSubnet (10.0.0.0/20) bereitgestellt, in dem sich sowohl der Haupt- als auch die Agent-Knoten befinden.
{
"apiVersion": "vlabs",
"properties": {
"orchestratorProfile": {
"orchestratorType": "Kubernetes",
"kubernetesConfig": {
"clusterSubnet": "10.0.0.0/20" --> Subnet allocated for the cluster
}
},
"masterProfile": {
"count": 1,
"dnsPrefix": "ACSKubeMaster",
"vmSize": "Standard_A2",
"vnetSubnetId": "/subscriptions/<subscription ID>/resourceGroups/<Resource Group Name>/providers/Microsoft.Network/virtualNetworks/<Vnet Name>/subnets/KubeClusterSubnet",
"firstConsecutiveStaticIP": "10.0.1.50", --> IP address allocated to the Master node
"vnetCidr": "10.0.0.0/16" --> Virtual network address space
},
"agentPoolProfiles": [
{
"name": "k8sagentpoo1",
"count": 2,
"vmSize": "Standard_A2_v2",
"vnetSubnetId": "/subscriptions/<subscription ID>/resourceGroups/<Resource Group Name>/providers/Microsoft.Network/virtualNetworks/<VNet Name>/subnets/KubeClusterSubnet",
"availabilityProfile": "AvailabilitySet"
}
],
"linuxProfile": {
"adminUsername": "KubeServerAdmin",
"ssh": {
"publicKeys": [
{…}
]
}
},
"servicePrincipalProfile": {
"clientId": "00001111-aaaa-2222-bbbb-3333cccc4444",
"secret": "azure123"
}
}
}
Bereitstellen des Plug-Ins für einen Kubernetes-Cluster
Führen Sie die folgenden Schritte aus, um das Plug-In auf allen virtuellen Azure-Computern in einem Kubernetes-Cluster zu installieren:
Ordnen Sie auf jedem virtuellen Computer, über den IP-Adressen zu Pods zugewiesen werden, vorab einen IP-Adressenpool des virtuellen Netzwerks zu. Alle virtuellen Azure-Computer umfassen eine private IP-Adresse des primären virtuellen Netzwerks für jede Netzwerkschnittstelle. Der Pool von IP-Adressen für Pods wird mithilfe einer der folgenden Optionen als sekundäre Adressen (ipconfigs) für die Netzwerkschnittstelle des virtuellen Computers hinzugefügt:
CLI:Zuweisen von mehreren IP-Adressen über die Azure-Befehlszeilenschnittstelle
PowerShell:Zuweisen von mehreren IP-Adressen mithilfe von PowerShell
Portal:Zuweisen von mehreren IP-Adressen über das Azure-Portal
Azure Resource Manager-Vorlage:Zuweisen von mehreren IP-Adressen mithilfe von Vorlagen
Stellen Sie sicher, dass Sie genügend IP-Adressen für alle Pods hinzufügen, die auf dem virtuellen Computer angezeigt werden sollen.
Wählen Sie das Plug-In für die Bereitstellung von Netzwerkfunktionen für den Cluster aus, indem Sie bei der Clustererstellung in Kubelet die Befehlszeilenoption
–network-plugin=cni
übergeben. In Kubernetes werden das Plug-In und die Konfigurationsdatei standardmäßig in den Verzeichnissen gesucht, in denen sie bereits installiert sind.Wenn die Pods auf das Internet zugreifen können sollen, fügen Sie auf Ihren virtuellen Linux-Computern die folgende iptables-Regel hinzu, sodass eine Netzwerkadressenübersetzung für die Quelle des Internetdatenverkehrs durchgeführt wird. Im folgenden Beispiel wurde als IP-Adressbereich 10.0.0.0/8 angegeben.
iptables -t nat -A POSTROUTING -m iprange ! --dst-range 168.63.129.16 -m addrtype ! --dst-type local ! -d 10.0.0.0/8 -j MASQUERADE
Mit den Regeln wird für Datenverkehr, der nicht für die angegebenen IP-Adressbereiche bestimmt ist, eine Netzwerkadressenübersetzung durchgeführt. Es wird davon ausgegangen, dass es sich bei dem gesamten Datenverkehr außerhalb der vorherigen Bereiche um Internetdatenverkehr handelt. Sie können die IP-Adressbereiche des virtuellen Netzwerks der virtuellen Computer, der mittels Peering verknüpften virtuellen Netzwerke oder der lokalen Netzwerke angeben.
Virtuelle Windows-Computer führen automatisch eine Netzwerkadressenübersetzung für die Quelle des Datenverkehrs mit einem Ziel außerhalb des Subnetzes, in dem sich der virtuelle Computer befindet, durch. Es ist nicht möglich, benutzerdefinierte IP-Adressbereiche anzugeben.
Nach Abschluss der vorherigen Schritte werden den Pods, die auf den virtuellen Kubernetes-Agent-Computern eingerichtet wurden, automatisch private IP-Adressen aus dem virtuellen Netzwerk zugewiesen.
Bereitstellen des Plug-Ins für Docker-Container
Erstellen Sie mit dem folgenden Befehl Docker-Container:
./docker-run.sh \<container-name\> \<container-namespace\> \<image\>
Die Container erhalten automatisch IP-Adressen aus dem zugeordneten Pool. Wenn Sie einen Lastenausgleich des Datenverkehrs an die Docker-Container ausführen möchten, müssen sie hinter einem Software-Lastenausgleichsmodul mit einem Lastenausgleichstest platziert werden.
CNI-Netzwerkkonfigurationsdatei
Die CNI-Netzwerkkonfigurationsdatei wird im JSON-Format beschrieben. Sie ist unter Linux standardmäßig in /etc/cni/net.d
und für Windows in c:\cni\netconf
vorhanden. Die Datei gibt die Konfiguration des Plug-Ins an und unterscheidet sich für Windows und Linux. Der folgende JSON-Code ist ein Beispiel für eine Linux-Konfigurationsdatei. Darauf folgt eine Erläuterung einiger wichtiger Einstellungen. An dieser Datei sind keine Änderungen erforderlich.
{
"cniVersion":"0.3.0",
"name":"azure",
"plugins":[
{
"type":"azure-vnet",
"mode":"bridge",
"bridge":"azure0",
"ipam":{
"type":"azure-vnet-ipam"
}
},
{
"type":"portmap",
"capabilities":{
"portMappings":true
},
"snat":true
}
]
}
Erläuterung der Einstellungen
cniVersion: Die CNI-Plug-Ins von Azure Virtual Network unterstützen Version 0.3.0 und 0.3.1 der CNI-Spezifikation.
name: Der Name des Netzwerks. Diese Eigenschaft kann auf einen beliebigen eindeutigen Wert festgelegt werden.
type: Der Name des Netzwerk-Plug-Ins. Legen Sie diese Eigenschaft auf azure-vnet fest.
mode: Der Betriebsmodus. Dieses Feld ist optional. Es wird lediglich der Modus „bridge“ unterstützt. Weitere Informationen finden Sie unter Operational Modes (Betriebsmodi).
bridge: Der Name der Brücke, über die Container mit einem virtuellen Netzwerk verbunden werden. Dieses Feld ist optional. Wenn kein Wert angegeben ist, wählt das Plug-In basierend auf dem Index der Hauptschnittstelle automatisch einen eindeutigen Namen aus.
ipam - type: Der Name des IPAM-Plug-Ins. Legen Sie diese Eigenschaft immer auf azure-vnet-ipam fest.
Herunterladen und Installieren des Plug-Ins
Laden Sie das Plug-In von GitHub herunter. Laden Sie die neueste Version für die verwendete Plattform herunter:
Kopieren Sie das Installationsskript für Linux oder Windows auf Ihren Computer. Speichern Sie das Skript in einem Verzeichnis mit dem Namen scripts
auf dem Computer, und geben Sie der Datei unter Linux den Namen install-cni-plugin.sh
und unter Windows den Namen install-cni-plugin.ps1
.
Führen Sie zum Installieren des Plug-Ins das Skript für Ihre Plattform aus, und geben Sie dabei die Version des verwendeten Plug-Ins an. Sie können beispielsweise v1.4.20 angeben. Geben Sie für die Linux-Installation eine geeignete CNI-Plug-In-Version an, z. B. v1.0.1:
scripts/install-cni-plugin.sh [azure-cni-plugin-version] [cni-plugin-version]
scripts\\ install-cni-plugin.ps1 [azure-cni-plugin-version]
Das Skript installiert das Plug-In unter /opt/cni/bin
(Linux) oder c:\cni\bin
(Windows). Das installierte Plug-In umfasst eine einfache Netzwerkkonfigurationsdatei, die nach der Installation verwendet werden kann. Sie muss nicht aktualisiert werden. Weitere Informationen zu den Einstellungen in der Datei finden Sie unter CNI-Netzwerkkonfigurationsdatei.