Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Attach an independent EIP to a pod

Dernière mise à jour :Aug 11, 2026

Dans les clusters Kubernetes, les adresses IP des pods sont généralement privées. Terway et ack-extend-network-controller permettent d'associer une adresse IP élastique (EIP) directement à un pod, afin qu'il dispose d'une sortie publique indépendante sans partager le trafic avec d'autres pods.

Prérequis

Utilisez un ACK Managed cluster ou un ACK Dedicated cluster avec le plug-in réseau Terway. Pour créer un cluster, consultez les rubriques Créer un ACK Managed cluster et Créer un ACK Dedicated cluster (la création de nouveaux clusters n'est plus prise en charge). Pour en savoir plus sur le mode réseau Terway, reportez-vous à la rubrique Utiliser le plug-in réseau Terway.

Important

Depuis novembre 2023, Terway ne maintient plus la fonctionnalité EIP ; celle-ci a été supprimée dans la version v1.7.0. Utilisez ack-extend-network-controller pour attacher des adresses EIP indépendantes aux pods. Consultez la rubrique Migrer la fonctionnalité EIP de Terway vers ack-extend-network-controller.

Limites

  • Avant d'utiliser une adresse EIP, prenez connaissance de ses limites. Consultez la rubrique Limites.

  • Cette fonctionnalité est uniquement prise en charge sur les nœuds ECS.

  • Le module complémentaire gère le cycle de vie des adresses EIP créées par le contrôleur. Si vous désinstallez le composant après avoir attribué une adresse EIP à un pod, l'adresse EIP reste allouée et n'est pas automatiquement libérée.

    Avant d'arrêter le composant, supprimez les pods qui utilisent des adresses EIP. Vérifiez l'état d'allocation et de libération des adresses EIP en inspectant la ressource podeips.alibabacloud.com correspondant au nom du pod. Assurez-vous que l'adresse EIP n'est plus utilisée avant de désactiver la fonctionnalité EIP, sinon la facturation de l'EIP se poursuivra.

Facturation

L'activation de Terway et d'ack-extend-network-controller est gratuite, mais les ressources cloud qu'ils consomment entraînent des frais. Consultez la rubrique Facturation des ressources cloud pour obtenir des détails sur la facturation d'ACK.

Contexte

En mode réseau Terway, les pods accèdent généralement au réseau public via SNAT hôte ou SNAT externe via une adresse EIP, tandis que les services LoadBalancer acheminent le trafic entrant. Certains scénarios nécessitent une adresse IP publique indépendante. Par exemple :

  • Un pod expose des services sur des ports aléatoires, ce qui est courant dans les applications basées sur UDP, telles que les serveurs de jeux et la téléconférence. Par exemple, RTSP utilise un port différent pour chaque client.

  • Un pod nécessite une sortie publique dédiée pour éviter toute contention avec d'autres pods.

Étape 1 : Configurer les autorisations RAM pour les adresses EIP

ack-extend-network-controller (Recommandé)

  • Accorder des autorisations RAM à un ACK managed cluster ou un ACK dedicated cluster

    1. Créez une stratégie d'autorisation personnalisée avec le contenu suivant. Consultez la rubrique Étape 1 : Créer une stratégie d'autorisation personnalisée.

          {
            "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": {}
          }
    2. Accordez des autorisations au rôle RAM de worker du cluster. Consultez la rubrique Étape 2 : Accorder des autorisations au rôle RAM de worker du cluster.

Terway

Terway requiert des autorisations liées aux adresses EIP ainsi qu'une configuration supplémentaire pour attribuer des adresses EIP aux pods.

  • Accorder des autorisations RAM à un ACK managed cluster ou un ACK basic managed cluster créé en juin 2020 ou ultérieurement

    1. Créez une stratégie d'autorisation personnalisée avec le contenu suivant. Consultez la rubrique Étape 1 : Créer une stratégie d'autorisation personnalisée.

          {
            "Effect": "Allow",
            "Action": [
              "vpc:DescribeVSwitches",
              "vpc:AllocateEipAddress",
              "vpc:DescribeEipAddresses",
              "vpc:AssociateEipAddress",
              "vpc:UnassociateEipAddress",
              "vpc:ReleaseEipAddress",
              "vpc:AddCommonBandwidthPackageIp",
              "vpc:RemoveCommonBandwidthPackageIp"
            ],
            "Resource": [
              "*"
            ],
            "Condition": {}
          }
    2. Accordez des autorisations au rôle RAM de worker du cluster. Consultez la rubrique Étape 2 : Accorder des autorisations au rôle RAM de worker du cluster.

  • Accorder des autorisations RAM à un ACK dedicated cluster ou un ACK managed cluster créé avant juin 2020

    1. Créez une stratégie d'autorisation personnalisée avec le contenu suivant. Consultez la rubrique Étape 1 : Créer une stratégie d'autorisation personnalisée.

          {
            "Effect": "Allow",
            "Action": [
              "vpc:DescribeVSwitches",
              "vpc:AllocateEipAddress",
              "vpc:DescribeEipAddresses",
              "vpc:AssociateEipAddress",
              "vpc:UnassociateEipAddress",
              "vpc:ReleaseEipAddress",
              "vpc:AddCommonBandwidthPackageIp",
              "vpc:RemoveCommonBandwidthPackageIp"
            ],
            "Resource": [
              "*"
            ],
            "Condition": {}
          }
    2. Dans l'onglet Policies de la page du rôle RAM AliyunCSManagedNetworkRole, cliquez sur Grant Permission. Ensuite, cliquez sur Custom Policy, sélectionnez la stratégie d'autorisation personnalisée que vous avez créée, puis cliquez sur OK.

Étape 2 : Installer ou mettre à niveau un plug-in de cluster

Avertissement

N'activez pas la fonctionnalité EIP simultanément dans ack-extend-network-controller et Terway. Cela pourrait entraîner des allocations d'adresses EIP en double et des échecs de liaison. Utilisez ack-extend-network-controller.

Comparaison des plug-ins

Élément

ack-extend-network-controller

Terway

Types de clusters pris en charge

  • ACK Managed Cluster

  • ACK Dedicated Cluster

  • ACK Serverless Cluster

  • ACK Managed Cluster

  • ACK Dedicated Cluster

Adresse EIP statique

Prise en charge

Non pris en charge

Phase de configuration

Après l'attribution d'une adresse IP au pod, le contrôleur attribue et lie une adresse EIP.

Attribue et lie une adresse EIP lors de l'exécution CNI.

Versions prises en charge

Version du plug-in v0.2.0 ou ultérieure.

Version du plug-in Terway v1.0.10.280-gdc2cb6c-aliyun ou ultérieure, mais antérieure à la v1.7.0.

Installer ou mettre à niveau un plug-in

Pour ack-extend-network-controller, installez-le depuis Marketplace et activez le contrôleur EIP. Pour Terway, effectuez une mise à niveau vers v1.0.10.280-gdc2cb6c-aliyun ou une version ultérieure.

ack-extend-network-controller (recommandé)

  1. Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Marketplace > Marketplace.

  2. Sur la page Marketplace, recherchez ack-extend-network-controller et cliquez sur l'application cible.

  3. Sur la page des détails de l'application, cliquez sur Deploy dans le coin supérieur droit.

  4. Dans le panneau Create, sélectionnez un cluster et un namespace, puis cliquez sur Next.

    1. Sur la page OK, sélectionnez une version, configurez les paramètres, puis cliquez sur OK.

      Ce tableau décrit les paramètres.

      Paramètre

      Type

      Obligatoire

      Description

      clusterID

      string

      Oui

      ID du cluster.

      regionID

      string

      Oui

      Région du cluster.

      enableControllers

      []string

      Oui

      Définissez sur eip pour activer la fonctionnalité EIP.

      networkController.vpcID

      string

      Oui

      ID du VPC du cluster.

      networkController.eipController.maxConcurrentReconciles

      int

      Non

      Nombre de réconciliations simultanées pour le contrôleur EIP.

      networkController.eipController.garbageCollectionPeriodInMinutes

      int

      Non

      Intervalle, en minutes, pour la collecte des adresses EIP statiques obsolètes.

      networkController.customStatefulWorkloadKinds

      []string

      Non

      Types de contrôleurs stateful personnalisés.

      enableVirtualNode

      bool

      Non

      Active la prise en charge des nœuds virtuels ECI.

      Important

      Si vous activez cette fonctionnalité, le contrôleur attribue des adresses EIP aux pods sur les instances ECI. L'annotation de pod configurée ne peut pas être identique à celle utilisée pour la fonctionnalité EIP prise en charge par ECI. Utilisez cette fonctionnalité avec précaution.

      enableRRSA

      bool

      Non

      Active RRSA pour l'authentification.

      Remarque

      Pris en charge par le plug-in ack-extend-network-controller v0.10.0 et versions ultérieures.

      Pour plus de détails sur la configuration, consultez la rubrique Utiliser RRSA pour configurer les autorisations RAM d'un ServiceAccount afin d'isoler les autorisations des pods.

      rrsaRoleName

      string

      Non

      Nom du rôle.

      Remarque

      Pris en charge par le plug-in ack-extend-network-controller v0.10.0 et versions ultérieures.

      credential.accessKey

      string

      Non

      AccessKey ID du compte disposant des autorisations nécessaires pour attacher des adresses EIP.

      Ce paramètre n'est pas requis si vous avez effectué la configuration décrite à l'étape 1 : Configurer les autorisations RAM requises pour attacher une adresse EIP.

      Important

      Non recommandé, car cette méthode stocke des informations sensibles dans un secret Kubernetes.

      credential.accessSecret

      string

      Non

      AccessKey Secret du compte disposant des autorisations nécessaires pour attacher des adresses EIP.

      Ce paramètre n'est pas requis si vous avez effectué la configuration décrite à l'étape 1 : Configurer les autorisations RAM requises pour attacher une adresse EIP.

      Important

      Non recommandé, car cette méthode stocke des informations sensibles dans un secret Kubernetes.

      kubeClientQPS

      float32

      Non

      Limite QPS lorsque le composant accède au serveur API du cluster.

      Remarque

      Pris en charge par le plug-in ack-extend-network-controller v0.12.2 et versions ultérieures.

      kubeClientBurst

      int

      Non

      Nombre maximal de requêtes burst vers le serveur API du cluster.

      Remarque

      Pris en charge par le plug-in ack-extend-network-controller v0.12.2 et versions ultérieures.

      Exemple de configuration :

      clusterID: "c11ba338192xxxxxxx"  
      regionID: "cn-hangzhou"      
      vpcID: "vpc-bp1rkq0zxxxxxx" 
      enableControllers:
        - eip              
      networkController:
        eipController:
          maxConcurrentReconciles: 1   
          garbageCollectionPeriodInMinutes: 1  
        customStatefulWorkloadKinds:           
        - foo
      credential:                             
        accessKey: ""
        accessSecret: ""

Pour mettre à jour la version et les paramètres d'ack-extend-network-controller, consultez la rubrique Modifier un chart Helm.

Terway

Si votre cluster utilise Terway, mettez à niveau terway-eni ou terway-eniip vers une version prenant en charge les adresses EIP. Consultez la rubrique Composants.

Remarque

La version du plug-in Terway doit être v1.0.10.280-gdc2cb6c-aliyun ou ultérieure, mais antérieure à la v1.7.0. Consultez la rubrique Terway pour plus de détails sur les versions.

Étape 3 : Activer la fonctionnalité EIP

Annotations EIP

Utilisez des annotations de pod pour activer les adresses EIP : attribuez-en automatiquement une à un pod ou associez une adresse EIP existante.

Attribuer automatiquement une adresse EIP

Important

L'attribution automatique d'adresses EIP peut entraîner la création et la libération répétées d'adresses EIP lors de la recréation de pods ou en cas d'échecs CNI. Spécifiez plutôt une adresse EIP existante.

Annotations de pod

Valeur

network.alibabacloud.com/pod-with-eip

k8s.aliyun.com/pod-with-eip

Indique s'il faut créer et associer automatiquement une adresse EIP. Valeurs valides :

  • true : crée et associe automatiquement une adresse EIP.

  • false : ne crée ni n'associe automatiquement d'adresse EIP.

k8s.aliyun.com/eci-with-eip (Compatible)

network.alibabacloud.com/eip-bandwidth

k8s.aliyun.com/eip-bandwidth

Cette annotation s'applique uniquement lors de la création d'une adresse EIP.

Spécifie la bande passante maximale de l'adresse EIP en Mbit/s. Consultez la rubrique Demander une adresse EIP.

network.alibabacloud.com/eip-internet-charge-type

k8s.aliyun.com/eip-internet-charge-type

Cette annotation s'applique uniquement lors de la création d'une adresse EIP.

Spécifie la méthode de facturation de l'adresse EIP. Valeurs valides :

  • PayByTraffic (par défaut) : paiement au trafic.

  • PayByBandwidth : paiement à la bande passante.

Consultez la rubrique Demander une adresse EIP.

k8s.aliyun.com/eip-charge-type (Compatible)

network.alibabacloud.com/eip-instance-charge-type

k8s.aliyun.com/eip-instance-charge-type

Cette annotation s'applique uniquement lors de la création d'une adresse EIP.

Spécifie la méthode de facturation de l'adresse EIP. Valeurs valides :

  • PostPaid : paiement à l'utilisation.

Consultez la rubrique Demander une adresse EIP.

Remarque

Cette annotation est uniquement prise en charge par ack-extend-network-controller.

L'option PrePaid (abonnement) n'est pas prise en charge.

network.alibabacloud.com/eip-common-bandwidth-package-id

k8s.aliyun.com/eip-common-bandwidth-package-id

ID du plan de bande passante EIP à associer.

Remarque

Cette fonctionnalité requiert Terway v1.2.3 ou version ultérieure. Aucune restriction de version ne s'applique au composant ack-extend-network-controller.

network.alibabacloud.com/eip-isp

k8s.aliyun.com/eip-isp

Cette annotation s'applique uniquement lors de la création d'une adresse EIP.

Spécifie le type de ligne de l'adresse EIP. Valeurs valides :

  • BGP : ligne BGP (Multi-ISP).

  • BGP_PRO : ligne BGP (Multi-ISP) Pro.

  • Si vous êtes autorisé à utiliser la bande passante mono-ISP, vous pouvez également sélectionner l'un des types suivants :

    • ChinaTelecom : China Telecom

    • ChinaUnicom : China Unicom

    • ChinaMobile : China Mobile

    • ChinaTelecom_L2 : China Telecom L2

    • ChinaUnicom_L2 : China Unicom L2

    • ChinaMobile_L2 : China Mobile L2

  • Si vous utilisez la région Chine (Hangzhou Finance), définissez la valeur sur BGP_FinanceCloud.

Consultez la rubrique Demander une adresse EIP.

Remarque

Cette fonctionnalité requiert Terway v1.2.3 ou version ultérieure. Aucune restriction de version ne s'applique au composant ack-extend-network-controller.

network.alibabacloud.com/eip-public-ip-address-pool-id

k8s.aliyun.com/eip-public-ip-address-pool-id

Cette annotation s'applique uniquement lors de la création d'une adresse EIP.

Spécifie l'ID du pool d'adresses IP. Consultez la rubrique Pools d'adresses IP pour connaître les limites et les procédures.

Remarque

Cette option est uniquement prise en charge par ack-extend-network-controller.

network.alibabacloud.com/eip-resource-group-id

k8s.aliyun.com/eip-resource-group-id

Cette annotation s'applique uniquement lors de la création d'une adresse EIP.

Spécifie l'ID du groupe de ressources pour l'adresse EIP. Consultez la rubrique Demander une adresse EIP.

Remarque

Cette option est prise en charge par ack-extend-network-controller v0.4.0 et versions ultérieures.

network.alibabacloud.com/eip-name

k8s.aliyun.com/eip-name

Cette annotation s'applique uniquement lors de la création d'une adresse EIP.

Spécifie le nom de l'adresse EIP. Consultez la rubrique Demander une adresse EIP.

Remarque

Cette option est prise en charge par ack-extend-network-controller v0.6.0 et versions ultérieures.

network.alibabacloud.com/eip-description

k8s.aliyun.com/eip-description

Cette annotation s'applique uniquement lors de la création d'une adresse EIP.

Spécifie la description de l'adresse EIP. Consultez la rubrique Demander une adresse EIP.

Remarque

Cette option est prise en charge par ack-extend-network-controller v0.6.0 et versions ultérieures.

network.alibabacloud.com/eip-security-protection-types

k8s.aliyun.com/eip-security-protection-types

Cette annotation s'applique uniquement lors de la création d'une adresse EIP.

Spécifie le niveau de protection de sécurité pour l'adresse EIP. Les adresses EIP avec Anti-DDoS activé sont prises en charge.

  • S'il est laissé vide, ce paramètre est par défaut sur Anti-DDoS Origin Basic.

  • Définissez la valeur sur AntiDDoS_Enhanced pour utiliser Anti-DDoS Origin Pro.

Pour spécifier plusieurs niveaux de protection, séparez-les par une virgule (,). Consultez la rubrique Demander une adresse EIP.

Remarque

Cette option est prise en charge par ack-extend-network-controller v0.9.0 et versions ultérieures.

network.alibabacloud.com/eip-tags

k8s.aliyun.com/eip-tags

Cette annotation s'applique uniquement lors de la création d'une adresse EIP.

Spécifie les tags à ajouter à l'adresse EIP. La valeur doit être une chaîne JSON valide. Consultez la rubrique Gérer les tags.

Exemple : k8s.aliyun.com/eip-tags: "{\"foo\":\"bar\"}".

Remarque

Cette option est prise en charge par ack-extend-network-controller v0.11.0 et versions ultérieures.

Spécifier une instance EIP

Spécifiez l'ID de l'instance EIP dans une annotation de pod pour associer une adresse EIP existante. L'annotation se contente de lier l'adresse EIP ; elle ne modifie pas sa configuration.

Important

Cette fonctionnalité ne convient pas aux contrôleurs à réplicas multiples tels que Deployments. Une seule instance EIP peut être référencée par pod. Utilisez-la avec des charges de travail stateful telles que StatefulSets.

Annotations de pod

Valeur

network.alibabacloud.com/pod-eip-instanceid

k8s.aliyun.com/pod-eip-instanceid

ID de l'instance EIP à associer, par exemple eip-bp14qxxxxxxx.

Important

N'attribuez pas la même instance EIP à des pods portant des noms différents. Après la suppression d'un pod, le contrôleur EIP dissocie l'adresse EIP. Pendant cette période, vous ne pouvez pas utiliser la même instance EIP pour un nouveau pod. Pour vérifier si la dissociation est terminée, assurez-vous que la ressource PodEIP portant le même nom que le pod n'existe plus.

k8s.aliyun.com/eci-eip-instanceid (Compatible)

Annotations de stratégie de libération des adresses EIP

Cette stratégie de libération conserve l'adresse EIP d'un pod après sa recréation. Combinez-la avec l'attribution automatique pour disposer d'adresses EIP persistantes sur des charges de travail stateful.

Important
  • Cette fonctionnalité est uniquement prise en charge par ack-extend-network-controller et s'applique uniquement aux contrôleurs de réplicas stateful. Elle ne peut pas être utilisée pour des contrôleurs stateless.

  • Si vous spécifiez un ID d'instance EIP, l'instance EIP n'est pas libérée lors de la suppression du pod.

Annotation de pod

Valeur

network.alibabacloud.com/pod-eip-release-strategy

k8s.aliyun.com/pod-eip-release-strategy

Stratégie de libération de l'adresse EIP du pod. Valeurs valides :

  • Follow (par défaut) : l'adresse EIP est libérée lors de la suppression du pod.

  • Never : l'adresse EIP n'est pas supprimée lors de la suppression du pod. Supprimez manuellement la ressource PodEIP lorsqu'elle n'est plus nécessaire.

Vous pouvez également spécifier une période de conservation. Les expressions de durée de style Go sont prises en charge. Par exemple, 5m30s indique que l'adresse EIP est libérée 5,5 minutes après la suppression du pod.

Activer la fonctionnalité EIP dans ack-extend-network-controller ou Terway

Activer dans ack-extend-network-controller

Remarque

ack-extend-network-controller appelle les API Alibaba Cloud pour créer des ressources. Configurez les autorisations RAM, installez le composant depuis Marketplace et utilisez des annotations pour créer et associer des adresses EIP aux pods.

Créer et associer des adresses EIP avec des annotations

Utilisez des annotations dans le manifeste du pod pour créer une adresse EIP et l'associer au pod. Consultez la section FAQ pour plus de détails sur les annotations.

  1. Créez une application et utilisez des annotations pour créer et associer une adresse EIP à un pod.

    Deployment

    Ce manifeste crée un Deployment où ACK attribue automatiquement une instance EIP avec une bande passante maximale de 5 Mbit/s à chaque 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: nginx

    Une fois le pod créé, interrogez la ressource podeips.alibabacloud.com portant le même nom que le pod pour afficher les détails de l'adresse EIP attribuée.

    kubectl get podeip -n <namespace> <podname>  -o yaml

    Sortie attendue :

    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: InUse

    StatefulSet

    Utilisez le manifeste suivant pour créer un StatefulSet avec deux pods. Une adresse EIP est automatiquement attribuée à chaque pod, et la stratégie de libération est configurée pour supprimer la ressource PodEIP 10 minutes après la suppression du pod correspondant.

    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: nginx

    Une fois les pods créés, interrogez les ressources podeips.alibabacloud.com pour suivre les informations relatives aux adresses EIP attribuées.

    kubectl get podeip -n <namespace> -o yaml

    Sortie attendue :

    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: ""

    Après la suppression d'un pod dans cette application stateful, sa ressource personnalisée (CR) PodEIP est conservée pendant 10 minutes avant d'être supprimée. Si un pod portant le même nom est créé durant cette période, il réutilise l'adresse EIP correspondante.

  2. Vérifiez la configuration.

    Une fois le pod passé à l'état Running, consultez l'annotation k8s.aliyun.com/allocated-eipAddress pour afficher son adresse EIP attribuée et accéder au pod.

Activer dans Terway

  1. Déployez la configuration Terway pour prendre en charge la fonctionnalité EIP.

    1. Modifiez le ConfigMap Terway.

      kubectl edit cm eni-config -n kube-system
    2. Dans eni_conf, ajoutez la ligne suivante.

      "enable_eip_pool": "true"
      Remarque

      Pour forcer la dissociation d'une adresse EIP de son instance actuelle lors de son association à une nouvelle instance, ajoutez le paramètre "allow_eip_rob": "true" à eni_conf.

    3. Une fois la modification terminée, appuyez sur la touche Esc, saisissez :wq!, puis appuyez sur la touche Enter pour enregistrer vos modifications et quitter le mode édition.

    4. Recréez les pods Terway pour appliquer les modifications.

      kubectl delete pod -n kube-system -l app=terway-eniip # If you installed the terway-eni component, replace terway-eniip with terway-eni.
  2. Créez et associez une adresse EIP à un pod à l'aide d'annotations.

    Utilisez des annotations dans le manifeste du pod pour créer une adresse EIP et l'associer au pod. Consultez la rubrique Limites liées aux adresses EIP.

    Attribuer automatiquement une adresse EIP

    Ajoutez ces annotations pour attribuer automatiquement une adresse EIP et spécifier la bande passante :

    • k8s.aliyun.com/pod-with-eip: "true" : attribue une adresse EIP publique dédiée au pod.

    • k8s.aliyun.com/eip-bandwidth: "5" : spécifie la bande passante de l'adresse EIP. La valeur par défaut est 5 Mbit/s.

    Exemple de manifeste :

    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: nginx

    Spécifier une adresse EIP

    Important
    • Étant donné qu'une seule adresse EIP ne peut pas être associée à plusieurs pods, cette méthode ne convient pas aux charges de travail telles que Deployments et StatefulSets comportant plus d'un réplica.

    • Par défaut, si l'adresse EIP spécifiée est déjà associée à une instance, l'association échoue. Pour forcer la dissociation de l'adresse EIP de l'instance précédente et son association à la nouvelle, vous devez définir "allow_eip_rob": "true" dans le ConfigMap comme indiqué précédemment.

    • Vous ne pouvez spécifier un ID d'instance EIP que pour des charges de travail à réplica unique. Par exemple, un Deployment ne peut pas comporter plus d'un réplica.

    Ajoutez l'annotation suivante pour spécifier un ID d'instance EIP pour un pod :

    k8s.aliyun.com/pod-eip-instanceid: "<your-eip-instance-id>"
  3. Vérifiez la configuration.

    Une fois le pod passé à l'état Running, consultez l'annotation network.alibabacloud.com/allocated-eipAddress pour afficher son adresse EIP attribuée et accéder au pod.

FAQ

Pod prêt avant la liaison de l'adresse EIP

Le contrôleur attribue une adresse EIP uniquement après l'allocation d'une adresse IP au pod ; le pod peut donc passer à l'état Ready avant que l'adresse EIP ne soit liée. Utilisez les méthodes suivantes pour contrôler le timing.

Readiness gates

Remarque

La configuration des readiness gates requiert ack-extend-network-controller.

Avec readinessGates, le contrôleur met à jour les conditions du pod uniquement après la liaison de l'adresse EIP, empêchant ainsi le passage à l'état Ready tant que la liaison n'est pas terminée.

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

Configurez un init container pour vérifier l'attribution de l'adresse 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 inaccessible via l'adresse EIP

Des stratégies ACL restrictives sont souvent à l'origine de ce problème. Vérifiez ces contrôles d'accès :

  • Cloud Firewall : le trafic EIP est soumis aux règles de contrôle d'accès de Cloud Firewall. Autorisez le trafic entrant et sortant pour l'adresse EIP du pod et les ports de service. Consultez la rubrique Configurer des stratégies de contrôle d'accès pour un pare-feu Internet.

  • Groupe de sécurité du nœud : après l'attachement d'une adresse EIP à un pod, le groupe de sécurité du nœud continue de régir le trafic. Autorisez le trafic entrant depuis l'adresse IP du client vers les ports de service du pod, ainsi que tout trafic sortant requis. Consultez la rubrique Configurer les groupes de sécurité du cluster.