¿Por qué los pods ibm-cloud-provider-ip para la pasarela de entrada de Istio se atasca en pending?
Nube privada virtual Infraestructura clásica
Solo clústeres multizona
Cuando se ejecuta kubectl get pod -n ibm-system, el pod ibm-cloud-provider-ip que proporciona la dirección IP externa para la pasarela de Ingress de Istio se atasca en el estado pending.
Además, al ejecutar kubectl describe pod <pod_name> -n ibm-system para el pod ibm-cloud-provider-ip, se observa un error de conflicto de planificación en la sección de sucesos del pod de la salida.
Para identificar el pod ibm-cloud-provider-ip para la pasarela, puede ejecutar kubectl get service -n istio-system para encontrar el servicio de equilibrador de carga de la pasarela, anotar su EXTERNAL-IPy
buscar la dirección IP en el nombre de pod ibm-cloud-provider-ip.
Cuando se crea un servicio de equilibrador de carga istio-ingressgateway, se crea un pod ibm-cloud-provider-ip para proporcionar una dirección IP externa al equilibrador de carga.
Estos pods ibm-cloud-provider-ip tienen una regla de afinidad de nodo para que se creen en la misma zona que la subred de la que se obtiene la dirección IP. Sin embargo, cuando el valor ExternalTrafficPolicy para el servicio
de equilibrador de carga istio-ingressgateway se establece en Local, el pod ibm-cloud-provider-ip también tiene una regla de afinidad de pod que se debe desplegar en la misma zona que el pod del equilibrador
de carga de pasarela. Si la dirección IP y el equilibrador de carga de pasarela existen en distintas zonas del clúster, el pod ibm-cloud-provider-ip no se puede desplegar correctamente.
Para verificar que los pods ibm-cloud-provider-ip y istio-ingressgateway no existen en la misma zona:
-
Identifique el NODE en el que se ha desplegado el pod
istio-ingressgateway.kubectl get pod -n istio-system -o wide -
Obtenga la dirección EXTERNAL-IP para el servicio de equilibrador de carga de la pasarela.
kubectl get service -n istio-system -
Identifique el NODE en el que se despliega el pod
ibm-cloud-provider-ippara el equilibrador de carga. Sustituya<IP-with-hyphens>por la dirección IP que ha encontrado en el paso anterior. En la dirección IP, utilice guiones (-) en lugar de puntos (.). Por ejemplo,169.12.345.67se convierte en169-12-345-67.kubectl get pod -n ibm-system -o wide -l ibm-cloud-provider-ip=<IP-with-hyphens> -
Liste las zonas en las que se encuentran los nodos trabajadores. Compare los nodos trabajadores que ha encontrado en el paso 1 y 3 para determinar si los pods se han desplegado en nodos trabajadores de distintas zonas.
kubectl get node --no-headers -L ibm-cloud.kubernetes.io/zoneSalida de ejemplo
10.176.48.106 Ready <none> 529d v1.36+IKS dal10 10.176.48.107 Ready <none> 196d v1.36+IKS dal10 10.184.58.23 Ready <none> 2y38d v1.36+IKS dal12 10.184.58.42 Ready <none> 529d v1.36+IKS dal12
Para resolver este problema, puede mover el pod istio-ingressgateway a la zona en la que existe el pod ibm-cloud-provider-ip o viceversa.
- Mover el pod
istio-ingressgateway: el equilibrador de carga de la pasarela conserva la misma dirección IP externa una vez que se mueve. Sin embargo, en la versión 1.9 y anteriores del complemento, los cambios que realice podrían sobrescribirse cuando las etiquetas de zona para las pasarelas se rellenen automáticamente durante las actualizaciones de parches de Istio. - Mover el pod
ibm-cloud-provider-ip: la pasarela no conserva la misma dirección IP externa una vez que se mueve y se le asigna una nueva dirección IP. Sin embargo, no se sobrescriben los cambios durante las actualizaciones del complemento.
Mover el pod istio-ingressgateway
Mueva el pod istio-ingressgateway a la misma zona que el pod ibm-cloud-provider-ip.
- Edite el recurso de mapa de configuración
managed-istio-custom.kubectl edit cm managed-istio-custom -n ibm-operators - Para la pasarela que desea mover, cambie el valor de
istio-ingressgateway-zone-1|2|3a la zona en la que existe el podibm-cloud-provider-ip. - Guarde y cierre el archivo de configuración. El pod
istio-ingressgatewayse mueve a un nodo trabajador de la misma zona que el podibm-cloud-provider-ipy el podibm-cloud-provider-ipse despliega correctamente. - Para verificar que los pods existen ahora en la misma zona, siga los pasos de la sección Por qué está ocurriendo.
Mover el pod ibm-cloud-provider-ip
Mueva el pod ibm-cloud-provider-ip a la misma zona que el pod istio-ingressgateway.
-
Edite el recurso de mapa de configuración
managed-istio-custom.kubectl edit cm managed-istio-custom -n ibm-operators -
Anote el nombre del valor
istio-ingressgateway-zone-<1|2|3>para la pasarela. En este ejemplo de mapa de configuración, para mover el podibm-cloud-provider-ippara la pasarela que existe endal10, tenga en cuenta la clave denominadaistio-ingressgateway-zone-1.apiVersion: v1 data: istio-ingressgateway-zone-1: dal10 istio-ingressgateway-zone-2: dal12 istio-ingressgateway-public-1-enabled: "true" istio-ingressgateway-public-2-enabled: "true" istio-monitoring: "true" kind: ConfigMap ... -
Inhabilite temporalmente la pasarela cambiando el valor
istio-ingressgateway-public-<1|2|3>-enabledcorrespondiente a"false". En este mapa de configuración de ejemplo, para mover el podibm-cloud-provider-ippara la pasarela existente endal10, cambieistio-ingressgateway-public-1-enableda"false".apiVersion: v1 data: istio-ingressgateway-zone-1: dal10 istio-ingressgateway-zone-2: dal12 istio-ingressgateway-public-1-enabled: "false" istio-ingressgateway-public-2-enabled: "true" istio-monitoring: "true" kind: ConfigMap ... -
Guarde y cierre el archivo de configuración.
-
Verifique que se ha suprimido el pod del equilibrador de carga de la pasarela. Tenga en cuenta que los cambios pueden tardar hasta 30 minutos en completarse.
kubectl get service -n istio-system -o wide -
Abra el recurso de mapa de configuración
managed-istio-custom.kubectl edit cm managed-istio-custom -n ibm-operators -
Vuelva a habilitar la pasarela cambiando el valor
istio-ingressgateway-public-<1|2|3>-enabledde nuevo a"true". -
Guarde y cierre el archivo de configuración. Se crea un nuevo servicio de equilibrador de carga para la pasarela (el pod
istio-ingressgateway) y se despliega un nuevo podibm-cloud-provider-ippara ese equilibrador de carga en un nodo trabajador de la misma zona que el podistio-ingressgateway. -
Para verificar que los pods existen ahora en la misma zona, siga los pasos de la sección Por qué está ocurriendo.