Implementar o plug-in da interface de rede de contentores da Rede Virtual do Azure

O plug-in da interface de rede de contentores (CNI) da Rede Virtual do Azure é instalado numa máquina virtual do Azure e fornece capacidades de rede virtual aos contentores de Pods do Kubernetes e do Docker. Para saber mais sobre o plug-in, veja Ativar contentores para utilizar as capacidades da Rede Virtual do Azure. Além disso, o plug-in pode ser utilizado com o Azure Kubernetes Service (AKS) ao selecionar a opção Redes Avançadas, que coloca automaticamente os contentores do AKS numa rede virtual.

Implantar plug-in para o cluster Kubernetes do mecanismo de serviço de contêiner do Azure

O Mecanismo de Serviço de Contêiner do Azure implanta um cluster Kubernetes com um modelo do Azure Resource Manager. A configuração do cluster está especificada num ficheiro JSON transmitido à ferramenta ao gerar o modelo. Para saber mais sobre a lista completa de definições de cluster suportadas e as respetivas descrições, veja Motor do Microsoft Azure Container Service – Definição do Cluster. O plug-in é o plug-in de rede padrão para clusters criados usando o Mecanismo de Serviço de Contêiner do Azure. As seguintes definições de configuração de rede são importantes quando configurar o plug-in:

Definição Descrição
firstConsecutiveStaticIP O endereço IP alocado para o nó principal. Esta definição é obrigatória.
clusterSubnet em kubernetesConfig CIDR da sub-rede da rede virtual em que o cluster está implementado e a partir do qual os IP endereços são alocados a Pods
vnetSubnetId em masterProfile Especifica o ID de recurso do Azure Resource Manager da sub-rede onde o cluster será implementado
vnetCidr CIDR da rede virtual onde o cluster está implementado
Max-Pods em kubeletConfig Número máximo de Pods em cada máquina virtual do agente. Para o plug-in, a predefinição é 30. Pode especificar até 250

Configuração de exemplo

O exemplo de json que se segue destina-se a um cluster com as seguintes propriedades:

  • Um nó principal e dois nós de agente

  • Implantado em uma sub-rede chamada KubeClusterSubnet (10.0.0.0/20), com os nós principal e agente residindo nela.

{
  "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"
    }
  }
}

Implementar um plug-in para um cluster do Kubernetes

Conclua os seguintes passos para instalar o plug-in em todas as máquinas virtuais do Azure num cluster do Kubernetes:

  1. Transfira e instale o plug-in.

  2. Pré-aloque um pool de endereços IP de rede virtual em cada máquina virtual a partir da qual os endereços IP são atribuídos aos Pods. Todas as máquinas virtuais do Azure incluem um endereço IP privado primário de rede virtual em cada interface de rede. O conjunto de endereços IP para Pods é adicionado como endereços secundários (ipconfigs) na interface de rede da máquina virtual, através de uma das seguintes opções:

    Certifique-se de que adiciona endereços IP suficientes para todos os Pods que pretende colocar na máquina virtual.

  3. Selecione o plug-in para o fornecimento de redes do cluster ao transmitir a opção da linha de comandos –network-plugin=cni Kubelet durante a criação do cluster. O Kubernetes, por padrão, procura o plug-in e o arquivo de configuração nos diretórios onde eles já estão instalados.

  4. Se quiser que os Pods acedam à internet, adicione a seguinte regra iptables nas suas máquinas virtuais do Linux ao tráfego de Internet de origem NAT. No exemplo seguinte, o intervalo IP especificado é 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
    

    As regras de tráfego NAT que não se destina aos intervalos de IP especificados. A suposição é que todo o tráfego fora dos intervalos anteriores é tráfego de Internet. Pode optar por especificar os intervalos IP da rede virtual da máquina virtual, das redes virtuais em modo de peering e das redes no local.

    As máquinas virtuais do Windows extraem automaticamente o tráfego do NAT de origem com destino fora da sub-rede à qual pertence a máquina virtual. Não é possível especificar intervalos de IP personalizados.

Após a conclusão das etapas anteriores, os Pods criados nas máquinas virtuais do Agente Kubernetes recebem automaticamente endereços IP privados da rede virtual.

Implementar plug-in para contentores do Docker

  1. Transfira e instale o plug-in.

  2. Crie contentores do Docker com o seguinte comando:

    ./docker-run.sh \<container-name\> \<container-namespace\> \<image\>
    

Os contentores começam a receber automaticamente os endereços IP do conjunto alocado. Se você quiser balancear a carga do tráfego para os contêineres do Docker, eles devem ser colocados atrás de um balanceador de carga de software com uma sonda de balanceador de carga.

Ficheiro de configuração de rede CNI

O ficheiro de configuração de rede CNI é descrito no formato JSON. Por predefinição, está presente em /etc/cni/net.d para Linux e em c:\cni\netconf para Windows. O ficheiro especifica a configuração do plug-in e é diferente para Windows e Linux. O json que se segue é um ficheiro de configuração do Linux de exemplo, seguido de uma explicação para algumas das definições-chave. Não precisa de fazer quaisquer alterações ao ficheiro:

{
	   "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
	      }
	   ]
}

Explicação das definições

  • "cniVersion": Os plug-ins CNI da Rede Virtual do Azure suportam as versões 0.3.0 e 0.3.1 da especificação CNI.

  • "name": nome da rede. Esta propriedade pode ser definida para qualquer valor exclusivo.

  • "type": Nome do plug-in de rede. Definido como azure-vnet.

  • "modo": modo operacional. Este campo é opcional. O único modo suportado é "bridge". Para obter mais informações, veja modos operacionais.

  • "bridge": nome da ponte usada para conectar contêineres a uma rede virtual. Este campo é opcional. Se omitido, o plugin escolhe automaticamente um nome exclusivo, com base no índice da interface principal.

  • "ipam" - "type": Nome do plug-in do IPAM. Sempre definido como azure-vnet-ipam.

Transferir e instalar o plug-in

Transfira o plug-in a partir do GitHub. Transfira a versão mais recente para a plataforma que está a utilizar:

Copie o script de instalação para Linux ou Windows para o seu computador. Guarde o script no diretório scripts no seu computador e dê o nome install-cni-plugin.sh ao ficheiro para Linux, ou install-cni-plugin.ps1 para Windows.

Para instalar o plug-in, execute o script apropriado para sua plataforma, especificando a versão do plug-in que você está usando. Por exemplo, você pode especificar v1.4.20. Para a instalação do Linux, forneça uma versão apropriada do plug-in CNI, como v1.0.1:

scripts/install-cni-plugin.sh [azure-cni-plugin-version] [cni-plugin-version]
scripts\\ install-cni-plugin.ps1 [azure-cni-plugin-version]

O script instala o plug-in em /opt/cni/bin para Linux e em c:\cni\bin para Windows. O plug-in instalado inclui um ficheiro de configuração de rede simples que funciona após a instalação. Não tem de ser atualizado. Para saber mais sobre as definições no ficheiro, veja Ficheiro de configuração de rede CNI.