Implantar um cluster do Kubernetes em uma rede virtual personalizada no Azure Stack Hub

Você pode implantar um cluster do Kubernetes usando o mecanismo de Serviço de Kubernetes do Azure (AKS) em uma rede virtual personalizada. Este artigo analisa a localização das informações necessárias em sua rede virtual. Você pode encontrar etapas para calcular os endereços IP usados 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 usando o mecanismo do AKS usa o plug-in de rede kubenet. O mecanismo do AKS no Azure Stack Hub também dá suporte ao plug-in de rede CNI do Azure.

Restrições ao criar uma rede virtual personalizada

  • A VNET personalizada deve estar na mesma assinatura que todos os outros componentes do cluster do Kubernetes.
  • O pool de nós do painel de controle e o pool de nós do agente devem estar na mesma rede virtual. Você pode implantar seus nós em sub-redes diferentes dentro da mesma rede virtual.
  • A sub-rede de cluster do Kubernetes deve usar um intervalo de IP dentro do espaço do intervalo de IP da rede virtual personalizada, consulte Obter o bloco de endereço IP.
  • Considere que o tamanho recomendado das sub-redes do nó depende do tipo de plug-in de rede que está sendo usado. Como diretriz geral, a CNI do Azure requer um número maior de endereços IP para a sub-rede que dá suporte aos pools de nós do agente do que o kubenet. Veja os exemplos de kubenet e CNI do Azure abaixo.
  • O 169.254.0.0/16 espaço de endereço pode não ser usado para VNETs personalizados para clusters do Kubernetes.

Criar rede virtual personalizada

Você deve ter uma rede virtual personalizada em sua instância do Azure Stack Hub. Para obter mais informações, confira Início rápido: criar uma rede virtual usando o portal do Azure.

Crie uma nova sub-rede em sua rede virtual. Você precisará obter a ID do Recurso da sub-rede e o intervalo de endereços IP. Você usará a ID do recurso e o intervalo em seu modelo de API ao implantar o cluster.

  1. Abra o portal do usuário do Azure Stack Hub em sua instância do Azure Stack Hub.

  2. Selecione Todos os recursos.

  3. Insira o nome da 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 usando a notação CIDR. Selecione OK.

  6. Selecione Propriedades na folha Redes virtuais . Copie a ID do recurso e adicione /subnets/<nameofyoursubnect>. Você usará esse valor como seu valor para a vnetSubnetId chave no modelo de API do cluster. A ID do recurso para a sub-rede usa o seguinte formato:
    /subscriptions/SUB_ID/resourceGroups/RG_NAME/providers/Microsoft.Network/virtualNetworks/VNET_NAME/subnets/SUBNET_NAME

    ID do recurso da rede virtual

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

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

    bloco CIDR da rede virtual

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

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

Ao criar uma rede virtual personalizada, você especifica o espaço de endereço IP da rede e um intervalo de endereços IP para cada sub-rede. Considere os seguintes fatores ao escolher os espaços de endereço e os intervalos a serem usados no cluster do Kubernetes:

  • A sobreposição de espaços de endereço pode resultar em conflitos de endereço IP ou erros de comunicação. Para reduzir o risco de sobreposição de endereços IP, escolha um espaço de endereço exclusivo para sua nova rede virtual.
  • Os espaços de endereço nos 10/8intervalos , 172.16/12e 192.168/16 geralmente são usados para redes privadas e podem ser usados pela infraestrutura de datacenter existente. Se seus aplicativos Kubernetes usarem recursos em seu datacenter, reduza o risco de conflitos escolhendo um espaço de endereço para sua rede virtual personalizada diferente do espaço de endereço do datacenter.
  • Recomendamos que você use uma sub-rede dedicada para o cluster do Kubernetes.
  • Se você estiver usando várias redes virtuais existentes, considere usar espaços de endereço diferentes em cada rede se você pretende usar o emparelhamento de rede virtual. A sobreposição de espaços de endereço pode prejudicar sua capacidade de habilitar o emparelhamento.

Obter os blocos de endereço IP

