Por padrão, os endereços IPv6 dos pods são acessíveis apenas dentro de uma Virtual Private Cloud (VPC). Para expor um pod pela internet pública IPv6, atribua um plano de largura de banda IPv6 para internet ao endereço IPv6 do pod e, opcionalmente, configure uma regra apenas de saída. O componente ack-extend-network-controller realiza ambas as operações por meio de anotações no pod, sem exigir alterações no código da aplicação.
Como funciona
Cada pod em um cluster ACK dual-stack recebe um endereço IPv6 da sua VPC. Quando você adiciona a anotação k8s.aliyun.com/ipv6-bandwidth a um pod, o controlador ipv6gw chama a OpenAPI do Alibaba Cloud para alocar um plano de largura de banda IPv6 para internet e associá-lo a esse endereço. O tráfego IPv6 de entrada e saída é então roteado diretamente pelo gateway IPv6.
Para permitir apenas tráfego de saída, adicione a anotação k8s.aliyun.com/ipv6-egress-only. Isso cria uma regra apenas de saída no gateway IPv6.
Pré-requisitos
Antes de começar, certifique-se de que possui:
Um cluster ACK gerenciado ou cluster ACK dedicado com dual-stack IPv6 habilitado e o plugin de rede Terway instalado. Para instruções de configuração, consulte Criar um cluster ACK gerenciado e O que é um gateway IPv6?
Um gateway IPv6 criado na sua VPC e o controlador ipv6gw implantado. Consulte Criar e gerenciar um gateway IPv6
Apenas alguns tipos de instância ECS suportam IPv6. Verifique se seus nós utilizam um tipo de instância compatível antes de prosseguir. Consulte Famílias de instâncias.
Limitações
Apenas nós ECS padrão: O componente
ack-extend-network-controllersuporta apenas nós ECS padrão e pods. Não há suporte para instâncias ECI ou ACS. Para esses tipos de instância, consulte Atribuir endereços IPv6 a pods ECI e Atribuir endereços IPv6 a pods ACS.Cotas do gateway IPv6 se aplicam: Os limites de largura de banda e o número de entradas de configuração estão sujeitos às cotas do gateway IPv6. Consulte Limites.
Habilitar recursos do gateway IPv6
Etapa 1: Configurar permissões RAM
Conceda à função RAM do Worker as permissões necessárias para o controlador ipv6gw.
Faça login no ACK console. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em Cluster Information.
Na aba Basic Information, clique no link ao lado de Worker RAM Role.
-
Crie uma política personalizada com o conteúdo a seguir. Para instruções, consulte Etapa 1: Criar uma política personalizada.
{ "Effect": "Allow", "Action": [ "vpc:DescribeIpv6Addresses", "vpc:CreateIpv6EgressOnlyRule", "vpc:DeleteIpv6EgressOnlyRule", "vpc:DescribeIpv6EgressOnlyRules", "vpc:AllocateIpv6InternetBandwidth", "vpc:DeleteIpv6InternetBandwidth" ], "Resource": ["*"], "Condition": {} } Anexe a política personalizada à função RAM do Worker. Consulte Etapa 2: Conceder permissões à função RAM do Worker do cluster.
Etapa 2: Instalar e configurar o componente ack-extend-network-controller
Instale o ack-extend-network-controller no ACK Marketplace e ative o controlador ipv6gw. Para instruções de instalação, consulte Marketplace.
Use a configuração a seguir ao instalar o componente. Substitua os valores de exemplo pelo ID do cluster, região e ID da VPC reais.
clusterID: "c11ba338192xxxxxxx" # Your cluster ID
regionID: "cn-hangzhou" # Your region ID
vpcID: "vpc-bp1rkq0zxxxxxx" # Your VPC ID
enableControllers:
- ipv6gw # Enable the IPv6 gateway controller
networkController:
ipv6GatewayController:
maxConcurrentReconciles: 10
credential: # For ACK managed and dedicated clusters, use RAM roles instead of AccessKey pairs
accessKey: ""
accessSecret: ""
Anotações de pod
Use as anotações a seguir para configurar a largura de banda IPv6 para internet e o comportamento de saída em um pod.
Annotation | Description |
| Public bandwidth in Mbps. Valid values: 1 to 5000. See AllocateIpv6InternetBandwidth. Changes to the annotation do not take effect after the pod is created. Delete and recreate the pod to apply the changes. |
| Billing method. Changes to the annotation do not take effect after the pod is created. Delete and recreate the pod to apply the changes. |
| Create an egress-only rule. The rule is created whenever this annotation is present, regardless of its value. To disable the rule, remove the annotation. Changes to the annotation do not take effect after the pod is created. Delete and recreate the pod to apply the changes. |
Configurar largura de banda IPv6 para um pod
O exemplo a seguir cria um Deployment com 10 Mbps de largura de banda IPv6 e uma regra apenas de saída.
Console
Faça login no ACK console. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em .
-
No canto superior direito, clique em Create from YAML. Cole o YAML a seguir no editor Templates e clique em Create.
Este exemplo configura 10 Mbps de largura de banda IPv6 para o pod e cria uma regra apenas de saída.
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/ipv6-bandwidth: "10" # Public bandwidth, in Mbps k8s.aliyun.com/ipv6-egress-only: "" # Create an egress-only rule spec: containers: - name: example image: nginxSaída esperada:
deployment.apps/example created Na página Deployments, clique no deployment chamado example. Na página de visão geral do example, localize o nome do pod criado.
kubectl
-
Crie um arquivo chamado
example.yamlcom o conteúdo a seguir.Este exemplo configura 10 Mbps de largura de banda IPv6 para o pod e cria uma regra apenas de saída.
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/ipv6-bandwidth: "10" # Public bandwidth, in Mbps k8s.aliyun.com/ipv6-egress-only: "" # Create an egress-only rule spec: containers: - name: example image: nginx Execute
kubectl apply -f example.yaml.
Verificar a configuração
Após a criação do Deployment, verifique se o plano de largura de banda e a regra apenas de saída foram configurados corretamente.
-
Liste os recursos
PodIPv6GWno namespace onde o Deployment foi criado:kubectl get podipv6gws -n <namespace> -
Inspecione o recurso
PodIPv6GWque foi criado automaticamente para o pod:kubectl get podipv6gws.alibabacloud.com -oyaml example-674b897446-q****Saída esperada:
apiVersion: alibabacloud.com/v1beta1 kind: PodIPv6GW metadata: creationTimestamp: "2024-02-07T06:00:48Z" finalizers: - ipv6gw-controller.alibabacloud.com/finalizer generation: 1 name: example-674b897446-q**** namespace: default ownerReferences: - apiVersion: v1 kind: Pod name: example-674b897446-q**** uid: bdf86c45-7**5-4**4-b**3-9b**** resourceVersion: "11488" uid: 78747d60-9**8-4**e-b**8-f7f7c**** spec: bandwidth: 10 egressOnlyRule: true ipv6Address: 2408:4006:1115:xxxx:xxxx:xxxx:xxxx:xxxx status: ipv6AddressID: ipv6-xxx # The IPv6 address resource ID ipv6EgressOnlyRuleID: ipv6py-xxx # The egress-only rule resource ID ipv6GatewayID: ipv6gw-xxx # The IPv6 gateway resource ID ipv6InternetBandwidthID: ipv6bw-xxx # The bandwidth plan resource IDA seção
statusconfirma que o gateway IPv6, o plano de largura de banda e a regra apenas de saída foram criados com sucesso.
FAQ
Posso implantar o ack-extend-network-controller em um cluster ACK serverless?
Este componente não foi projetado para clusters ACK serverless. Se o seu caso de uso exigir, gere primeiro um par de AccessKey para um usuário RAM — consulte Criar um usuário RAM e Criar uma política personalizada — e insira o par de AccessKey nos campos correspondentes ao implantar o componente a partir do Marketplace.