Configuração de um EIP para um pod
Cenários
No Cloud Native Network 2.0, os pods usam ENIs da VPC ou sub-ENIs para rede. Você pode vincular diretamente EIPs a pods.
Para associar um EIP a um pod, basta definir o valor da anotação yangtse.io/pod-with-eip como true ao criar o pod. Em seguida, o EIP é automaticamente alocado e vinculado ao pod.
Restrições
- Para usar um EIP estático ou um EIP alocado automaticamente, envie um tíquete de serviço para solicitar a permissão para criar e excluir APIs do EIP v3.
- Você pode configurar um EIP para um pod somente em clusters do CCE Turbo das seguintes versões:
- v1.19: v1.19.16-r20 ou mais recente
- v1.21: v1.21.10-r0 ou mais recente
- v1.23: v1.23.8-r0 ou mais recente
- v1.25: v1.25.3-r0 ou mais recente
- v1.25 ou mais recente
- Para acessar um pod vinculado a um EIP da Internet, adicione regras de grupo de segurança para permitir o tráfego de solicitação de destino.
- Apenas um EIP pode ser vinculado a um pod.
- Configure a anotação relacionada ao EIP ao criar um pod. Depois que o pod é criado, as anotações relacionadas ao EIP não podem ser modificadas.
- Não execute operações no EIP associado a um pod por meio do console ou da API do EIP. Caso contrário, o EIP pode funcionar mal. As operações incluem alterar o nome do EIP, excluir, desvincular ou vincular o EIP e alterar o modo de cobrança do EIP.
- Depois que um EIP alocado automaticamente é excluído manualmente, a rede funciona mal. Neste caso, reconstrua o pod.
Alocar um EIP com um Pod
Ao criar um pod, defina a anotação pod-with-eip como true. Um EIP será automaticamente alocado e vinculado ao pod.
O seguinte usa uma implantação chamada nginx como um exemplo. Para obter detalhes sobre anotações, consulte Tabela 1.
- Para um EIP alocado automaticamente com uma largura de banda dedicada ao criar uma Implementação, não é necessário especificar o ID da largura de banda. O seguinte mostra um exemplo:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx annotations: yangtse.io/pod-with-eip: "true" # An EIP will be automatically allocated when the pod is created. yangtse.io/eip-bandwidth-size: "5" # EIP bandwidth yangtse.io/eip-network-type: 5_bgp # EIP type yangtse.io/eip-charge-mode: bandwidth # EIP billing mode yangtse.io/eip-bandwidth-name: <eip_bandwidth_name> # EIP bandwidth name spec: containers: - name: container-0 image: nginx:alpine resources: limits: cpu: 100m memory: 200Mi requests: cpu: 100m memory: 200Mi imagePullSecrets: - name: default-secret
- Para um EIP alocado automaticamente com uma largura de banda compartilhada quando você cria uma Implementação, é necessário especificar o ID da largura de banda. O seguinte mostra um exemplo:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx annotations: yangtse.io/pod-with-eip: "true" # An EIP will be automatically allocated when the pod is created. yangtse.io/eip-network-type: 5_bgp # EIP type yangtse.io/eip-bandwidth-id: <eip_bandwidth_id> # Shared bandwidth ID of the EIP spec: containers: - name: container-0 image: nginx:alpine resources: limits: cpu: 100m memory: 200Mi requests: cpu: 100m memory: 200Mi imagePullSecrets: - name: default-secret
Anotação |
Obrigatório |
Valor padrão |
Descrição |
Value Range |
---|---|---|---|---|
yangtse.io/pod-with-eip |
Sim |
false |
Se alocar um EIP com um pod e vincular o EIP ao pod |
false ou true |
yangtse.io/eip-bandwidth-size |
Não |
5 |
Largura de banda, em Mbit/s |
1 Mbit/s a 2000 Mbit/s por padrão O intervalo específico varia de acordo com as regiões. Para obter detalhes, consulte o console do EIP. |
yangtse.io/eip-network-type |
Não |
5_bgp |
Tipo de EIP |
|
yangtse.io/eip-charge-mode |
Obrigatório quando é utilizada uma largura de banda dedicada |
Nenhum |
Faturado por tráfego ou largura de banda Se uma largura de banda compartilhada for usada, esse parâmetro poderá ser deixado em branco. |
|
yangtse.io/eip-bandwidth-id |
Obrigatório quando uma largura de banda compartilhada é usada |
Nenhum |
ID de uma largura de banda existente Se você especificar esse parâmetro, só poderá configurar um tipo do EIP, que é opcional. Se uma largura de banda dedicada for usada, esse parâmetro poderá ser deixado em branco. |
Nenhuma |
yangtse.io/eip-bandwidth-name |
Não |
Nome do pod |
Nome da largura de banda |
|
Verificar se o EIP vinculado ao pod está disponível
Depois que um EIP é alocado a um pod, o controlador de rede de contêiner vincula o EIP ao pod e grava o resultado da alocação de volta na anotação yangtse.io/allocated-ipv4-eip do pod. O tempo de inicialização dos contêineres de serviço do pod pode ser anterior ao momento em que o resultado de alocação do EIP é gravado de volta.
Você pode configurar um contêiner init para o pod, associar a anotação yangtse.io/allocated-ipv4-eip ao contêiner init por meio de um volume downwardAPI e verificar se o EIP foi alocado no contêiner init. Você pode configurar o contêiner init da seguinte maneira:
apiVersion: v1 kind: Pod metadata: name: example annotations: yangtse.io/pod-with-eip: "true" yangtse.io/eip-bandwidth-size: "5" yangtse.io/eip-network-type: 5_bgp yangtse.io/eip-charge-mode: bandwidth yangtse.io/eip-bandwidth-name: "xxx" spec: initContainers: - name: init image: busybox:latest command: ['timeout', '60', 'sh', '-c', "until grep -E '[0-9]+' /etc/eipinfo/allocated-ipv4-eip; do echo waiting for allocated-ipv4-eip; sleep 2; done"] volumeMounts: - name: eipinfo mountPath: /etc/eipinfo volumes: - name: eipinfo downwardAPI: items: - path: "allocated-ipv4-eip" fieldRef: fieldPath: metadata.annotations['yangtse.io/allocated-ipv4-eip'] ...
Excluir um EIP com um pod
Quando você excluir um pod, o EIP alocado automaticamente para o pod também será excluído.