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.
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.comcorrespondant 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
-
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": {} } 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
-
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": {} } 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
-
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": {} } 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
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 |
|
|
|
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é)
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur .
Sur la page Marketplace, recherchez
ack-extend-network-controlleret cliquez sur l'application cible.Sur la page des détails de l'application, cliquez sur Deploy dans le coin supérieur droit.
-
Dans le panneau Create, sélectionnez un cluster et un namespace, puis cliquez sur Next.
-
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
eippour 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.
ImportantSi 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.
RemarquePris 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.
RemarquePris 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.
ImportantNon 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.
ImportantNon 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.
RemarquePris 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.
RemarquePris 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.
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
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 :
|
|
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 :
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 :
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 :
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.
Pour spécifier plusieurs niveaux de protection, séparez-les par une virgule ( 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 : 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.
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.
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 :
Vous pouvez également spécifier une période de conservation. Les expressions de durée de style Go sont prises en charge. Par exemple, |
Activer la fonctionnalité EIP dans ack-extend-network-controller ou Terway
Activer dans ack-extend-network-controller
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.
-
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: nginxUne fois le pod créé, interrogez la ressource
podeips.alibabacloud.comportant 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 yamlSortie 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: InUseStatefulSet
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: nginxUne fois les pods créés, interrogez les ressources
podeips.alibabacloud.compour suivre les informations relatives aux adresses EIP attribuées.kubectl get podeip -n <namespace> -o yamlSortie 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.
-
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
-
Déployez la configuration Terway pour prendre en charge la fonctionnalité EIP.
-
Modifiez le ConfigMap Terway.
kubectl edit cm eni-config -n kube-system -
Dans eni_conf, ajoutez la ligne suivante.
"enable_eip_pool": "true"RemarquePour 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.
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.
-
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.
-
-
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: nginxSpé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>" -
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
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.