De Container Network Interface-invoegtoepassing (CNI) Azure Virtual Network implementeren
De Container Network Interface-invoegtoepassing (CNI) Azure Virtual Network wordt geïnstalleerd op een virtuele Azure-machine om mogelijkheden voor virtuele netwerken toe te voegen aan containers van Kubernetes Pods en Docker. Zie Enable containers to use Azure Virtual Network capabilities (Containers voorbereiden voor gebruik van de mogelijkheden van Azure Virtual Network) voor meer informatie over de invoegtoepassing. De invoegtoepassing kan bovendien worden gebruikt met Azure Kubernetes Service (AKS) door het kiezen van de optie Geavanceerd (bij Netwerkconfiguratie), waarmee AKS-containers automatisch in een virtueel netwerk worden geplaatst.
Invoegtoepassing implementeren voor Azure Container Service-Engine Kubernetes-cluster
De Azure Container Service-Engine implementeert een Kubernetes-cluster met een Azure Resource Manager-sjabloon. De configuratie van het cluster is opgenomen in een JSON-bestand dat aan het hulpprogramma wordt doorgegeven bij het genereren van de sjabloon. Zie Microsoft Azure Container Service Engine - Cluster Definition (Microsoft Azure Container Service Engine - Clusterdefinitie) voor de volledige lijst met ondersteunde clusterinstellingen en de bijbehorende beschrijvingen. De invoegtoepassing is de standaardnetwerkinvoegtoepassing voor clusters die zijn gemaakt met behulp van de Azure Container Service-Engine. De volgende instellingen voor de netwerkconfiguratie zijn belangrijk bij het configureren van de invoegtoepassing:
Instelling | Beschrijving |
---|---|
firstConsecutiveStaticIP | Het IP-adres dat is toegewezen aan het hoofdknooppunt. Deze instelling moet worden opgegeven. |
clusterSubnet onder kubernetesConfig | CIDR van het subnet van het virtuele netwerk waar het cluster wordt geïmplementeerd, en van waaruit IP-adressen worden toegewezen aan Pods |
vnetSubnetId onder masterProfile | De resource-id van Azure Resource Manager van het subnet waarnaar het cluster moet worden geïmplementeerd |
vnetCidr | CIDR van het virtuele netwerk waarnaar het cluster wordt geïmplementeerd |
max-Pods onder kubeletConfig | Maximum aantal Pods op elke virtuele machine van de agent. Voor de invoegtoepassing is de standaardwaarde 30. U kunt een waarde opgeven van maximaal 250 |
Voorbeeldconfiguratie
Het volgende json-voorbeeld is voor een cluster met deze eigenschappen:
Eén hoofdknooppunt en twee agentknooppunten
Geïmplementeerd in een subnet met de naam KubeClusterSubnet (10.0.0.0/20), waarbij zowel de hoofd- als de agentknooppunten zich daarin bevinden.
{
"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"
}
}
}
Invoegtoepassing implementeren voor een Kubernetes-cluster
Voltooi de volgende stappen om de invoegtoepassing te installeren op elke virtuele Azure-machine in een Kubernetes-cluster:
Wijs een IP-adresgroep van een virtueel netwerk toe op elke virtuele machine waaruit IP-adressen worden toegewezen aan Pods. Elke virtuele Azure-machine wordt geleverd met een primair privé-IP-adres voor een virtueel netwerk op elke netwerkinterface. De groep met IP-adressen voor Pods wordt toegevoegd als secundaire adressen (ipconfigs) op de netwerkinterface van de virtuele machine, met behulp van een van de volgende opties:
PowerShell: meerdere IP-adressen toewijzen met behulp van PowerShell
Portal: meerdere IP-adressen toewijzen met behulp van de Azure Portal
Azure Resource Manager-sjabloon: meerdere IP-adressen toewijzen met behulp van sjablonen
Zorg ervoor dat u voldoende IP-adressen toevoegt voor alle Pods die u verwacht te gebruiken op de virtuele machine.
Selecteer de invoegtoepassing voor het aanbieden van netwerkvoorzieningen voor uw cluster door aan Kubelet de opdrachtregeloptie
–network-plugin=cni
door te geven tijdens het maken van het cluster. Kubernetes zoekt standaard naar de invoegtoepassing en het configuratiebestand in de mappen waarin ze al zijn geïnstalleerd.Als u wilt dat uw Pods toegang hebben tot het internet, voegt u de volgende iptables-regel toe op uw virtuele Linux-machines om 'source NAT' toe te passen op internetverkeer. In het volgende voorbeeld is het opgegeven IP-adresbereik 10.0.0.0/8.
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
De regels voor NAT-verkeer dat niet is bestemd voor de opgegeven IP-bereiken. De aanname is dat al het verkeer buiten de vorige bereiken internetverkeer is. U kunt ervoor kiezen om de IP-bereiken van het virtuele netwerk van de virtuele machine op te geven, van virtuele netwerken met peering en van on-premises netwerken.
Virtuele Windows-machines passen automatisch 'source NAT' toe op verkeer met een bestemming buiten het subnet van de virtuele machine. Het is niet mogelijk om aangepaste IP-bereiken op te geven.
Na voltooiing van de vorige stappen worden pods die op de virtuele Machines van de Kubernetes Agent worden weergegeven, automatisch privé-IP-adressen uit het virtuele netwerk toegewezen.
Invoegtoepassing implementeren voor Docker-containers
Maak Docker-containers met de volgende opdracht:
./docker-run.sh \<container-name\> \<container-namespace\> \<image\>
Er worden vanuit de toegewezen groep automatisch IP-adressen toegewezen aan de containers. Als u verkeer naar de Docker-containers wilt verdelen, moeten ze achter een software load balancer worden geplaatst met een load balancer-test.
Netwerkconfiguratiebestand van CNI
Het netwerkconfiguratiebestand van CNI heeft de JSON-indeling. Het bestand bevindt zich standaard in /etc/cni/net.d
voor Linux en c:\cni\netconf
voor Windows. Het bestand bepaalt de configuratie van de invoegtoepassing en verschilt voor Windows en Linux. De json hieronder is een voorbeeld van een Linux-configuratiebestand, gevolgd door een uitleg van enkele van de belangrijkste instellingen. U hoeft het bestand niet te wijzigen:
{
"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
}
]
}
Uitleg van instellingen
"cniVersion": de CNI-invoegtoepassingen van Azure Virtual Network ondersteunen versies 0.3.0 en 0.3.1 van de CNI-specificatie.
"name": de naam van het netwerk. Deze eigenschap kan worden ingesteld op elke unieke waarde.
"type": naam van de netwerkinvoegtoepassing. Ingesteld op azure-vnet.
"mode": operationele modus. Dit veld is optioneel. De enige modus die wordt ondersteund is 'bridge'. Zie Operational modes (Operationele modi) voor meer informatie.
'brug': de naam van de brug die wordt gebruikt om containers te verbinden met een virtueel netwerk. Dit veld is optioneel. Als u dit weglaat, kiest de invoegtoepassing automatisch een unieke naam op basis van de hoofdinterface-index.
"ipam"" - type": naam van de IPAM-invoegtoepassing. Altijd ingesteld op azure-vnet-ipam.
De invoegtoepassing downloaden en installeren
Download de invoegtoepassing van GitHub. Download de nieuwste versie voor het platform dat u gebruikt:
Kopieer het installatiescript voor Linux of Windows naar uw computer. Sla het script op in een map scripts
op uw computer en geef het bestand de naam install-cni-plugin.sh
voor Linux of install-cni-plugin.ps1
voor Windows.
Als u de invoegtoepassing wilt installeren, voert u het juiste script voor uw platform uit, waarbij u de versie van de invoegtoepassing opgeeft die u gebruikt. U kunt bijvoorbeeld v1.4.20 opgeven. Geef voor de Linux-installatie een geschikte versie van de CNI-invoegtoepassing op, zoals v1.0.1:
scripts/install-cni-plugin.sh [azure-cni-plugin-version] [cni-plugin-version]
scripts\\ install-cni-plugin.ps1 [azure-cni-plugin-version]
Het script installeert de invoegtoepassing onder /opt/cni/bin
voor Linux en c:\cni\bin
voor Windows. De geïnstalleerde invoegtoepassing wordt geleverd met een eenvoudig netwerkconfiguratiebestand dat direct kan worden gebruikt na de installatie. Het bestand hoeft niet te worden bijgewerkt. Zie Netwerkconfiguratiebestand van CNI voor meer informatie over de instellingen in het bestand.