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.
- Para obter uma discussão sobre o plug-in de rede kubenet no Azure, consulte Usar a rede kubenet com seus próprios intervalos de endereços IP no AKS (Serviço de Kubernetes do Azure).
- Para obter uma discussão sobre o plug-in de rede CNI do Azure no Azure, consulte Configurar a rede CNI do Azure no AKS (Serviço de Kubernetes 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:
Abra o portal do usuário do Azure Stack Hub em sua instância do Azure Stack Hub.
Selecione Todos os recursos.
Insira 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 adicione
/subnets/<nameofyoursubnect>
. Use esse valor como seu valor para a chavevnetSubnetId
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
.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 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/8
intervalos ,172.16/12
e192.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.
Abra o portal do usuário do Azure Stack Hub em sua instância do Azure Stack Hub.
Selecione Todos os recursos.
Insira 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.
Observação
Redes virtuais personalizadas para clusters do Windows no Kubernetes têm um problema conhecido.
Próximas etapas
- Leia sobre o mecanismo do AKS no Azure Stack Hub
- Leia sobre a visão geral do Azure Monitor para contêineres