O mecanismo do AKS dá suporte à implantação em uma rede virtual existente. Quando implantado em uma rede virtual existente, o cluster usa blocos de endereços consecutivos para nós de agente, nós do painel de controle, serviços de cluster e contêineres (pods). Cada bloco de endereço pode ser convertido em uma sub-rede dentro da rede virtual. Todos os blocos de endereço na implantação do cluster devem fazer parte do espaço de endereço de rede virtual geral. Escolher blocos de endereço fora do espaço de endereço da rede virtual pode resultar em problemas de conectividade.

Um mínimo de três blocos de endereço são necessários ao configurar um cluster do Kubernetes:

  • Bloco de endereços de nós: esse é o bloco de endereços usado para atribuir endereços aos nós de cluster. Pode ser um único bloco de endereço para todos os nós de cluster ou pode ser blocos separados (sub-redes) para o painel de controle e pools de agentes. Leve em consideração a contagem de nós no cluster ao selecionar o intervalo de endereços para esse bloco. Para nós e contêineres de CNI do Azure, obtenha seus endereços do mesmo bloco de endereços, portanto, leve em conta o número de contêineres que você deseja implantar no cluster ao escolher o intervalo de endereços ao usar a CNI do Azure.
  • Bloco de endereços de serviços: esse é o bloco de endereços do qual os serviços implantados no cluster do Kubernetes obterão seu endereço de cluster. Leve em consideração o número máximo de serviços que você pretende executar no cluster ao selecionar o intervalo de endereços para esse bloco.
  • Bloco de endereços do cluster: esse é o bloco de endereços do qual os pods obterão seu endereço de cluster. Leve em consideração o número máximo de pods que você pretende executar no cluster ao selecionar o intervalo de endereços para esse bloco. Como menção anteriormente, para a CNI do Azure, os blocos de endereço de cluster e nós são os mesmos.

Além dos blocos de endereço, para nós do painel de controle, você precisará definir mais dois valores. Você precisará saber o número de endereços IP que precisará reservar para o cluster e o primeiro IP estático consecutivo dentro do espaço IP da sub-rede. O mecanismo do AKS requer um intervalo de até 16 endereços IP não utilizados quando você usa vários nós do painel de controle. O cluster usará um endereço IP para cada painel de controle de até cinco nós do painel de controle. O mecanismo do AKS também exigirá o próximo endereço IP 10 após o último nó do painel de controle para reserva de endereço IP de headroom. Por fim, outro endereço IP será usado pelo balanceador de carga após os nós do painel de controle e a reserva de espaço para a cabeça, para um 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 quatro primeiros endereços IP e o último endereço IP são reservados e não podem ser usados em nenhuma sub-rede do Azure.
  • Um buffer de 16 endereços IP deve ser deixado aberto.
  • O valor do primeiro endereço IP do cluster deve estar no final do espaço de endereço para evitar conflitos de IP. Se possível, atribua a firstConsecutiveStaticIP propriedade a um endereço IP próximo ao final do espaço de endereço IP disponível na sub-rede.

Por exemplo, para um cluster com três nós do painel de controle. Se você estiver usando uma sub-rede com 256 endereços, por exemplo, 10.100.0.0/24, precisará definir seu primeiro endereço IP estático consecutivo antes de 239. A tabela a seguir mostra os endereços e as considerações:

Intervalo para /24 sub-rede Número Observação
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 mecanismo do AKS.

3 endereços IP para três nós do painel de controle
10 endereços IP para headroom
1 endereço IP para o balanceador de carga
172.100.0.238 - 172.100.0.254 16 16 buffer de endereço 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, talvez você não ache prático definir suas atribuições de IP estático para o final do espaço de rede. Defina o intervalo de endereços IP estáticos do cluster longe dos primeiros 24 endereços em seu espaço IP para que o cluster possa ser resiliente ao reivindicar endereços.

Exemplo de blocos de endereço kubenet

No exemplo a seguir, você pode ver como essas várias considerações preenchem o espaço de endereço na rede virtual de um cluster usando o plug-in de rede kubenet com sub-redes dedicadas para o nó do painel de controle e pools de nós de agente com três nós por pool.

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

