Implementar um cluster do Kubernetes numa rede virtual personalizada no Azure Stack Hub

Pode implementar um cluster do Kubernetes com o motor Azure Kubernetes Service (AKS) numa rede virtual personalizada. Este artigo analisa a localização das informações de que precisa na sua rede virtual. Pode encontrar passos para calcular os endereços IP utilizados pelo cluster, definir os vales no Modelo de API e definir a tabela de rotas e o grupo de segurança de rede.

O cluster do Kubernetes no Azure Stack Hub com o motor do AKS utiliza o plug-in de rede kubenet. O motor AKS no Azure Stack Hub também suporta o plug-in de rede do Azure CNI.

Restrições ao criar uma rede virtual personalizada

  • A VNET personalizada tem de estar na mesma subscrição que todos os outros componentes do cluster do Kubernetes.
  • O conjunto de nós do plano de controlo e o conjunto de nós do agente têm de estar na mesma rede virtual. Pode implementar os nós em sub-redes diferentes na mesma rede virtual.
  • A sub-rede do cluster do Kubernetes tem de utilizar um intervalo de IP dentro do espaço do intervalo de IP da rede virtual personalizado. Veja Obter o bloco de endereços IP.
  • Considere que o tamanho recomendado das sub-redes do nó depende do tipo de plug-in de rede que está a ser utilizado. Como orientação geral, o CNI do Azure requer um maior número de endereços IP para a sub-rede que suporta os conjuntos de nós do agente do que o kubenet. Veja os exemplos do kubenet e do Azure CNI abaixo.
  • O 169.254.0.0/16 espaço de endereços não pode ser utilizado para VNETs personalizadas para clusters do Kubernetes.

Criar uma rede virtual personalizada

Tem de ter uma rede virtual personalizada na instância do Azure Stack Hub. Para obter mais informações, veja Início Rápido: Criar uma rede virtual com o portal do Azure.

Crie uma nova sub-rede na sua rede virtual. Terá de obter o ID do Recurso e o intervalo de endereços IP da sub-rede. Irá utilizar o ID de Recurso e o intervalo no modelo de API quando implementar o cluster.

  1. Abra o portal de utilizador do Azure Stack Hub na instância do Azure Stack Hub.

  2. Selecione Todos os recursos.

  3. Introduza o nome da sua rede virtual na caixa de pesquisa.

  4. Selecione Sub-redes>+ Sub-redes para adicionar uma sub-rede.

  5. Adicione um Nome e um Intervalo de endereços com a notação CIDR. Selecione OK.

  6. Selecione Propriedades no painel Redes virtuais . Copie o ID do Recurso e, em seguida, adicione /subnets/<nameofyoursubnect>. Irá utilizar este valor como valor para a vnetSubnetId chave no modelo de API do cluster. O ID do Recurso da sub-rede utiliza o seguinte formato:
    /subscriptions/SUB_ID/resourceGroups/RG_NAME/providers/Microsoft.Network/virtualNetworks/VNET_NAME/subnets/SUBNET_NAME

    ID de Recurso da rede virtual

  7. Selecione Sub-redes no painel Redes virtuais . Selecione o nome da sub-rede, por exemplo control-plane-sn.

    Não associe a sub-rede a um grupo de segurança de rede (NSG).

    bloco CIDR da rede virtual

  8. No painel da sub-rede, anote o intervalo de endereços (Bloco CIDR) de cada sub-rede.

Considerações para selecionar um espaço de endereços

Quando cria uma rede virtual personalizada, especifica o espaço de endereços IP da sua rede e um intervalo de endereços IP para cada sub-rede. Considere os seguintes fatores quando escolher os espaços de endereços e intervalos a utilizar no cluster do Kubernetes:

  • A sobreposição de espaços de endereços pode resultar em conflitos de endereços IP ou erros de comunicação. Para reduzir o risco de sobreposição de endereços IP, escolha um espaço de endereços exclusivo para a nova rede virtual.
  • Os espaços de endereços nos 10/8intervalos , 172.16/12e 192.168/16 são frequentemente utilizados para redes privadas e podem ser utilizados pela sua infraestrutura de datacenter existente. Se as aplicações do Kubernetes utilizarem recursos no seu datacenter, reduza o risco de conflitos ao escolher um espaço de endereços para a sua rede virtual personalizada diferente do espaço de endereços do seu datacenter.
  • Recomendamos que utilize uma sub-rede dedicada para o cluster do Kubernetes.
  • Se utilizar várias redes virtuais existentes, considere utilizar diferentes espaços de endereços em cada rede se pretender utilizar o peering de rede virtual. A sobreposição de espaços de endereços pode prejudicar a sua capacidade de ativar o peering.

