NetworkAttachmentDefinition
Cenário
- Vincular um contêiner com uma sub-rede: o endereço IP do pod é restrito em um bloco CIDR específico. Namespaces diferentes podem ser isolados uns dos outros.
- Vincular um contêiner a um grupo de segurança: as regras de grupo de segurança podem ser definidas para pods no mesmo namespace para personalizar as políticas de acesso.
Restrições
- NetworkAttachmentDefinition está disponível somente em clusters do CCE Turbo de v1.23.8-r0, v1.25.3-r0 e posterior.
- Somente default-network oferece suporte ao pré-aquecimento da ENI. As sub-redes de contêiner definidas pelo usuário não oferecem suporte ao pré-aquecimento da ENI. Se o pré-aquecimento da ENI não estiver habilitado, a criação da instância de carga de trabalho ficará mais lenta. Portanto, essa função não é aplicável a cenários de criação de pods de alto desempenho.
- Para excluir um NetworkAttachmentDefinition exclua pods (com a anotação chamada cni.yangtse.io/network-status) criados usando a configuração no namespace correspondente primeiro. Para mais detalhes, consulte Excluir uma configuração de rede.
Usar o console do CCE
- Efetue logon no console do CCE.
- Clique no nome do cluster para acessar o console do cluster. Escolha System Configuration no painel de navegação e clique na guia Network Configuration.
Figura 1 Configurações da rede
Cada cluster tem uma default-network para namespaces sem sub-redes de contêiner. A sub-rede de contêiner padrão exibida nas informações de rede na área de configuração de rede é a sub-rede de contêiner em default-network. A default-network não pode ser excluída.
- Clique em Create Network Configurations no canto superior direito. Configure os parâmetros básicos na caixa de diálogo exibida.
- Name: insira um nome que contenha no máximo 253 caracteres. Não use default-network, default, mgnt0 e mgnt1.
- Namespace: selecione um namespace. Os namespaces de diferentes configurações devem ser exclusivos. Se nenhum namespace estiver disponível, clique em Create Namespace para criar um.
- Pod Subnet: selecione uma sub-rede. Se nenhuma sub-rede estiver disponível, clique em Create Subnet para criar uma sub-rede. Depois que a sub-rede for criada, clique no botão de atualizar. Um máximo de 20 sub-redes podem ser selecionadas.
- Associate Security Group: o valor padrão é o grupo de segurança da ENI do contêiner. Você também pode clicar em Create Security Group para criar um. Depois que o grupo de segurança for criado, clique no botão de atualizar. Um máximo de cinco grupos de segurança podem ser selecionados.
Figura 2 Criar uma configuração de rede
- Clique em Create. Após a conclusão da criação, você será redirecionado para a lista de configuração de rede. Você pode ver que a sub-rede recém-adicionada está na lista.
Usar o kubectl
Esta seção descreve como criar um NAD usando kubectl.
- Use o kubectl para se conectar ao cluster. Para mais detalhes, consulte Conexão a um cluster usando o kubectl.
- Modifique o arquivo networkattachment-test.yaml.
vi networkattachment-test.yaml
apiVersion: k8s.cni.cncf.io/v1 kind: NetworkAttachmentDefinition metadata: annotations: yangtse.io/project-id: 05e38** name: example namespace: kube-system spec: config: '{ "type":"eni-neutron", "args":{ "securityGroups":"41891**", "subnets":[ { "subnetID":"27d95**" } ] }, "selector":{ "namespaceSelector":{ "matchLabels":{ "kubernetes.io/metadata.name":"default" } } } }'
Tabela 1 Parâmetros principais Parâmetro
Obrigatório
Tipo
Descrição
apiVersion
Sim
String
Versão da API. O valor é fixado em k8s.cni.cncf.io/v1.
kind
Sim
String
Tipo do objeto a ser criado. O valor é fixado em NetworkAttachmentDefinition.
yangtse.io/project-id
Sim
String
ID do projeto.
name
Sim
String
Nome do item de configuração.
namespace
Sim
String
Namespace do recurso de configuração. O valor é fixado para kube-system.
config
Sim
Objeto de Tabela 2
Conteúdo de configuração, que é uma cadeia no formato JSON.
Tabela 2 Parâmetros de config Parâmetro
Obrigatório
Tipo
Descrição
type
Sim
String
O valor é fixado em eni-neutron.
args
Não
object
Parâmetros de configuração.
selector
Não
Tabela 4 object
Namespace no qual a configuração entra em vigor.
Tabela 3 Parâmetros de args Parâmetro
Obrigatório
Tipo
Descrição
securityGroups
Não
String
ID do grupo de segurança. Se nenhum grupo de segurança estiver planejado, selecione o mesmo grupo de segurança que está em default-network.
Obter o valor:
Efetue logon no console da VPC. No painel de navegação à esquerda, escolha Access Control > Security Groups. Clique no nome do grupo de segurança de destino e copie o ID na página da guia Summary.
subnets
Sim
Array of subnetID Objects
Lista de IDs de sub-rede de contêiner. Pelo menos um ID de sub-rede deve ser inserido. O formato é o seguinte:
[{"subnetID":"27d95**"},{"subnetID":"827bb**"},{"subnetID":"bdd6b**"}]
ID de sub-rede não usado pelo cluster na mesma VPC.
Obter o valor:
Efetue logon no console da VPC. No painel de navegação, escolha Virtual Private Cloud > Subnets. Clique no nome da sub-rede de destino e copie o Subnet ID na página de guia Summary.
Tabela 4 Parâmetros de selector Parâmetro
Obrigatório
Tipo
Descrição
namespaceSelector
Não
matchLabels Object
Um seletor padrão do Kubernetes. Insira o rótulo do namespace no seguinte formato:
"matchLabels":{ "kubernetes.io/metadata.name":"default" }
Os namespaces de diferentes configurações não podem se sobrepor.
- Crie um NetworkAttachmentDefinition.
kubectl create -f networkattachment-test.yaml
Se informações semelhantes às seguintes forem exibidas, o NetworkAttachmentDefinition foi criado.
networkattachmentdefinition.k8s.cni.cncf.io/example created
Excluir uma configuração de rede
Você pode deletar a nova configuração de rede ou exibir seu arquivo YAML.
Antes de excluir uma configuração de rede, exclua o contêiner correspondente à configuração. Caso contrário, a exclusão falha.
- Execute o comando a seguir para filtrar o pod que usa a configuração no cluster (example é um nome de configuração de exemplo e você deve substituí-lo):
kubectl get po -A -o=jsonpath="{.items[?(@.metadata.annotations.cni\.yangtse\.io/network-status=='[{\"name\":\"example\"}]')]['metadata.namespace', 'metadata.name']}"
A saída do comando contém o nome do pod e o namespace associados à configuração.
- Exclua o proprietário do pod. O proprietário pode ser uma Implementação, um StatefulSet ou uma Tarefa.