Use o Trunk ENI do Terway para atribuir IPs estáticos por pod, vSwitches dedicados ou grupos de segurança. Isso permite gerenciamento granular de tráfego, isolamento de rede, configuração de políticas de rede e gestão de endereços IP.
Contexto
O ACK oferece uma solução baseada em ENI para configuração de rede por pod. Estão disponíveis dois modos de ENI:
-
Modo Exclusive ENI: Cada pod se vincula a uma ENI exclusiva com recursos de rede dedicados. Oferece forte isolamento, mas consome mais cotas de ENI. Ideal para aplicações de alto desempenho sensíveis ao isolamento.
Para usar este modo, configure Exclusive ENI network mode ao criar um node pool.
-
Modo Trunk ENI: Uma Trunk ENI no nó fornece dinamicamente ENIs auxiliares para múltiplos pods. Aumenta a densidade de pods por nó e adequa-se a configurações de rede personalizadas em grande escala.
Ative primeiro o recurso Trunk ENI no cluster. O add-on terway-controlplane será implantado automaticamente para gerenciar o ciclo de vida das configurações de rede personalizadas e a entrega de políticas. Arquitetura:
O modo Trunk ENI também suporta configurações de rede personalizadas. Ele atribui vSwitches dedicados, grupos de segurança e IPs estáticos sob demanda para pods críticos, enquanto outros pods usam a configuração compartilhada padrão.
Limitações
Se você usar um ACK dedicated cluster, acesse o Quota Center e solicite a cota chamada
Container network supports Terway ENI Trunking mode.Cada nó tem um limite de hospedagem de pods. Consulte Use the Terway network plugin.
As regras de grupo de segurança não se aplicam ao tráfego entre pods no mesmo nó ou ao tráfego de pod para host. Use uma NetworkPolicy nesses cenários.
-
Requisitos de versão do Terway:
Para atualizar Terway , consulte Add-ons .
Modo Trunk ENI: Terway v1.3.0 ou posterior
Modo Exclusive ENI: Terway v1.11.0 ou posterior
Este recurso suporta apenas instâncias ECS.
Clusters ACS suportam apenas as capacidades de atribuição de vSwitch e grupo de segurança do PodNetworking. Outras funcionalidades, como IPs estáticos e seleção de elastic network interface (ENI), não são compatíveis com clusters ACS. Essa capacidade é fornecida pelo acs-virtual-node e independe do Terway. Se a definição do PodNetworking CRD não existir no cluster, baixe-a e instale-a.
Caminho de dados
O diagrama a seguir ilustra a diferença no caminho de dados entre os modos Trunk ENI e Exclusive ENI.
Escopo das configurações dedicadas de pod
Com uma configuração dedicada de pod, cada pod obtém uma ENI exclusiva com seu próprio vSwitch e grupo de segurança.
Dois modos de configuração de nó suportam configurações dedicadas de pod:
Nós que suportam Trunk ENIs | Nós que suportam elastic network interfaces (Consulte Configure exclusive ENI network mode for a node pool) | |
Tipos de cluster suportados | ACK managed cluster | ACK managed cluster, ACK dedicated cluster |
Densidade de implantação | Pods regulares compartilham uma ENI; pods especificados usam ENIs exclusivas. Alta densidade geral. | Todos os pods usam ENIs exclusivas. Baixa densidade. |
Tipos de nó suportados | Nós ECS | Nós ECS |
Tipo de instância | Selecione um tipo de instância que suporte Trunk ENI e retorne | Tipos de instância que suportam ENIs. |
Casos de uso | Serviços sensíveis a custos e de baixa concorrência. | Serviços de alto desempenho, baixa latência e alta concorrência. |
Limites de recursos do Kubernetes |
| |
Etapa 1: Ativar o recurso Trunk ENI para um cluster
Novo cluster
Ao criar um cluster ACK, defina Network Plug-in como Terway e selecione Support for ENI Trunking na seção Terway Mode (tipo de plugin de rede: terway-eniip). Consulte Create an ACK dedicated cluster (discontinued) e Create an ACK managed cluster.
A partir do Kubernetes 1.31, o Trunk ENI vem ativado por padrão em novos ACK managed cluster s, sem necessidade de configuração adicional.
Após a ativação, não é possível modificar o Trunk ENI.
Cluster existente
Pré-requisitos
O cluster existente deve usar o plugin de rede terway-eniip. Consulte Use the Terway network plugin.
Verifique o plugin de rede na página Add-ons do cluster.
Limitações
ACK managed cluster s criados antes de junho de 2020 podem não suportar este recurso. Siga a Etapa 1 para verificar a compatibilidade.
Após a ativação, não é possível desativar os recursos de IP estático, vSwitch dedicado e grupo de segurança.
Etapa 1: Verificar suporte a Trunk ENI
Para um ACK dedicated cluster, solicite permissões para usar instâncias ECS que suportem Trunk ENIs. Para solicitar, envie um ticket.
Para um ACK managed cluster existente ou migrado de um ACK dedicated cluster, verifique o suporte a Trunk ENI e modifique a configuração. Não são necessárias permissões de instância ECS.
Verifique a configuração do token:
kubectl get secret -nkube-system addon.network.token
Saída esperada caso a configuração exista:
NAME TYPE DATA AGE
addon.network.token Opaque 1 69m
Se a configuração do token existir, prossiga para a próxima etapa. Caso contrário, crie um novo cluster com suporte a Trunk ENI.
Etapa 2: Ativar terway-eniip e Trunk ENI
Faça login no ACK console. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do cluster. No painel de navegação à esquerda, clique em Components and Add-ons .
Na página Add-ons, clique na aba Network e localize o add-on terway-eniip.
-
No cartão terway-eniip, clique em Upgrade para atualizar o add-on terway-eniip para a versão mais recente.
Se o botão Upgrade não aparecer, o add-on já está atualizado. Pule esta etapa.
-
Ative o terway-eniip.
-
Edite o ConfigMap eni-config:
kubectl edit cm -nkube-system eni-config -
Edite os parâmetros eni-config no arquivo YAML:
Parâmetro
Valor
Descrição
enable_eni_trunking
true
Ativa o Trunk ENI. Não pode ser desativado após a ativação.
credential_path
/var/addon/token-config
Para um ACK managed cluster, adicione este parâmetro se ainda não estiver presente.
ImportanteNão modifique outros parâmetros.
O conteúdo do ConfigMap eni-config deve ser um JSON válido.
Exemplo de configuração:
apiVersion: v1 data: eni_conf: | { "min_pool_size": 0, "enable_eni_trunking": true, "credential_path": "/var/addon/token-config", ... } kind: ConfigMap -
Reinicie os pods do Terway para aplicar a configuração:
kubectl delete pod -n kube-system -l app=terway-eniip
-
-
Após configurar os parâmetros do terway-eniip, acesse a aba Network na página Add-ons e instale o add-on terway-controlplane.
Após a instalação, o cartão terway-controlplane exibirá Installed.
Etapa 2: Criar um recurso personalizado PodNetworking
O Terway usa um recurso personalizado (CR) PodNetworking para descrever configurações de rede. Crie múltiplos objetos PodNetworking para definir diferentes planos de rede.
Faça login no ACK console. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do cluster e escolha no painel de navegação à esquerda.
-
Na página Custom Resources, clique na aba CRDs e clique em Create from YAML.
Exemplo de YAML para PodNetworking:
apiVersion: network.alibabacloud.com/v1beta1 kind: PodNetworking metadata: name: example spec: allocationType: type: Fixed # The pod IP address allocation policy. Valid values: Elastic and Fixed. releaseStrategy: TTL # This parameter is valid only when type is set to Fixed. If type is set to Elastic, you do not need to configure releaseStrategy and releaseAfter. releaseAfter: "1h" # This parameter is valid only when releaseStrategy is set to TTL. selector: podSelector: matchLabels: foo: bar namespaceSelector: matchLabels: foo: bar securityGroupIDs: - sg-bpxxxx vSwitchOptions: - vsw-bpxxxx eniOptions: eniType: DefaultDescrição dos parâmetros:
Parâmetro
Descrição
allocationType
(Política de alocação de endereço IP do pod)
type
Valores válidos:
Elastic: Os recursos de IP são liberados após a exclusão do pod.
Fixed: Política de endereço IP estático.
Quando
typeéFixed, aplica-se a pods com nomes fixos (StatefulSets e pods sem ownerReferences por padrão). Para workloads personalizados, configure o terway-controlplane na página Add-ons.NotaCom a política de IP estático, os pods recriados ficam restritos à mesma zona do original.
releaseStrategy
Válido apenas quando
typeéFixed. Valores válidos:TTL: Liberação atrasada. O IP é liberado após um tempo especificado da exclusão do pod. Mínimo: 5 minutos.Never: O IP nunca é liberado. Exclua manualmente o recurso PodENI quando não for mais necessário.
releaseAfter
Tempo de liberação atrasada. Válido apenas quando
releaseStrategyéTTL. Usa o formato de tipo de tempo Go com unidadeshem, como2h45mou5m0s.selector
(Seletor de rótulos. Pods correspondentes usam esta configuração de rede.)
podSelector
Corresponde aos rótulos do pod. Os pods correspondentes usam esta configuração de rede.
Se
podSelectorenamespaceSelectorestiverem configurados, os pods que corresponderem a todas as regras usarão esta configuração.Garanta uma correspondência única. Se um pod corresponder a múltiplas configurações PodNetworking, o sistema aplicará uma arbitrariamente.
namespaceSelector
Rótulos para corresponder a um Namespace. Pods nos Namespaces correspondentes usam esta configuração.
Se
podSelectorenamespaceSelectorestiverem configurados, os pods que corresponderem a todas as regras usarão esta configuração.Garanta uma correspondência única. Múltiplas correspondências resultam em seleção arbitrária.
vSwitchOptions
-
Os vSwitches para os pods. Os IDs de vSwitch especificados têm relação OR; cada pod usa apenas um vSwitch, e o Terway seleciona aquele que atende às condições.
Os pods ficam restritos às mesmas zonas dos vSwitches especificados.
As zonas dos vSwitches devem corresponder às zonas dos nós de destino e deve haver endereços IP suficientes disponíveis. Caso contrário, a criação do pod falhará.
NotaCom o auto scaling ativado, as restrições de zona do vSwitchOptions podem impedir o scale-out do node pool. Consulte Auto scaling FAQ.
vSwitchSelectOptions
(Configura a política de seleção de vSwitch)
vSwitchSelectionPolicy
Valores válidos:
ordered(padrão): Seleciona na ordem inserida.most: Prioriza o vSwitch com mais IPs disponíveis.random: Seleciona aleatoriamente um vSwitch.
NotaSuportado no Terway v1.11.0 e posteriores.
securityGroupIDs
-
Suporta múltiplos IDs de grupo de segurança (todos entram em vigor). Máximo: 10.
NotaO Terway v1.13.6 e posteriores suportam até 10 grupos de segurança.
eniOptions
(Configura o tipo de ENI usado pelo pod)
eniType
Valores válidos:
Default: Trunk ENI para clusters com ENI compartilhada, ENI exclusiva para clusters com ENI exclusiva.ENI: Usa uma ENI exclusiva.Trunk: Usa uma Trunk ENI.
NotaSuportado no Terway v1.11.0 e posteriores.
-
Clique em Create.
Após criar um recurso PodNetworking, o Terway sincroniza a configuração de rede. O PodNetworking entra em vigor somente depois que seu
statusse tornarReady.Verifique se o status do recurso é
ready:kubectl describe PodNetworking example # Replace example with the name of your custom resource.
(Opcional) Etapa 3: Adicionar rótulos correspondentes a um namespace
Para aplicar regras PodNetworking via correspondência de rótulos, adicione os rótulos correspondentes ao namespace de destino.
-
Crie um namespace de teste chamado example:
kubectl create ns example -
Adicione o rótulo
foo=barao namespace:kubectl label namespaces example foo=bar # Replace example with your target namespace name. -
Visualize os rótulos do namespace:
kubectl get namespace example --show-labels # Replace example with your target namespace name.Saída esperada:
NAME STATUS AGE LABELS example Active 24s foo=bar,kubernetes.io/metadata.name=example
(Opcional) Etapa 4: Criar um pod de aplicação
Quando um pod é criado, o sistema compara seus rótulos com os recursos PodNetworking. Os pods correspondentes recebem uma ENI conforme a configuração encontrada; os demais usam a ENI padrão.
O Terway cria um recurso personalizado PodENI para rastrear os recursos de rede de cada pod correspondente. Consulte Labels and Selectors.
-
Crie um arquivo chamado my-nginx.yaml com o seguinte conteúdo YAML:
apiVersion: apps/v1 kind: StatefulSet metadata: name: my-nginx # The name of the sample application. namespace: example # Specify the namespace as example. labels: app: nginx spec: serviceName: "nginx-service" replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx foo: bar # Add the foo:bar label to the pod. spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80 # If the StatefulSet requires persistent storage, you must define volumeClaimTemplates. # Example: # volumeClaimTemplates: # - metadata: # name: nginx-storage # spec: # accessModes: ["ReadWriteOnce"] # storageClassName: "my-storage-class" # resources: # requests: # storage: 1Gi -
Implante a aplicação de exemplo my-nginx. Após a implantação, consulte Verify PodNetworking usage para verificar a configuração de rede.
kubectl apply -f my-nginx.yaml
Parar o terway-controlplane para migração
Não é possível migrar diretamente um ACK dedicated cluster com configurações personalizadas de pod para um ACK managed Pro cluster. Pare o terway-controlplane antes da migração e reative-o posteriormente.
-
Prepare a migração.
-
Pare o terway-controlplane:
kubectl scale deploy -nkube-system terway-controlplane --replicas 0 -
Configure o webhook:
# Back up the webhook configuration. kubectl get mutatingwebhookconfigurations.admissionregistration.k8s.io terway-controlplane -oyaml > terway-controlplane.mutatingwebhookconfigurations.yaml kubectl get validatingwebhookconfigurations.admissionregistration.k8s.io terway-controlplane -oyaml > terway-controlplane.validatingwebhookconfigurations.yaml # Clean up the webhook configuration. kubectl delete -f terway-controlplane.mutatingwebhookconfigurations.yaml kubectl delete -f terway-controlplane.validatingwebhookconfigurations.yaml -
Configure o service:
# Back up the original service configuration. kubectl get service -nkube-system terway-controlplane -oyaml > terway-controlplane.service.yaml # Clean up the original service configuration. kubectl delete -f terway-controlplane.service.yaml
-
-
Após a migração, verifique o resultado.
-
Se a migração falhar, restaure o webhook e o terway-controlplane:
# Restore the service configuration. kubectl apply -f terway-controlplane.service.yaml # Restore the webhook configuration. kubectl apply -f terway-controlplane.mutatingwebhookconfigurations.yaml kubectl apply -f terway-controlplane.validatingwebhookconfigurations.yaml # Restore terway-controlplane. kubectl scale deploy -nkube-system terway-controlplane --replicas 1 -
Se a migração for bem-sucedida, limpe os recursos:
kubectl delete deploy -nkube-system terway-controlplane
-
Instale o terway-controlplane na página Add-ons. Consulte Manage add-ons.
Perguntas frequentes
Verificar uso do PodNetworking
-
Após a criação, as
annotationsdo pod incluemk8s.aliyun.com/pod-networkingpara indicar o uso do PodNetworking.apiVersion: v1 kind: Pod metadata: annotations: k8s.aliyun.com/pod-eni: "true" k8s.aliyun.com/pod-networking: podnetworking labels: app: example pod-ip: elastic -
O Terway cria um recurso PodENI (mesmo nome/namespace do pod) para registrar sua configuração de rede.
kubectl get podenis.network.alibabacloud.com <my-nginx-0> -n <example> -o yaml # Replace <my-nginx-0> with the pod name and <example> with the pod's namespace.Saída esperada mostrando o PodNetworking em uso:
apiVersion: network.alibabacloud.com/v1beta1 kind: PodENI metadata: finalizers: - pod-eni generation: 1 name: <my-nginx-0> namespace: default spec: allocations: - allocationType: type: Elastic eni: id: eni-bp1xxxx mac: 00:16:xx:xx:xx:xx securityGroupIDs: - sg-bp1xxxx vSwitchID: vsw-bp1xxxx zone: cn-hangzhou-h ipv4: 192.168.x.x ipv4CIDR: 192.168.x.x/19 ipv6: 2408:x:x:x:x:x:x:x ipv6CIDR: 2408:x:x:x::/64 zone: cn-hangzhou-h status: eniInfos: eni-bp1xxxx: id: eni-bp1xxxx status: Bind vid: 1001 instanceID: i-bp1xxxx phase: Bind podLastSeen: "2021-xx-xxT00:00:00Z" trunkENIID: eni-bp1xxxx
O pod não usa a configuração PodNetworking
Verifique se o status do PodNetworking é
Ready.Confirme se os rótulos do pod correspondem unicamente ao seletor PodNetworking.
A política de IP estático aplica-se apenas a pods gerenciados por StatefulSet.
Documentos relacionados
Para políticas flexíveis de firewall de pod, configure multiple security groups for an ENI.
Para problemas de rede de contêiner, consulte Container network FAQ.