Obter os blocos de endereços IP

O motor AKS suporta a implementação numa rede virtual existente. Quando implementado numa rede virtual existente, o cluster utiliza blocos de endereços consecutivos para nós de agente, nós de plano de controlo, serviços de cluster e contentores (pods). Cada bloco de endereços pode ser traduzido para uma sub-rede dentro da rede virtual. Todos os blocos de endereços na implementação do cluster têm de fazer parte do espaço de endereços de rede virtual geral. Escolher blocos de endereços fora do espaço de endereços da rede virtual pode resultar em problemas de conectividade.

É necessário um mínimo de três blocos de endereços ao configurar um cluster do Kubernetes:

  • Bloco de endereços de nós: este é o bloco de endereços utilizado para atribuir endereços aos nós de cluster. Pode ser um bloco de endereços único para todos os nós de cluster ou pode ser blocos separados (sub-redes) para conjuntos de agentes e planos de controlo. Tenha em consideração a contagem de nós no cluster ao selecionar o intervalo de endereços deste bloco. Para os nós e contentores da CNI do Azure, obtenha os respetivos endereços a partir do mesmo bloco de endereços, portanto, tenha em conta o número de contentores que pretende implementar no cluster ao escolher o intervalo de endereços ao utilizar o CNI do Azure.
  • Bloco de endereços dos serviços: este é o bloco de endereços a partir do qual os serviços implementados no cluster do Kubernetes irão obter o endereço do cluster. Tenha em consideração o número máximo de serviços que pretende executar no cluster ao selecionar o intervalo de endereços para este bloco.
  • Bloco de endereços do cluster: este é o bloco de endereços a partir do qual os pods irão obter o respetivo endereço de cluster. Tenha em consideração o número máximo de pods que pretende executar no cluster ao selecionar o intervalo de endereços para este bloco. Como mencionado anteriormente, para o Azure CNI, os blocos de endereços do cluster e dos nós são os mesmos.

Além dos blocos de endereços, para nós do plano de controlo, terá de definir mais dois valores. Terá de saber o número de endereços IP que terá de reservar para o cluster e o primeiro IP estático consecutivo no espaço IP da sub-rede. O motor AKS requer um intervalo de até 16 endereços IP não utilizados quando utiliza vários nós do plano de controlo. O cluster utilizará um endereço IP para cada plano de controlo até cinco nós de plano de controlo. O motor AKS também exigirá o próximo endereço IP 10 após o último nó de plano de controlo para a reserva de endereços IP da sala. Por fim, outro endereço IP será utilizado pelo balanceador de carga após os nós do plano de controlo e a reserva de espaço, num total de 16. Ao colocar o bloco de endereços IP, a sub-rede requer as seguintes alocações dos endereços IP existentes:

  • Os primeiros quatro endereços IP e o último endereço IP estão reservados e não podem ser utilizados em nenhuma sub-rede do Azure.
  • Uma memória intermédia de 16 endereços IP deve ser deixada aberta.
  • O valor do primeiro endereço IP do cluster deve estar no fim do espaço de endereços para evitar conflitos de IP. Se possível, atribua a firstConsecutiveStaticIP propriedade a um endereço IP perto do fim do espaço de endereços IP disponível na sub-rede.

Por exemplo, para um cluster com três nós de plano de controlo. Se estiver a utilizar uma sub-rede com 256 endereços, por exemplo 10.100.0.0/24, terá de definir o seu primeiro endereço IP estático consecutivo antes da 239. A tabela seguinte mostra os endereços e considerações:

Intervalo para a sub-rede /24 Número Nota
172.100.0.0 - 172.100.0.3 4 Reservado na sub-rede do Azure.
172.100.0.224-172.100.0.238 14 Contagem de endereços IP para um cluster definido pelo motor AKS.

3 endereços IP para 3 nós do plano de controlo
10 endereços IP para a sala de estar
1 endereço IP para o balanceador de carga
172.100.0.238 - 172.100.0.254 16 16 memória intermédia de endereços IP.
172.100.0.255 1 Reservado na sub-rede do Azure.

Neste exemplo, a firstConsecutiveStaticIP propriedade seria 172.100.0.224.

