Implantar um cluster Kubernetes em uma rede virtual personalizada no Azure Stack Hub
Você pode implantar um cluster Kubernetes usando o mecanismo do Serviço Kubernetes do Azure (AKS) em uma rede virtual personalizada. Este artigo analisa como encontrar as informações de que precisa na 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 Kubernetes no Azure Stack Hub usando o mecanismo AKS usa o plug-in de rede kubenet. O mecanismo AKS no Azure Stack Hub também dá suporte ao plug-in de rede CNI do Azure.
- Para obter uma discussão sobre o plug-in de rede kubenet no Azure, consulte Usar rede kubenet com seus próprios intervalos de endereços IP no Serviço Kubernetes do Azure (AKS).
- Para obter uma discussão sobre o plug-in de rede CNI do Azure no Azure, consulte Configurar a rede CNI do Azure no Serviço Kubernetes do Azure (AKS).
Restrições ao criar uma rede virtual personalizada
- A VNET personalizada deve estar na mesma assinatura que todos os outros componentes do cluster Kubernetes.
- O pool de nós do plano de controle e o pool de nós do agente devem estar na mesma rede virtual. Você pode implantar seus nós em diferentes sub-redes 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 da(s) sub-rede(s) do nó depende do tipo de plug-in de rede que está sendo usado. Como uma diretriz geral, o Azure CNI requer um número maior de endereços IP para a sub-rede que suporta os pools de nós do agente do que o kubenet. Veja os exemplos de kubenet e Azure CNI abaixo.
- O
169.254.0.0/16
espaço de endereço não pode ser usado para VNETs personalizadas para clusters 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, consulte Guia de início rápido: criar uma rede virtual usando o portal do Azure.
Crie uma nova sub-rede na sua rede virtual. Você precisará obter o 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 quando implantar o cluster.
Abra o portal do usuário do Azure Stack Hub em sua instância do Azure Stack Hub.
Selecione Todos os recursos.
Introduza o nome da sua rede virtual na caixa de pesquisa.
Selecione Sub-redes> + Sub-redes para adicionar uma sub-rede.
Adicione um Nome e um intervalo de endereços usando a notação CIDR. Selecione OK.
Selecione Propriedades na folha Redes virtuais. Copie a ID do recurso e, em seguida, adicione
/subnets/<nameofyoursubnect>
. Você usará esse valor como seu valor para avnetSubnetId
chave no modelo de API para seu 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
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).
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 intervalos para usar no cluster do Kubernetes:
- A sobreposição de espaços de endereço 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ço exclusivo para sua nova rede virtual.
- Os espaços de endereço no
10/8
,172.16/12
e192.168/16
intervalos geralmente são usados para redes privadas e podem ser usados pela infraestrutura de datacenter existente. Se seus aplicativos Kubernetes usam recursos em seu datacenter, reduza o risco de conflitos escolhendo um espaço de endereçamento para sua rede virtual personalizada que seja diferente do espaço de endereçamento do seu datacenter. - Recomendamos que você use uma sub-rede dedicada para seu cluster Kubernetes.
- Se 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ços IP
O mecanismo AKS suporta a 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 de plano 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çamento da rede virtual geral. Escolher blocos de endereço fora do espaço de endereçamento 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 Kubernetes:
- Bloco de endereços de nós: Este é o bloco de endereço usado para atribuir endereços aos nós do cluster. Isso pode ser um único bloco de endereço para todos os nós de 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 este bloco. Para o Azure CNI, nós e contêineres obtêm seus endereços do mesmo bloco de endereço, portanto, leve em consideração o número de contêineres que você deseja implantar em seu cluster ao escolher o intervalo de endereços ao usar o Azure CNI.
- Bloco de endereço de serviços: este é o bloco de endereço 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 em seu cluster ao selecionar o intervalo de endereços para esse bloco.
- Bloco de endereços de cluster: Este é o bloco de endereços a partir 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 em seu cluster ao selecionar o intervalo de endereços para este bloco. Como mencionado anteriormente, para o Azure CNI os blocos de endereço de cluster e nós são os mesmos.
Além dos blocos de endereço, para nós de plano de controle você precisará definir mais dois valores. Você precisará saber o número de endereços IP que precisará reservar para seu cluster e o primeiro IP estático consecutivo dentro do espaço IP da sub-rede. O mecanismo AKS requer um intervalo de até 16 endereços IP não utilizados quando você usa vários nós do plano de controle. O cluster usará um endereço IP para cada plano de controle até cinco nós do plano de controle. O motor AKS também exigirá os próximos 10 endereços IP após o último nó do plano de controle para reserva de endereço IP de headroom. Finalmente, outro endereço IP será usado pelo balanceador de carga após os nós do plano de controle e reserva de espaço livre, para um total de 16. Ao colocar o seu 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çamento para evitar conflitos de IP. Se possível, atribua a
firstConsecutiveStaticIP
propriedade a um endereço IP perto do 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 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 de 239. A tabela a seguir 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 mecanismo AKS. 3 endereços IP para 3 nós do plano de controlo 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 Memória intermédia de endereços IP. |
172.100.0.255 | 1 | Reservado na sub-rede do Azure. |
Neste exemplo, então firstConsecutiveStaticIP
a propriedade seria 172.100.0.224
.
Para sub-redes maiores, por exemplo /16 com mais de 60 mil endereços, você pode não achar 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ços 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 plano 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ços (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 |
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 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 plano 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.
Nota
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ços (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 |
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 usado para implantar o cluster do mecanismo AKS em sua rede virtual personalizada.
Em masterProfile defina os seguintes valores:
Campo | Exemplo | Description |
---|---|---|
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 é mapeado para o bloco de endereços dos nós do plano 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 apenas ao pool de nós do plano de controle. |
Em agentPoolProfiles , defina os seguintes valores:
Campo | Exemplo | Description |
---|---|---|
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ço dos nós do agente acima. |
Em orchestratorProfile, localize kubernetesConfig e defina o seguinte valor:
Campo | Exemplo | Description |
---|---|---|
sub-rede clusterSubnet | 10.100.128.0/17 |
A sub-rede IP usada para alocar endereços IP para interfaces de rede pod. Esse valor é mapeado para o bloco de endereço do cluster acima. A sub-rede deve estar no espaço de endereço VNET. Com o Azure CNI habilitado, o valor padrão é 10.240.0.0/12. Sem o Azure CNI, o valor padrão é 10.244.0.0/16. Use /16 em vez da sub-rede /24. Se você usar /24, essa sub-rede será atribuída a apenas um nó. Outro nó não receberá rede POD atribuída, pois você terá ficado sem o espaço IP, então eles não estarã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 é 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/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 estiver usando o Azure CNI:
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/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 seu modelo de API, você pode implantar seu cluster a partir da máquina cliente usando o deploy
comando no mecanismo AKS. Para obter instruções, consulte Implantar um cluster Kubernetes.
Definir a tabela de rotas
Se você estiver usando kubenet, por exemplo, networkPlugin
: kubenet
no objeto de configuração do modelo de kubernetesConfig
API. Depois de implantar seu cluster, retorne à sua 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 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.
Abra o portal do usuário do Azure Stack Hub em sua instância do Azure Stack Hub.
Selecione Todos os recursos.
Introduza o nome da sua rede virtual na caixa de pesquisa.
Selecione Sub-redes e, em seguida, selecione o nome da sub-rede que contém o cluster.
Selecione Tabela de rotas e, em seguida, selecione a tabela de rotas para o cluster.
Certifique-se de que isso seja feito para cada sub-rede especificada no modelo de API, incluindo a
masterProfile
sub-rede.
Nota
A rede virtual personalizada para o cluster Kubernetes do Windows tem um problema conhecido.
Próximos passos
- Leia sobre o mecanismo AKS no Azure Stack Hub
- Leia sobre a visão geral do Azure Monitor for containers