Bloco de endereços (sub-rede) CIDR Intervalo IP Contagem de IP (disponível)
Bloco de nós do painel de controle 10.100.0.0/24 10.100.0.0 - 10.100.0.255 255 - 4 reservado = 251
Bloco de nós do agente 10.100.1.0/24 10.100.1.0 - 10.100.1.255 255 - 4 reservado = 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ço CNI do Azure

No exemplo a seguir, você pode ver como essas várias considerações preenchem o espaço de endereço na rede virtual de um cluster usando o plug-in de rede CNI do Azure com sub-redes dedicadas para o painel de controle e pools de nós de agente com três nós por pool.

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

Observação

Em seu ambiente, se o intervalo de IP público estiver dentro do CIDR10.0.0.0/8, use kubenet como o plug-in de rede.

Bloco de endereços (sub-rede) CIDR Intervalo IP Contagem de IP (disponível)
Bloco de nós do painel de controle 172.24.0.0/24 172.24.0.0 - 172.24.0.255 255 - 4 reservado = 251
Nós do 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 o modelo de API

Atualize o modelo de API usado para implantar o cluster do mecanismo do AKS em sua rede virtual personalizada.

Em 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 a ID do caminho Resource Manager do Azure na sub-rede. Esse valor é mapeado para o bloco de endereços dos nós do painel de controle acima.
firstConsecutiveStaticIP 10.100.0.239 Atribua à firstConsecutiveStaticIP propriedade de configuração um endereço IP próximo ao final do espaço de endereço IP disponível na sub-rede desejada. firstConsecutiveStaticIP aplica-se somente ao pool de nós do painel de controle.

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 a ID do caminho Resource Manager do Azure na sub-rede. Esse valor é mapeado para o bloco de endereços de nós do 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 usada para alocar endereços IP para interfaces de rede de pod. Esse valor é mapeado para o bloco de endereços do cluster acima. A sub-rede deve estar no espaço de endereço da VNET. Com a CNI do Azure habilitada, o valor padrão é 10.240.0.0/12. Sem a CNI do Azure, o valor padrão é 10.244.0.0/16. Use /16 em vez de /24 sub-rede. Se você usar /24, essa sub-rede será atribuída apenas a um nó. Outros nós não receberão a rede POD atribuída, pois você ficará sem espaço ip, portanto, eles não estarão prontos no cluster.
serviceCidr 10.100.16.0/20 A sub-rede IP usada para alocar endereços IP para serviços implantados no cluster. Esse valor é mapeado 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 deve vir da sub-rede serviceCidr. Esse valor deve ser definido ao especificar o serviceCidr. O valor padrão é o endereço .10 da sub-rede serviceCidr.

Por exemplo, se estiver usando kubenet:
Com um espaço de endereço de rede de 10.100.0.0/16 onde a sub-rede para control-plane-sn é 10.100.0.0/24 e agents-sn é 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 usando a CNI do Azure:
Com um espaço de endereço de rede de 172.24.0.0/16 onde a sub-rede para control-plane-sn é 172.24.0.0/24 e k8s-sn é 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",
    ...
  },

Implantar seu cluster

Depois de adicionar os valores ao modelo de API, você pode implantar o cluster do computador cliente usando o deploy comando no mecanismo do AKS. Para obter instruções, confira Implantar um cluster do Kubernetes.

Definir a tabela de rotas

Se você estiver usando kubenet, por exemplo, networkPlugin: kubenet no objeto de configuração do kubernetesConfig modelo de API. Depois de implantar o cluster, retorne à rede virtual no portal do usuário do Azure Stack. Defina a tabela de rotas e o NSG (grupo de segurança de rede) na folha de sub-rede. Depois de implantar com êxito um cluster em sua rede virtual personalizada, obtenha a ID do recurso Tabela de Rotas da folha Rede no grupo de recursos do cluster.

  1. Abra o portal do usuário do Azure Stack Hub em sua instância do Azure Stack Hub.

  2. Selecione Todos os recursos.

  3. Insira o nome da 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. Verifique se isso é feito para cada sub-rede especificada no modelo de API, incluindo a masterProfile sub-rede.

Observação

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

Próximas etapas