Para sub-redes maiores, por exemplo /16 com mais de 60 mil endereços, poderá não considerar prático definir as atribuições de IP estáticos para o fim do espaço de rede. Defina o intervalo de endereços IP estáticos do cluster longe dos primeiros 24 endereços no espaço IP para que o cluster possa ser resiliente ao reclamar endereços.

Exemplo de blocos de endereços do Kubenet

No exemplo seguinte, pode ver como estas várias considerações preenchem o espaço de endereços na rede virtual de um cluster através do plug-in de rede kubenet com sub-redes dedicadas para o nó do plano de controlo e conjuntos de nós de agente com três nós por conjunto.

Espaço de endereços da VNET: 10.100.0.0/16.

Bloco de endereços (sub-rede) CIDR Intervalo de IP Contagem de IP (disponível)
Bloco de nós do plano de controlo 10.100.0.0/24 10.100.0.0 - 10.100.0.255 255 - 4 reservados = 251
Bloco de nós do agente 10.100.1.0/24 10.100.1.0 - 10.100.1.255 255 - 4 reservados = 251
Bloco de serviços 10.100.16.0/20 10.100.16.0 - 10.100.31.255 4.096 - 5 reservados = 4.091
Bloco de cluster 10.100.128.0/17 10.100.128.0 - 10.100.255.255 32.768 - 5 reservados = 32.763

Neste exemplo, a firstConsecutiveStaticIP propriedade seria 10.100.0.239.

Exemplo de blocos de endereços CNI do Azure

No exemplo seguinte, pode ver como estas várias considerações preenchem o espaço de endereços na rede virtual de um cluster com o plug-in de rede do Azure CNI com sub-redes dedicadas para o plano de controlo e conjuntos de nós de agente com três nós por conjunto.

Espaço de endereços da VNET: 172.24.0.0/16.

Nota

No seu ambiente, se o intervalo de IP público estiver no CIDR10.0.0.0/8, utilize o kubenet como plug-in de rede.

Bloco de endereços (sub-rede) CIDR Intervalo de IP Contagem de IP (disponível)
Bloco de nós do plano de controlo 172.24.0.0/24 172.24.0.0 - 172.24.0.255 255 - 4 reservados = 251
Nós de agente & bloco de cluster 172.24.128.0/17 172.24.128.0 - 172.24.255.255 32.768 - 5 reservados = 32.763
Bloco de serviços 172.24.16.0/20 172.24.16.0 - 172.24.31.255 4.096 - 5 reservados = 4.091

Neste exemplo, a firstConsecutiveStaticIP propriedade seria 172.24.0.239.

Atualizar a API de modelo

Atualize o modelo de API utilizado para implementar o cluster a partir do motor do AKS na sua rede virtual personalizada.

No masterProfile , defina os seguintes valores:

Campo Exemplo Descrição
vnetSubnetId /subscriptions/77e28b6a-582f-42b0-94d2-93b9eca60845/resourceGroups/MDBN-K8S/providers/Microsoft.Network/virtualNetworks/MDBN-K8S/subnets/control-plane-sn Especifique o ID do caminho do Azure Resource Manager a sub-rede. Este valor mapeia para o bloco de endereços do plano de controlo acima.
firstConsecutiveStaticIP 10.100.0.239 Atribua à firstConsecutiveStaticIP propriedade de configuração um endereço IP próximo do fim do espaço de endereços IP disponível na sub-rede pretendida. firstConsecutiveStaticIP aplica-se apenas ao conjunto de nós do plano de controlo.

Em agentPoolProfiles , defina os seguintes valores:

Campo Exemplo Descrição
vnetSubnetId /subscriptions/77e28b6a-582f-42b0-94d2-93b9eca60845/resourceGroups/MDBN-K8S/providers/Microsoft.Network/virtualNetworks/MDBN-K8S/subnets/agents-sn Especifique o ID do caminho do Azure Resource Manager a sub-rede. Este valor mapeia para o bloco de endereços dos nós de agente acima.

No orchestratorProfile, localize kubernetesConfig e defina o seguinte valor:

