Compartilhar via


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

Você pode implantar um cluster do Kubernetes usando o mecanismo do AKS (Serviço de Kubernetes do Azure) em uma rede virtual personalizada. Este artigo descreve como encontrar as informações necessárias em sua rede virtual. O artigo contém 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 Kubernetes no Azure Stack Hub com o mecanismo AKS usa o plugin de rede kubenet. O mecanismo do AKS no Azure Stack Hub também dá suporte ao plug-in de rede CNI do Azure.

Consideraçõ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 do cluster Kubernetes deve usar uma faixa de endereços IP dentro do intervalo de IP da rede virtual personalizada. Consulte Obter o bloco de endereço IP.
  • Considere que o tamanho recomendado das sub-redes dos nodes depende do tipo de plugin 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 kubenet. Veja os seguintes exemplos de kubenet e Azure CNI.
  • O espaço de endereço 169.254.0.0/16 não pode 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ê deve obter a ID do recurso de sub-rede e o intervalo de endereços IP, que você usa em seu modelo de API ao implantar seu 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 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 usando a notação CIDR. Selecione OK.

  6. Selecione Propriedades na folha Redes virtuais. Copie a ID do recurso e adicione /subnets/<nameofyoursubnect>. Use esse valor como seu valor para a chave vnetSubnetId 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 de 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 de 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çamento

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:

  • Espaços de endereço sobrepostos podem 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 do Kubernetes usarem recursos em seu datacenter, reduza o risco de conflitos escolhendo um espaço de endereço para sua rede virtual personalizada que seja diferente do espaço de endereço do datacenter.
  • Recomendamos que você use uma sub-rede dedicada para o cluster do Kubernetes.
  • Se você usar várias redes virtuais existentes, considere utilizar espaços de endereço diferentes em cada rede caso pretenda 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ços 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. A escolha de 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: o bloco de endereços usado para atribuir endereços aos nós de cluster. Esse valor pode ser um único bloco de endereço para todos os nós do cluster, ou pode ser blocos separados (sub-redes) para o plano de controle e pools de agentes. Leve em consideração a contagem de nós em seu cluster ao selecionar o intervalo de endereços para esse bloco. Para a CNI do Azure, nós e contêineres obtêm seus endereços do mesmo bloco de endereços, portanto, levem 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: o bloco de endereços do qual os serviços implantados no cluster kubernetes obtêm seu endereço de cluster. Leve em consideração o número máximo de serviços que você pretende executar em seu cluster ao selecionar o intervalo de endereços para esse bloco.
  • Bloco de endereços do cluster: o bloco de endereços de onde os pods obtêm o endereço do cluster. Leve em consideração o número máximo de pods que você pretende executar em seu cluster ao selecionar o intervalo de endereços para esse bloco. Como mencionado 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 plano de controle, você deve definir mais dois valores. Você precisa saber o número de endereços IP a serem reservados 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 usa um endereço IP para cada plano de controle de até cinco nós do plano de controle. O mecanismo do AKS também requer os próximos 10 endereços IP após o último nó do plano de controle para a reserva de endereços IP de espaço livre. Por fim, outro endereço IP é usado pelo balanceador de carga após os nós do plano de controle e a reserva de capacidade, para um total de 16. Ao colocar seu 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 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 de plano de controle, se usar uma sub-rede com 256 endereços, por exemplo, 10.100.0.0/24, você deverá 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 sub-rede /24 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 3 nós do plano 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 propriedade firstConsecutiveStaticIP é 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 no 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 para 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 do agente com três nós por pool.

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

Bloco de endereço (sub-rede) CIDR Intervalo de IP Contagem de IP (disponível)
Bloco de nós do plano de controle 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
Bloqueio 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 propriedade firstConsecutiveStaticIP é 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 para 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 do 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 de CIDR10.0.0.0/8, use kubenet como o plug-in de rede.

Bloco de endereço (sub-rede) CIDR Intervalo de IP Contagem de IP (disponível)
Bloco de nós do plano de controle 172.24.0.0/24 172.24.0.0 - 172.24.0.255 255 - 4 reservados = 251
Nós do agente e bloco de cluster 172.24.128.0/17 172.24.128.0 - 172.24.255.255 32.768 - 5 reservados = 32.763
Bloqueio 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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/MDBN-K8S/providers/Microsoft.Network/virtualNetworks/MDBN-K8S/subnets/control-plane-sn Especifique a ID do caminho do Azure Resource Manager na sub-rede. Esse valor corresponde ao bloco de endereços dos nós do plano de controle.
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 plano de controle.

Em agentPoolProfiles , defina os seguintes valores:

Campo Exemplo Descrição
vnetSubnetId /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/MDBN-K8S/providers/Microsoft.Network/virtualNetworks/MDBN-K8S/subnets/agents-sn Especifique a ID do caminho do Azure Resource Manager na sub-rede. Esse valor é mapeado para o bloco de endereços de nós do agente.

Em 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. A sub-rede deve estar no espaço de endereço 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ó. O outro nó não recebe uma rede POD atribuída, pois você ficou sem espaço IP, portanto, eles não estão prontos no cluster.
serviçoCidr 10.100.16.0/20 A sub-rede IP usada para alocar endereços IP para serviços implantados no cluster. Esse valor corresponde ao bloco dos serviços de cluster.
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çamento de rede de 10.100.0.0/16 onde a sub-rede para control-plane-sn is 10.100.0.0/24 e agents-sn is 10.100.1.0/24

"masterProfile": {
  ...
  "vnetSubnetId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/MDBN-K8S/providers/Microsoft.Network/virtualNetworks/MDBN-K8S/subnets/control-plane-sn",
  "firstConsecutiveStaticIP": "10.100.0.239",
  ...
},
...
"agentPoolProfiles": [
  {
    ...
    "vnetSubnetId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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 você usar a CNI do Azure com um espaço de endereço de rede de 172.24.0.0/16 em que a sub-rede para control-plane-sn é 172.24.0.0/24 e k8s-sn é 172.24.128.0/17:

"masterProfile": {
  ...
  "vnetSubnetId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/MDBN-K8S/providers/Microsoft.Network/virtualNetworks/MDBN-K8S/subnets/control-plane-sn",
  "firstConsecutiveStaticIP": "172.24.0.239",
  ...
},
...
"agentPoolProfiles": [
  {
    ...
    "vnetSubnetId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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 da sua máquina cliente usando o comando deploy no AKS engine. Para obter instruções, consulte 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 da sub-rede. Depois de implantar um cluster em sua rede virtual personalizada, obtenha o ID do recurso da tabela de rotas da folha Rede do 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 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 isso seja feito para cada sub-rede especificada no modelo de API, incluindo a masterProfile sub-rede.

Observação

Redes virtuais personalizadas para clusters do Windows no Kubernetes têm um problema conhecido.

Próximas etapas