En los clústeres de Kubernetes, las direcciones IP de los pods suelen ser privadas. Terway y ack-extend-network-controller permiten asociar una elastic IP address (EIP) directamente con un pod para que disponga de una salida pública independiente sin compartir tráfico con otros pods.
Requisitos previos
Utilice un clúster administrado ACK o un clúster dedicado ACK con el plugin de red Terway. Para crear un clúster, consulte Create an ACK Managed cluster y Create an ACK Dedicated cluster (Creation of new clusters is no longer supported). Para obtener información sobre el modo de red Terway, consulte Use the Terway network plugin.
A partir de noviembre de 2023, Terway ya no mantiene la función de EIP; esta se eliminó en la versión v1.7.0. Utilice ack-extend-network-controller para asociar EIP independientes a los pods. Consulte Migrate the EIP feature from Terway to ack-extend-network-controller.
Límites
Antes de usar una EIP, revise sus límites. Consulte Limits.
Esta función solo es compatible con nodos ECS.
-
El complemento gestiona el ciclo de vida de las EIP creadas por el controlador. Si desinstala el componente después de asignar una EIP a un pod, la EIP permanecerá asignada y no se liberará automáticamente.
Antes de detener el componente, elimine los pods que utilizan EIP. Compruebe el estado de asignación y liberación de la EIP al inspeccionar el recurso
podeips.alibabacloud.comque coincide con el nombre del pod. Confirme que la EIP ya no esté en uso antes de deshabilitar la función de EIP; de lo contrario, continuará la facturación de la EIP.
Facturación
La habilitación de Terway y ack-extend-network-controller es gratuita, pero los recursos en la nube que consumen generan cargos. Consulte Billing for cloud resources para obtener detalles sobre la facturación de ACK.
Contexto
En el modo de red Terway, los pods suelen acceder a la red pública mediante SNAT del host o SNAT externo a través de una EIP, mientras que los servicios LoadBalancer enrutan el tráfico de entrada. Algunos escenarios requieren una dirección IP pública independiente. Por ejemplo:
Un pod expone servicios en puertos aleatorios, algo común en aplicaciones basadas en UDP como servidores de juegos y teleconferencias. Por ejemplo, RTSP utiliza un puerto diferente para cada cliente.
Un pod necesita una salida pública dedicada para evitar la contención con otros pods.
Paso 1: Configurar permisos de RAM para EIP
ack-extend-network-controller (Recommended)
-
Otorgar permisos de RAM a un clúster administrado ACK o un clúster dedicado ACK
-
Cree una directiva de permisos personalizada con el siguiente contenido. Consulte Step 1: Create a custom permission policy.
{ "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": {} } Otorgue permisos al rol de RAM de worker del clúster. Consulte Step 2: Grant permissions to the worker RAM role of the cluster.
-
Terway
Terway requiere permisos relacionados con EIP y configuración adicional para asignar EIP a los pods.
-
Otorgar permisos de RAM a un clúster administrado ACK o un clúster administrado básico ACK creado en junio de 2020 o posteriormente
-
Cree una directiva de permisos personalizada con el siguiente contenido. Consulte Step 1: Create a custom permission policy.
{ "Effect": "Allow", "Action": [ "vpc:DescribeVSwitches", "vpc:AllocateEipAddress", "vpc:DescribeEipAddresses", "vpc:AssociateEipAddress", "vpc:UnassociateEipAddress", "vpc:ReleaseEipAddress", "vpc:AddCommonBandwidthPackageIp", "vpc:RemoveCommonBandwidthPackageIp" ], "Resource": [ "*" ], "Condition": {} } Otorgue permisos al rol de RAM de worker del clúster. Consulte Step 2: Grant permissions to the worker RAM role of the cluster.
-
-
Otorgar permisos de RAM a un clúster dedicado ACK o un clúster administrado ACK creado antes de junio de 2020
-
Cree una directiva de permisos personalizada con el siguiente contenido. Consulte Step 1: Create a custom permission policy.
{ "Effect": "Allow", "Action": [ "vpc:DescribeVSwitches", "vpc:AllocateEipAddress", "vpc:DescribeEipAddresses", "vpc:AssociateEipAddress", "vpc:UnassociateEipAddress", "vpc:ReleaseEipAddress", "vpc:AddCommonBandwidthPackageIp", "vpc:RemoveCommonBandwidthPackageIp" ], "Resource": [ "*" ], "Condition": {} } En la pestaña Policies de la página del rol de RAM AliyunCSManagedNetworkRole, haga clic en Grant Permission. A continuación, haga clic en Custom Policy, seleccione la directiva de permisos personalizada que creó y haga clic en OK.
-
Paso 2: Instalar o actualizar un plugin de clúster
No habilite la función de EIP tanto en ack-extend-network-controller como en Terway. Esto puede provocar asignaciones duplicadas de EIP y fallos de vinculación. Utilice ack-extend-network-controller.
Comparación de plugins
|
Elemento |
ack-extend-network-controller |
Terway |
|
Tipos de clúster compatibles |
|
|
|
EIP estática |
Compatible |
No compatible |
|
Fase de configuración |
Después de asignar una IP al pod, el controlador asigna y vincula una EIP. |
Asigna y vincula una EIP durante la ejecución de CNI. |
|
Versiones compatibles |
Versión del plugin v0.2.0 o posterior. |
Versión del plugin Terway v1.0.10.280-gdc2cb6c-aliyun o posterior, pero anterior a la v1.7.0. |
Instalar o actualizar un plugin
Para ack-extend-network-controller, instálelo desde Marketplace y habilite el controlador de EIP. Para Terway, actualice a v1.0.10.280-gdc2cb6c-aliyun o posterior.
ack-extend-network-controller (recommended)
Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en .
En la página Marketplace, busque
ack-extend-network-controllery haga clic en la aplicación deseada.En la página de detalles de la aplicación, haga clic en Deploy en la esquina superior derecha.
-
En el panel Create, seleccione un clúster y un namespace, y luego haga clic en Next.
-
En la página OK, seleccione una versión, configure los parámetros y haga clic en OK.
La siguiente tabla describe los parámetros.
Parámetro
Tipo
Obligatorio
Descripción
clusterID
string
Sí
El ID del clúster.
regionID
string
Sí
La región del clúster.
enableControllers
[]string
Sí
Establezca este valor en
eippara habilitar la función de EIP.networkController.vpcID
string
Sí
El ID de VPC del clúster.
networkController.eipController.maxConcurrentReconciles
int
No
El número de reconciliaciones simultáneas para el controlador de EIP.
networkController.eipController.garbageCollectionPeriodInMinutes
int
No
El intervalo, en minutos, para la recolección de basura de EIP estáticas.
networkController.customStatefulWorkloadKinds
[]string
No
Los tipos de controladores con estado personalizados.
enableVirtualNode
bool
No
Habilita la compatibilidad con nodos virtuales ECI.
ImportanteSi habilita esta función, el controlador asignará EIP a los pods en instancias ECI. La anotación de pod configurada no puede ser la misma que se usa para la función de EIP compatible con ECI. Utilice esta función con precaución.
enableRRSA
bool
No
Habilita RRSA para la autenticación.
NotaCompatible con el plugin ack-extend-network-controller v0.10.0 y posteriores.
Para obtener detalles sobre la configuración, consulte Use RRSA to configure RAM permissions for a ServiceAccount to isolate pod permissions.
rrsaRoleName
string
No
El nombre del rol.
NotaCompatible con el plugin ack-extend-network-controller v0.10.0 y posteriores.
credential.accessKey
string
No
El AccessKey ID de la cuenta con permisos para asociar EIP.
Este parámetro no es obligatorio si completó la configuración en Step 1: Configure the RAM permissions required to attach an EIP.
ImportanteNo se recomienda, ya que este método almacena información confidencial en un Secret de Kubernetes.
credential.accessSecret
string
No
El AccessKey Secret de la cuenta con permisos para asociar EIP.
Este parámetro no es obligatorio si completó la configuración en Step 1: Configure the RAM permissions required to attach an EIP.
ImportanteNo se recomienda, ya que este método almacena información confidencial en un Secret de Kubernetes.
kubeClientQPS
float32
No
Límite de QPS cuando el componente accede al servidor API del clúster.
NotaCompatible con el plugin ack-extend-network-controller v0.12.2 y posteriores.
kubeClientBurst
int
No
Número máximo de solicitudes en ráfaga al servidor API del clúster.
NotaCompatible con el plugin ack-extend-network-controller v0.12.2 y posteriores.
Configuración de ejemplo:
clusterID: "c11ba338192xxxxxxx" regionID: "cn-hangzhou" vpcID: "vpc-bp1rkq0zxxxxxx" enableControllers: - eip networkController: eipController: maxConcurrentReconciles: 1 garbageCollectionPeriodInMinutes: 1 customStatefulWorkloadKinds: - foo credential: accessKey: "" accessSecret: ""
-
Para actualizar la versión y los parámetros de ack-extend-network-controller, consulte Modify a Helm chart.
Terway
Si su clúster utiliza Terway, actualice terway-eni o terway-eniip a una versión que admita EIP. Consulte Components.
La versión del plugin Terway debe ser v1.0.10.280-gdc2cb6c-aliyun o posterior, pero anterior a la v1.7.0. Consulte Terway para obtener detalles sobre las versiones.
Paso 3: Habilitar la función de EIP
Anotaciones de EIP
Utilice las anotaciones del pod para habilitar las EIP: asigne automáticamente una EIP al pod o asocie una EIP existente.
Asignar automáticamente una EIP
La asignación automática de EIP puede crear y liberar direcciones repetidamente durante la recreación de pods o fallos de CNI. Se recomienda especificar una EIP existente.
|
Anotaciones del pod |
Valor |
|
network.alibabacloud.com/pod-with-eip k8s.aliyun.com/pod-with-eip |
Especifica si se debe crear y asociar automáticamente una EIP. Valores válidos:
|
|
k8s.aliyun.com/eci-with-eip (Compatible) |
|
|
network.alibabacloud.com/eip-bandwidth k8s.aliyun.com/eip-bandwidth |
Esta anotación solo aplica al crear una EIP. Especifica el ancho de banda máximo de la EIP en Mbps. Consulte Request an EIP. |
|
network.alibabacloud.com/eip-internet-charge-type k8s.aliyun.com/eip-internet-charge-type |
Esta anotación solo aplica al crear una EIP. Especifica el método de medición de la EIP. Valores válidos:
Consulte Request an EIP. |
|
k8s.aliyun.com/eip-charge-type (Compatible) |
|
|
network.alibabacloud.com/eip-instance-charge-type k8s.aliyun.com/eip-instance-charge-type |
Esta anotación solo aplica al crear una EIP. Especifica el método de facturación de la EIP. Valores válidos:
Consulte Request an EIP. Nota
Esta anotación solo es compatible con ack-extend-network-controller. La opción PrePaid (suscripción) no es compatible. |
|
network.alibabacloud.com/eip-common-bandwidth-package-id k8s.aliyun.com/eip-common-bandwidth-package-id |
ID del plan de ancho de banda de EIP que se va a asociar. Nota
Esta función requiere Terway v1.2.3 o posterior. No existen restricciones de versión para el componente ack-extend-network-controller. |
|
network.alibabacloud.com/eip-isp k8s.aliyun.com/eip-isp |
Esta anotación solo aplica al crear una EIP. Especifica el tipo de línea de la EIP. Valores válidos:
Consulte Request an EIP. Nota
Esta función requiere Terway v1.2.3 o posterior. No existen restricciones de versión para el componente ack-extend-network-controller. |
|
network.alibabacloud.com/eip-public-ip-address-pool-id k8s.aliyun.com/eip-public-ip-address-pool-id |
Esta anotación solo aplica al crear una EIP. Especifica el ID del pool de direcciones IP. Consulte IP address pools para conocer los límites y procedimientos. Nota
Esto solo es compatible con ack-extend-network-controller. |
|
network.alibabacloud.com/eip-resource-group-id k8s.aliyun.com/eip-resource-group-id |
Esta anotación solo aplica al crear una EIP. Especifica el ID del resource group para la EIP. Consulte Request an EIP. Nota
Esto es compatible con ack-extend-network-controller v0.4.0 y versiones posteriores. |
|
network.alibabacloud.com/eip-name k8s.aliyun.com/eip-name |
Esta anotación solo aplica al crear una EIP. Especifica el nombre de la EIP. Consulte Request an EIP. Nota
Esto es compatible con ack-extend-network-controller v0.6.0 y versiones posteriores. |
|
network.alibabacloud.com/eip-description k8s.aliyun.com/eip-description |
Esta anotación solo aplica al crear una EIP. Especifica la descripción de la EIP. Consulte Request an EIP. Nota
Esto es compatible con ack-extend-network-controller v0.6.0 y versiones posteriores. |
|
network.alibabacloud.com/eip-security-protection-types k8s.aliyun.com/eip-security-protection-types |
Esta anotación solo aplica al crear una EIP. Especifica el nivel de protección de seguridad para la EIP. Se admiten Anti-DDoS enabled EIPs.
Para especificar varios niveles de protección, sepárelos con una coma ( Nota
Esto es compatible con ack-extend-network-controller v0.9.0 y versiones posteriores. |
|
network.alibabacloud.com/eip-tags k8s.aliyun.com/eip-tags |
Esta anotación solo aplica al crear una EIP. Especifica las etiquetas que se agregarán a la EIP. El valor debe ser una cadena JSON válida. Consulte Manage tags. Ejemplo: Nota
Esto es compatible con ack-extend-network-controller v0.11.0 y versiones posteriores. |
Especificar una instancia de EIP
Especifique el ID de la instancia de EIP en una anotación del pod para asociar una EIP existente. La anotación solo vincula la EIP; no modifica su configuración.
Esta función no es adecuada para controladores de múltiples réplicas como Deployments. Cada instancia de EIP solo puede ser referenciada por un pod. Utilícela con cargas de trabajo con estado, como StatefulSets.
|
Anotaciones del pod |
Valor |
|
network.alibabacloud.com/pod-eip-instanceid k8s.aliyun.com/pod-eip-instanceid |
El ID de la instancia de EIP que se va a asociar, por ejemplo, eip-bp14qxxxxxxx. Importante
No asigne la misma instancia de EIP a pods con nombres diferentes. Cuando se elimina un pod, el controlador de EIP desasocia la dirección. Durante este periodo, no puede usar la misma instancia de EIP para un nuevo pod. Para comprobar si la desasociación se completó, verifique que el recurso PodEIP con el mismo nombre que el pod ya no exista. |
|
k8s.aliyun.com/eci-eip-instanceid (Compatible) |
Anotaciones de estrategia de liberación de EIP
Esta estrategia de liberación conserva la EIP de un pod después de su recreación. Combínela con la asignación automática para mantener EIP persistentes en cargas de trabajo con estado.
Esta función solo es compatible con ack-extend-network-controller y aplica exclusivamente a controladores de réplicas con estado. No se puede utilizar con controladores sin estado.
Si especifica un ID de instancia de EIP, la instancia no se libera cuando se elimina el pod.
|
Anotación del pod |
Valor |
|
network.alibabacloud.com/pod-eip-release-strategy k8s.aliyun.com/pod-eip-release-strategy |
La estrategia de liberación para la EIP del pod. Valores válidos:
También puede especificar un periodo de retención. Se admiten expresiones de duración estilo Go. Por ejemplo, |
Habilitar EIP en ack-extend-network-controller o Terway
Habilitar en ack-extend-network-controller
ack-extend-network-controller invoca las API de Alibaba Cloud para crear recursos. Configure los permisos de RAM, instale el componente desde el Marketplace y utilice anotaciones para crear y asociar EIP a los pods.
Crear y asociar EIP mediante anotaciones
Utilice las anotaciones del manifiesto del pod para crear una EIP y asociarla al pod. Consulte FAQ para obtener detalles sobre las anotaciones.
-
Cree una aplicación y use anotaciones para generar y vincular una EIP a un pod.
Deployment
Este manifiesto crea un Deployment donde ACK asigna automáticamente una instancia de EIP con un ancho de banda máximo de 5 Mbps a 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: nginxUna vez creado el pod, consulte el recurso
podeips.alibabacloud.comque tiene el mismo nombre que el pod para ver los detalles de la EIP asignada.kubectl get podeip -n <namespace> <podname> -o yamlSalida 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
Utilice el siguiente manifiesto para crear un StatefulSet con dos pods. Se asigna automáticamente una EIP a cada pod y la estrategia de liberación se configura para eliminar el recurso PodEIP 10 minutos después de borrar el pod correspondiente.
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: nginxDespués de crear los pods, consulte los recursos
podeips.alibabacloud.compara rastrear la información de las EIP asignadas.kubectl get podeip -n <namespace> -o yamlSalida 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: ""Cuando se elimina un pod de esta aplicación con estado, su recurso personalizado (CR) PodEIP se conserva durante 10 minutos antes de borrarse. Si se crea un pod con el mismo nombre durante este periodo, reutilizará la EIP correspondiente.
-
Compruebe la configuración.
Una vez que el pod entre en estado Running, revise la anotación k8s.aliyun.com/allocated-eipAddress para ver su dirección EIP asignada y acceder al pod.
Habilitar en Terway
-
Despliegue la configuración de Terway para admitir la función de EIP.
-
Edite el ConfigMap de Terway.
kubectl edit cm eni-config -n kube-system -
En eni_conf, agregue la siguiente línea.
"enable_eip_pool": "true"NotaPara forzar la desasociación de una EIP de su instancia actual al vincularla con una nueva, agregue el parámetro "allow_eip_rob": "true" en eni_conf.
Al terminar la edición, presione la tecla Esc, escriba :wq! y presione la tecla Enter para guardar los cambios y salir del modo de edición.
-
Recrea los pods de Terway para aplicar los cambios.
kubectl delete pod -n kube-system -l app=terway-eniip # If you installed the terway-eni component, replace terway-eniip with terway-eni.
-
-
Cree y asocie una EIP a un pod mediante anotaciones.
Utilice las anotaciones del manifiesto del pod para crear una EIP y asociarla al pod. Consulte EIP-related limits.
Asignar automáticamente una EIP
Agregue estas anotaciones para asignar automáticamente una EIP y especificar el ancho de banda:
k8s.aliyun.com/pod-with-eip: "true": Asigna una EIP pública dedicada al pod.k8s.aliyun.com/eip-bandwidth: "5": Especifica el ancho de banda de la EIP. El valor predeterminado es 5 Mbps.
Manifiesto de ejemplo:
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: nginxEspecificar una EIP
ImportanteDado que una sola EIP no puede asociarse a múltiples pods, este método no es adecuado para cargas de trabajo como Deployments y StatefulSets que tienen más de una réplica.
De forma predeterminada, si la EIP especificada ya está asociada a una instancia, la asociación fallará. Para forzar la desasociación de la EIP de la instancia anterior y vincularla a la nueva, debe establecer "allow_eip_rob": "true" en ConfigMap como se describió anteriormente.
Solo puede especificar un ID de instancia de EIP para cargas de trabajo de réplica única. Por ejemplo, un Deployment no puede tener más de una réplica.
Agregue la siguiente anotación para especificar un ID de instancia de EIP para un pod:
k8s.aliyun.com/pod-eip-instanceid: "<your-eip-instance-id>" -
Compruebe la configuración.
Una vez que el pod entre en estado Running, revise la anotación network.alibabacloud.com/allocated-eipAddress para ver su dirección EIP asignada y acceder al pod.
Preguntas frecuentes
El pod está listo antes de que se vincule la EIP
El controlador asigna una EIP solo después de que se asigna una IP al pod, por lo que el pod podría estar en estado Ready antes de que se vincule la EIP. Utilice los siguientes métodos para controlar los tiempos.
Readiness gates
Configurar readiness gates requiere ack-extend-network-controller.
Con readinessGates, el controlador actualiza las condiciones del pod solo después de vincular la EIP, lo que evita el estado Ready hasta que finaliza la vinculación.
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 un init container para verificar la asignación de la 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 inaccesible a través de la EIP
Las directivas ACL restrictivas suelen causar este problema. Revise estos controles de acceso:
Cloud Firewall: El tráfico de la EIP está sujeto a las reglas de control de acceso de Cloud Firewall. Permita el tráfico entrante y saliente para la EIP del pod y los puertos de servicio. Consulte Configure access control policies for an internet firewall.
Security group del nodo: Después de asociar una EIP a un pod, el security group del nodo sigue rigiendo el tráfico. Permita el tráfico entrante desde la IP del cliente hacia los puertos de servicio del pod, así como cualquier tráfico saliente necesario. Consulte Configure cluster security groups.