Em clusters Kubernetes, os endereços IP dos pods são geralmente privados. O Terway e o ack-extend-network-controller permitem associar um Elastic IP Address (EIP) diretamente a um pod. Assim, o pod obtém uma saída pública independente, sem compartilhar tráfego com outros pods.
Pré-requisitos
Use um ACK Managed cluster ou um ACK Dedicated cluster com o plugin de rede Terway. Para criar um cluster, consulte Criar um ACK Managed cluster e Criar um ACK Dedicated cluster (A criação de novos clusters não é mais suportada). Para obter detalhes sobre o modo de rede Terway, visualize Usar o plugin de rede Terway.
Desde novembro de 2023, o Terway não mantém mais o recurso de EIP; a versão v1.7.0 o removeu. Use o ack-extend-network-controller para associar EIPs independentes aos pods. Consulte Migrar o recurso de EIP do Terway para o ack-extend-network-controller.
Limitações
Antes de usar um EIP, revise seus limites. Consulte Limites.
Este recurso é suportado apenas em nós ECS.
-
O add-on gerencia o ciclo de vida dos EIPs criados pelo controller. Se você desinstalar o componente após atribuir um EIP a um pod, o EIP permanecerá alocado e não será liberado automaticamente.
Antes de interromper o componente, exclua os pods que usam EIPs. Verifique o status de alocação e liberação do EIP inspecionando o recurso
podeips.alibabacloud.comcorrespondente ao nome do pod. Confirme que o EIP não está mais em uso antes de desativar o recurso de EIP; caso contrário, a cobrança continuará.
Faturamento
A ativação do Terway e do ack-extend-network-controller é gratuita, mas os recursos de nuvem consumidos geram cobranças. Consulte Faturamento de recursos de nuvem para obter detalhes sobre o faturamento do ACK.
Contexto
No modo de rede Terway, os pods normalmente acessam a rede pública por meio de SNAT do host ou SNAT externo via EIP, com Services do tipo LoadBalancer roteando o tráfego de entrada. Alguns cenários exigem um endereço IP público independente. Por exemplo:
Um pod expõe serviços em portas aleatórias, comum em aplicações baseadas em UDP, como servidores de jogos e teleconferência. O RTSP, por exemplo, usa uma porta diferente para cada cliente.
Um pod necessita de uma saída pública dedicada para evitar contenção com outros pods.
Etapa 1: Configure permissões RAM para EIPs
ack-extend-network-controller (Recommended)
-
Conceder permissões RAM para um ACK managed cluster ou um ACK dedicated cluster
-
Crie uma política de permissão personalizada com o seguinte conteúdo. Consulte Etapa 1: Criar uma política de permissão personalizada.
{ "Effect": "Allow", "Action": [ "vpc:DescribeVSwitches", "vpc:AllocateEipAddress", "vpc:AllocateEipAddressPro", "vpc:DescribeEipAddresses", "vpc:AssociateEipAddress", "vpc:UnassociateEipAddress", "vpc:ReleaseEipAddress", "vpc:AddCommonBandwidthPackageIp", "vpc:RemoveCommonBandwidthPackageIp", "vpc:TagResources", "ecs:DescribeNetworkInterfaces" ], "Resource": [ "*" ], "Condition": {} } Conceda permissões à função RAM worker do cluster. Consulte Etapa 2: Conceder permissões à função RAM worker do cluster.
-
Terway
O Terway requer permissões relacionadas a EIP e configurações adicionais para atribuir EIPs aos pods.
-
Conceder permissões RAM para um ACK managed cluster ou um ACK basic managed cluster criado em junho de 2020 ou posteriormente
-
Crie uma política de permissão personalizada com o seguinte conteúdo. Consulte Etapa 1: Criar uma política de permissão personalizada.
{ "Effect": "Allow", "Action": [ "vpc:DescribeVSwitches", "vpc:AllocateEipAddress", "vpc:DescribeEipAddresses", "vpc:AssociateEipAddress", "vpc:UnassociateEipAddress", "vpc:ReleaseEipAddress", "vpc:AddCommonBandwidthPackageIp", "vpc:RemoveCommonBandwidthPackageIp" ], "Resource": [ "*" ], "Condition": {} } Conceda permissões à função RAM worker do cluster. Consulte Etapa 2: Conceder permissões à função RAM worker do cluster.
-
-
Conceder permissões RAM para um ACK dedicated cluster ou um ACK managed cluster criado antes de junho de 2020
-
Crie uma política de permissão personalizada com o seguinte conteúdo. Consulte Etapa 1: Criar uma política de permissão personalizada.
{ "Effect": "Allow", "Action": [ "vpc:DescribeVSwitches", "vpc:AllocateEipAddress", "vpc:DescribeEipAddresses", "vpc:AssociateEipAddress", "vpc:UnassociateEipAddress", "vpc:ReleaseEipAddress", "vpc:AddCommonBandwidthPackageIp", "vpc:RemoveCommonBandwidthPackageIp" ], "Resource": [ "*" ], "Condition": {} } Na aba Policies da página da função RAM AliyunCSManagedNetworkRole, clique em Grant Permission. Em seguida, clique em Custom Policy, selecione a política de permissão personalizada criada e clique em OK.
-
Etapa 2: Instale ou atualize um plugin de cluster
Não ative o recurso de EIP simultaneamente no ack-extend-network-controller e no Terway. Isso pode causar alocações duplicadas de EIP e falhas de vinculação. Use o ack-extend-network-controller.
Comparação de plugins
|
Item |
ack-extend-network-controller |
Terway |
|
Tipos de cluster suportados |
|
|
|
EIP estático |
Suportado |
Não suportado |
|
Fase de configuração |
Após a atribuição de um IP ao pod, o controller atribui e vincula um EIP. |
Atribui e vincula um EIP durante a execução do CNI. |
|
Versões suportadas |
Versão do plugin v0.2.0 ou posterior. |
Versão do plugin Terway v1.0.10.280-gdc2cb6c-aliyun ou posterior, mas anterior à v1.7.0. |
Instale ou atualize um plugin
Para o ack-extend-network-controller, instale-o a partir do Marketplace e ative o controller de EIP. Para o Terway, atualize para a versão v1.0.10.280-gdc2cb6c-aliyun ou posterior.
ack-extend-network-controller (recommended)
Faça login no console ACK. No painel de navegação à esquerda, clique em .
Na página Marketplace, pesquise por
ack-extend-network-controllere clique na aplicação desejada.Na página de detalhes da aplicação, clique em Deploy no canto superior direito.
-
No painel Create, selecione um cluster e namespace e clique em Next.
-
Na página OK, selecione uma versão, configure os parâmetros e clique em OK.
A tabela a seguir descreve os parâmetros.
Parâmetro
Tipo
Obrigatório
Descrição
clusterID
string
Sim
O ID do cluster.
regionID
string
Sim
A região do cluster.
enableControllers
[]string
Sim
Defina como
eippara ativar o recurso de EIP.networkController.vpcID
string
Sim
O ID da VPC do cluster.
networkController.eipController.maxConcurrentReconciles
int
Não
O número de reconciliações simultâneas para o controller de EIP.
networkController.eipController.garbageCollectionPeriodInMinutes
int
Não
O intervalo, em minutos, para a coleta de lixo de EIPs estáticos.
networkController.customStatefulWorkloadKinds
[]string
Não
Os tipos de controllers stateful personalizados.
enableVirtualNode
bool
Não
Ativa o suporte a nó virtual ECI.
ImportanteSe você ativar este recurso, o controller atribuirá EIPs aos pods em instâncias ECI. A annotation configurada no pod não pode ser igual àquela usada para o recurso de EIP suportado pelo ECI. Use este recurso com cautela.
enableRRSA
bool
Não
Ativa o RRSA para autenticação.
NotaSuportado pelo plugin ack-extend-network-controller v0.10.0 e posterior.
A configuração do RRSA suporta apenas o método de injeção ack-pod-identity-webhook. Para detalhes de configuração, consulte Usar RRSA para configurar permissões RAM para uma ServiceAccount e isolar permissões de pod.
rrsaRoleName
string
Não
O nome da função.
NotaSuportado pelo plugin ack-extend-network-controller v0.10.0 e posterior.
credential.accessKey
string
Não
O AccessKey ID da conta com permissões para associar EIPs.
Este parâmetro não é necessário se você concluiu a configuração na Etapa 1: Configure as permissões RAM necessárias para associar um EIP.
ImportanteNão recomendado, pois este método armazena informações sensíveis em um Secret do Kubernetes.
credential.accessSecret
string
Não
O AccessKey Secret da conta com permissões para associar EIPs.
Este parâmetro não é necessário se você concluiu a configuração na Etapa 1: Configure as permissões RAM necessárias para associar um EIP.
ImportanteNão recomendado, pois este método armazena informações sensíveis em um Secret do Kubernetes.
kubeClientQPS
float32
Não
Limite de QPS quando o componente acessa o servidor de API do cluster.
NotaSuportado pelo plugin ack-extend-network-controller v0.12.2 e posterior.
kubeClientBurst
int
Não
Número máximo de requisições em rajada para o servidor de API do cluster.
NotaSuportado pelo plugin ack-extend-network-controller v0.12.2 e posterior.
Exemplo de configuração:
clusterID: "c11ba338192xxxxxxx" regionID: "cn-hangzhou" vpcID: "vpc-bp1rkq0zxxxxxx" enableControllers: - eip networkController: eipController: maxConcurrentReconciles: 1 garbageCollectionPeriodInMinutes: 1 customStatefulWorkloadKinds: - foo credential: accessKey: "" accessSecret: ""
-
Para atualizar a versão e os parâmetros do ack-extend-network-controller, consulte Modifique um chart Helm.
Terway
Se o seu cluster usa o Terway, atualize o terway-eni ou terway-eniip para uma versão que suporte EIPs. Consulte Gerencie componentes.
A versão do plugin Terway deve ser v1.0.10.280-gdc2cb6c-aliyun ou posterior, mas anterior à v1.7.0. Consulte Terway para detalhes sobre versões.
Etapa 3: Ative o recurso de EIP
Annotations de EIP
Use annotations de pod para ativar EIPs: atribua um automaticamente a um pod ou associe um EIP existente.
Automatically assign an EIP
A atribuição automática de EIP pode criar e liberar EIPs repetidamente durante a recriação de pods ou falhas de CNI. Especifique um EIP existente como alternativa.
|
Annotations de pod |
Valor |
|
network.alibabacloud.com/pod-with-eip k8s.aliyun.com/pod-with-eip |
Especifica se deve criar e associar automaticamente um EIP. Valores válidos:
|
|
k8s.aliyun.com/eci-with-eip (Compatível) |
|
|
network.alibabacloud.com/eip-bandwidth k8s.aliyun.com/eip-bandwidth |
Esta annotation aplica-se apenas ao criar um EIP. Especifica a largura de banda de pico do EIP em Mbps. Consulte Solicitar um EIP. |
|
network.alibabacloud.com/eip-internet-charge-type k8s.aliyun.com/eip-internet-charge-type |
Esta annotation aplica-se apenas ao criar um EIP. Especifica o método de medição do EIP. Valores válidos:
Consulte Solicitar um EIP. |
|
k8s.aliyun.com/eip-charge-type (Compatível) |
|
|
network.alibabacloud.com/eip-instance-charge-type k8s.aliyun.com/eip-instance-charge-type |
Esta annotation aplica-se apenas ao criar um EIP. Especifica o método de faturamento do EIP. Valores válidos:
Consulte Solicitar um EIP. Nota
Esta annotation é suportada apenas pelo ack-extend-network-controller. A opção PrePaid (assinatura) não é suportada. |
|
network.alibabacloud.com/eip-common-bandwidth-package-id k8s.aliyun.com/eip-common-bandwidth-package-id |
ID do EIP Bandwidth Plan a ser associado. Nota
Este recurso requer Terway v1.2.3 ou posterior. Não há restrições de versão para o componente ack-extend-network-controller. |
|
network.alibabacloud.com/eip-isp k8s.aliyun.com/eip-isp |
Esta annotation aplica-se apenas ao criar um EIP. Especifica o tipo de linha do EIP. Valores válidos:
Consulte Solicitar um EIP. Nota
Este recurso requer Terway v1.2.3 ou posterior. Não há restrições de versão para o componente ack-extend-network-controller. |
|
network.alibabacloud.com/eip-public-ip-address-pool-id k8s.aliyun.com/eip-public-ip-address-pool-id |
Esta annotation aplica-se apenas ao criar um EIP. Especifica o ID do pool de endereços IP. Consulte Pools de endereços IP para limites e procedimentos. Nota
Isso é suportado apenas pelo ack-extend-network-controller. |
|
network.alibabacloud.com/eip-resource-group-id k8s.aliyun.com/eip-resource-group-id |
Esta annotation aplica-se apenas ao criar um EIP. Especifica o ID do grupo de recursos para o EIP. Consulte Solicitar um EIP. Nota
Isso é suportado pelo ack-extend-network-controller v0.4.0 e posterior. |
|
network.alibabacloud.com/eip-name k8s.aliyun.com/eip-name |
Esta annotation aplica-se apenas ao criar um EIP. Especifica o nome do EIP. Consulte Solicitar um EIP. Nota
Isso é suportado pelo ack-extend-network-controller v0.6.0 e posterior. |
|
network.alibabacloud.com/eip-description k8s.aliyun.com/eip-description |
Esta annotation aplica-se apenas ao criar um EIP. Especifica a descrição do EIP. Consulte Solicitar um EIP. Nota
Isso é suportado pelo ack-extend-network-controller v0.6.0 e posterior. |
|
network.alibabacloud.com/eip-security-protection-types k8s.aliyun.com/eip-security-protection-types |
Esta annotation aplica-se apenas ao criar um EIP. Especifica o nível de proteção de segurança para o EIP. EIPs com Anti-DDoS ativado são suportados.
Para especificar vários níveis de proteção, separe-os com vírgula ( Nota
Isso é suportado pelo ack-extend-network-controller v0.9.0 e posterior. |
|
network.alibabacloud.com/eip-tags k8s.aliyun.com/eip-tags |
Esta annotation aplica-se apenas ao criar um EIP. Especifica tags para adicionar ao EIP. O valor deve ser uma string JSON válida. Consulte Gerencie tags. Exemplo: Nota
Isso é suportado pelo ack-extend-network-controller v0.11.0 e posterior. |
Specify an EIP instance
Especifique o ID da instância de EIP em uma annotation de pod para associar um EIP existente. A annotation apenas vincula o EIP; ela não altera a configuração do EIP.
Este recurso não é adequado para controllers de múltiplas réplicas, como Deployments. Apenas um pod pode referenciar cada instância de EIP. Use-o com workloads stateful, como StatefulSets.
|
Annotations de pod |
Valor |
|
network.alibabacloud.com/pod-eip-instanceid k8s.aliyun.com/pod-eip-instanceid |
O ID da instância de EIP a ser associada, por exemplo, eip-bp14qxxxxxxx. Importante
Não atribua a mesma instância de EIP a pods com nomes diferentes. Após a exclusão de um pod, o controller de EIP desassocia o EIP. Durante esse período, você não pode usar a mesma instância de EIP para um novo pod. Para verificar se a desassociação foi concluída, confirme que o recurso PodEIP com o mesmo nome do pod não existe mais. |
|
k8s.aliyun.com/eci-eip-instanceid (Compatível) |
Annotations de estratégia de liberação de EIP
Esta estratégia de liberação retém o EIP de um pod após sua recriação. Combine-a com a atribuição automática para manter EIPs persistentes em workloads stateful.
Este recurso é suportado apenas pelo ack-extend-network-controller e aplica-se somente a controllers de réplicas stateful. Não pode ser usado para controllers stateless.
Se você especificar um ID de instância de EIP, a instância de EIP não será liberada quando o pod for excluído.
|
Annotation de pod |
Valor |
|
network.alibabacloud.com/pod-eip-release-strategy k8s.aliyun.com/pod-eip-release-strategy |
A estratégia de liberação para o EIP do pod. Valores válidos:
Você também pode especificar um período de retenção. Expressões de duração no estilo Go são suportadas. Por exemplo, |
Ative EIP no ack-extend-network-controller ou Terway
Enable in ack-extend-network-controller
O ack-extend-network-controller chama APIs da Alibaba Cloud para criar recursos. Configure as permissões RAM, instale o componente a partir do Marketplace e use annotations para criar e associar EIPs aos pods.
Crie e associe EIPs com annotations
Use annotations no manifesto do pod para criar um EIP e associá-lo ao pod. Consulte FAQ para detalhes sobre annotations.
-
Crie uma aplicação e use annotations para criar e associar um EIP a um pod.
Deployment
Este manifesto cria um Deployment onde o ACK atribui automaticamente uma instância de EIP com largura de banda de pico de 5 Mbps para cada pod.
apiVersion: apps/v1 kind: Deployment metadata: name: example labels: app: example spec: replicas: 1 selector: matchLabels: app: example template: metadata: labels: app: example annotations: k8s.aliyun.com/pod-with-eip: "true" k8s.aliyun.com/eip-bandwidth: "5" spec: readinessGates: - conditionType: "k8s.aliyun.com/eip" containers: - name: example image: nginxApós a criação do pod, consulte o recurso
podeips.alibabacloud.comque possui o mesmo nome do pod para visualizar os detalhes do EIP atribuído.kubectl get podeip -n <namespace> <podname> -o yamlSaída esperada:
apiVersion: alibabacloud.com/v1beta1 kind: PodEIP metadata: creationTimestamp: "2023-12-15T04:25:37Z" finalizers: - podeip-controller.alibabacloud.com/finalizer generation: 1 name: example-xxx namespace: default resourceVersion: "222800" uid: 43xxx-f1xx-4xxx-b3xx-969faxxx spec: allocationID: eip-2ze2qe8zsxxx allocationType: releaseStrategy: Follow type: Auto status: eipAddress: 39.102.XX.XX internetChargeType: PayByTraffic isp: BGP networkInterfaceID: eni-2zeagv8f3xxxx podLastSeen: "2023-12-15T05:18:47Z" privateIPAddress: 192.168.XX.XX resourceGroupID: rg-acfmwxxxxxsq status: InUseStatefulSet
Use o seguinte manifesto para criar um StatefulSet com dois pods. Um EIP é atribuído automaticamente a cada pod, e a estratégia de liberação é definida para excluir o recurso PodEIP 10 minutos após a exclusão do pod correspondente.
apiVersion: apps/v1 kind: StatefulSet metadata: name: example labels: app: example spec: serviceName: "example" replicas: 2 selector: matchLabels: app: example template: metadata: labels: app: example annotations: k8s.aliyun.com/pod-with-eip: "true" k8s.aliyun.com/pod-eip-release-strategy: "10m" spec: containers: - name: example image: nginxApós a criação dos pods, consulte os recursos
podeips.alibabacloud.compara rastrear informações sobre os EIPs atribuídos.kubectl get podeip -n <namespace> -o yamlSaída esperada:
apiVersion: v1 items: - apiVersion: alibabacloud.com/v1beta1 kind: PodEIP metadata: creationTimestamp: "2023-12-15T03:28:01Z" finalizers: - podeip-controller.alibabacloud.com/finalizer generation: 1 name: example-0 namespace: default resourceVersion: "227221" uid: 79954xx-17xx-4dxx-b7xx-15b84xxx spec: allocationID: eip-2ze08metxxx allocationType: releaseAfter: 10m releaseStrategy: TTL type: Auto status: eipAddress: 39.105.XX.XX internetChargeType: PayByTraffic isp: BGP networkInterfaceID: eni-2ze4tkg4xxx podLastSeen: "2023-12-15T05:31:34Z" privateIPAddress: 192.168.XX.XX resourceGroupID: rg-acfmwxxx status: InUse - apiVersion: alibabacloud.com/v1beta1 kind: PodEIP metadata: creationTimestamp: "2023-12-15T03:28:03Z" finalizers: - podeip-controller.alibabacloud.com/finalizer generation: 1 name: example-1 namespace: default resourceVersion: "227222" uid: 1339xxxe7-97xx-46xx-9bxx-537690xxx spec: allocationID: eip-2zetwhffqxxx allocationType: releaseAfter: 10m releaseStrategy: TTL type: Auto status: eipAddress: 39.105.XX.XX internetChargeType: PayByTraffic isp: BGP networkInterfaceID: eni-2zeagv8f3wxxx podLastSeen: "2023-12-15T05:31:34Z" privateIPAddress: 192.168.XX.XX resourceGroupID: rg-acfmwqnwxxx status: InUse - apiVersion: alibabacloud.com/v1beta1 kind: PodEIP metadata: creationTimestamp: "2023-12-15T04:25:37Z" finalizers: - podeip-controller.alibabacloud.com/finalizer generation: 1 name: example-5bxxx-9xx namespace: default resourceVersion: "227220" uid: 43cdfxxx-f1xx-42xx-b3xx-969fxxx spec: allocationID: eip-2ze2qe8zsmnxxx allocationType: releaseStrategy: Follow type: Auto status: eipAddress: 39.102.XX.XX internetChargeType: PayByTraffic isp: BGP networkInterfaceID: eni-2zeagv8f3wxxx podLastSeen: "2023-12-15T05:31:34Z" privateIPAddress: 192.168.XX.XX publicIpAddressPoolID: pippool-2ze498cxxx resourceGroupID: rg-acfmwqnxxx status: InUse kind: List metadata: resourceVersion: ""Após a exclusão de um pod nesta aplicação stateful, seu recurso personalizado (CR) PodEIP é retido por 10 minutos antes de ser excluído. Se um pod com o mesmo nome for criado durante esse período, ele reutilizará o EIP correspondente.
-
Verifique a configuração.
Depois que o pod entrar no estado Running, verifique a annotation k8s.aliyun.com/allocated-eipAddress para visualizar o endereço de EIP atribuído e acessar o pod.
Enable in Terway
-
Implante a configuração do Terway para suportar o recurso de EIP.
-
Edite o ConfigMap do Terway.
kubectl edit cm eni-config -n kube-system -
Em eni_conf, adicione a seguinte linha.
"enable_eip_pool": "true"NotaPara forçar a desassociação de um EIP de sua instância atual ao associá-lo a uma nova, adicione o parâmetro "allow_eip_rob": "true" em eni_conf.
Após concluir a edição, pressione a tecla Esc, insira :wq! e pressione a tecla Enter para salvar as alterações e sair do modo de edição.
-
Recrie os pods do Terway para aplicar as alterações.
kubectl delete pod -n kube-system -l app=terway-eniip # If you installed the terway-eni component, replace terway-eniip with terway-eni.
-
-
Crie e associe um EIP a um pod usando annotations.
Use annotations no manifesto do pod para criar um EIP e associá-lo ao pod. Consulte Limites relacionados a EIP.
Automatically assign an EIP
Adicione estas annotations para atribuir automaticamente um EIP e especificar a largura de banda:
k8s.aliyun.com/pod-with-eip: "true": Atribui um EIP público dedicado ao pod.k8s.aliyun.com/eip-bandwidth: "5": Especifica a largura de banda do EIP. O padrão é 5 Mbps.
Manifesto de exemplo:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment-basic labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: annotations: network.alibabacloud.com/pod-with-eip: "true" # Automatically assign a public EIP to the Nginx container. network.alibabacloud.com/eip-bandwidth: "5" # Specify the bandwidth of the EIP. The default is 5 Mbps, which is consistent with the EIP default value. labels: app: nginx spec: containers: - name: nginx image: nginxSpecify an EIP
ImportanteComo um único EIP não pode ser associado a múltiplos pods, este método não é adequado para workloads como Deployments e StatefulSets que possuem mais de uma réplica.
Por padrão, se o EIP especificado já estiver associado a uma instância, a associação falhará. Para forçar a desassociação do EIP da instância anterior e associá-lo à nova, você deve definir "allow_eip_rob": "true" no ConfigMap conforme descrito anteriormente.
Você pode especificar um ID de instância de EIP apenas para workloads de réplica única. Por exemplo, um Deployment não pode ter mais de uma réplica.
Adicione a seguinte annotation para especificar um ID de instância de EIP para um pod:
k8s.aliyun.com/pod-eip-instanceid: "<your-eip-instance-id>" -
Verifique a configuração.
Depois que o pod entrar no estado Running, verifique a annotation network.alibabacloud.com/allocated-eipAddress para visualizar o endereço de EIP atribuído e acessar o pod.
FAQ
Pod pronto antes da vinculação do EIP
O controller atribui um EIP somente após a alocação de um IP ao pod, portanto, o pod pode ficar Ready antes que o EIP seja vinculado. Use os métodos a seguir para controlar o tempo.
Readiness gates
A configuração de readiness gates requer o ack-extend-network-controller.
Com readinessGates, o controller atualiza as condições do pod apenas após a vinculação do EIP, impedindo o status Ready até que a vinculação seja concluída.
kind: Pod
...
spec:
readinessGates:
- conditionType: "k8s.aliyun.com/eip"
status:
conditions:
- lastProbeTime: "2022-12-12T03:45:48Z"
lastTransitionTime: "2022-12-12T03:45:48Z"
reason: Associate eip succeed
status: "True"
type: k8s.aliyun.com/eip
...
Init container
Configure um init container para verificar a atribuição do EIP.
apiVersion: v1
kind: Pod
metadata:
name: example
annotations:
network.alibabacloud.com/pod-with-eip: "true"
spec:
containers:
- name: example
image: busybox:1.28
command: ['sh', '-c', 'echo The app is running! && sleep 3600']
initContainers:
- name: init
image: busybox:1.28
command: ['timeout', '-t' ,'60', 'sh','-c', "until grep -E '^k8s.aliyun.com\\/allocated-eipAddress=\\S?[0-9]+\\S?' /etc/podinfo/annotations; do echo waiting for annotations; sleep 2; done"]
volumeMounts:
- name: podinfo
mountPath: /etc/podinfo
volumes:
- name: podinfo
downwardAPI:
items:
- path: "labels"
fieldRef:
fieldPath: metadata.labels
- path: "annotations"
fieldRef:
fieldPath: metadata.annotations
Pod inacessível via EIP
Políticas restritivas de ACL frequentemente causam isso. Verifique estes controles de acesso:
Cloud Firewall: O tráfego de EIP está sujeito às regras de controle de acesso do Cloud Firewall. Permita o tráfego de entrada e saída para o EIP do pod e as portas de serviço. Consulte Configure políticas de controle de acesso para um firewall de internet.
Grupo de segurança do nó: Após a associação de um EIP a um pod, o grupo de segurança do nó ainda governa o tráfego. Permita o tráfego de entrada do IP do cliente para as portas de serviço do pod e qualquer tráfego de saída necessário. Consulte Configure grupos de segurança do cluster.