Campo Exemplo Descrição
clusterSubnet 10.100.128.0/17 A sub-rede IP utilizada para alocar endereços IP para interfaces de rede de pods. Este valor mapeia para o bloco de endereços do cluster acima. A sub-rede tem de estar no espaço de endereços da VNET. Com o Azure CNI ativado, o valor predefinido é 10.240.0.0/12. Sem o Azure CNI, o valor predefinido é 10.244.0.0/16. Em vez disso, utilize a sub-rede /16 /24. Se utilizar /24, esta sub-rede será atribuída apenas a um nó. Outro nó não receberá a rede POD atribuída, uma vez que terá ficado sem espaço de IP, pelo que não estarão prontos no cluster.
serviceCidr 10.100.16.0/20 A sub-rede IP utilizada para alocar endereços IP para serviços implementados no cluster. Este valor mapeia para o bloco de serviços de cluster acima.
dnsServiceIP 10.100.16.10 O endereço IP a ser atribuído ao serviço DNS do cluster. O endereço tem de ser proveniente da sub-rede serviceCidr. Este valor tem de ser definido ao especificar o serviceCidr. O valor predefinido é o endereço .10 da sub-rede serviceCidr.

Por exemplo, se estiver a utilizar o kubenet:
Com um espaço de endereços de rede de 10.100.0.0/16 onde está 10.100.0.0/24 a sub-rede control-plane-sn e agents-sn está10.100.1.0/24

"masterProfile": {
  ...
  "vnetSubnetId": "/subscriptions/77e28b6a-582f-42b0-94d2-93b9eca60845/resourceGroups/MDBN-K8S/providers/Microsoft.Network/virtualNetworks/MDBN-K8S/subnets/control-plane-sn",
  "firstConsecutiveStaticIP": "10.100.0.239",
  ...
},
...
"agentPoolProfiles": [
  {
    ...
    "vnetSubnetId": "/subscriptions/77e28b6a-582f-42b0-94d2-93b9eca60845/resourceGroups/MDBN-K8S/providers/Microsoft.Network/virtualNetworks/MDBN-K8S/subnets/agents-sn",
    ...
  },
    ...
"kubernetesConfig": [
  {
    ...
    "clusterSubnet": "10.100.128.0/17",
    "serviceCidr": "10.100.16.0/20",
    "dnsServiceIP" : "10.100.16.10",

    ...
  },

Por exemplo, se estiver a utilizar o Azure CNI:
Com um espaço de endereços de rede de 172.24.0.0/16 onde está 172.24.0.0/24 a sub-rede control-plane-sn e k8s-sn está172.24.128.0/17

"masterProfile": {
  ...
  "vnetSubnetId": "/subscriptions/77e28b6a-582f-42b0-94d2-93b9eca60845/resourceGroups/MDBN-K8S/providers/Microsoft.Network/virtualNetworks/MDBN-K8S/subnets/control-plane-sn",
  "firstConsecutiveStaticIP": "172.24.0.239",
  ...
},
...
"agentPoolProfiles": [
  {
    ...
    "vnetSubnetId": "/subscriptions/77e28b6a-582f-42b0-94d2-93b9eca60845/resourceGroups/MDBN-K8S/providers/Microsoft.Network/virtualNetworks/MDBN-K8S/subnets/k8s-sn",
    ...
  },
    ...
"kubernetesConfig": [
  {
    ...
    "clusterSubnet": "172.24.128.0/17",
    "serviceCidr": "172.24.16.0/20",
    "dnsServiceIP" : "172.24.16.10",
    ...
  },

Implementar o cluster

Depois de adicionar os valores ao modelo de API, pode implementar o cluster a partir do computador cliente com o deploy comando no motor do AKS. Para obter instruções, veja Implementar um cluster do Kubernetes.

Definir a tabela de rotas

Se estiver a utilizar o kubenet, por exemplo, networkPlugin: kubenet no objeto de configuração do kubernetesConfig modelo de API. Depois de implementar o cluster, regresse à rede virtual no portal de utilizador do Azure Stack. Defina a tabela de rotas e o grupo de segurança de rede (NSG) no painel da sub-rede. Depois de implementar com êxito um cluster na sua rede virtual personalizada, obtenha o ID do recurso Tabela de Rotas a partir do painel Rede no grupo de recursos do cluster.

  1. Abra o portal de utilizadores do Azure Stack Hub na instância do Azure Stack Hub.

  2. Selecione Todos os recursos.

  3. Introduza o nome da sua rede virtual na caixa de pesquisa.

  4. Selecione Sub-redes e, em seguida, selecione o nome da sub-rede que contém o cluster.

    tabela de rotas e grupo de segurança de rede

  5. Selecione Tabela de rotas e, em seguida, selecione a tabela de rotas para o cluster.

  6. Certifique-se de que isto é feito para todas as sub-redes especificadas no modelo de API, incluindo a masterProfile sub-rede.

Nota

A rede virtual personalizada para o cluster do Windows do Kubernetes tem um problema conhecido.

Passos seguintes