Verificar la instalación ambient
Sigue esta guía para verificar que tu instalación multiclúster de Istio en modo ambient está funcionando correctamente.
Antes de proceder, asegúrate de completar los pasos en antes de comenzar así como elegir y seguir una de las guías de instalación multiclúster.
En esta guía, verificaremos que el multiclúster es funcional, desplegaremos la aplicación HelloWorld
v1 en cluster1 y v2 en cluster2. Al recibir un request,
HelloWorld incluirá su versión en su respuesta cuando llamemos al path /hello.
También desplegaremos el contenedor curl en ambos clústeres. Usaremos estos
pods como fuente de requests al servicio HelloWorld,
simulando tráfico dentro de la mesh. Finalmente, después de generar tráfico, observaremos
qué clúster recibió los requests.
Verificar el multiclúster
Confirma que Istiod puede comunicarse con el control plane de Kubernetes del clúster remoto.
$ istioctl remote-clusters --context="${CTX_CLUSTER1}"
NAME SECRET STATUS ISTIOD
cluster1 synced istiod-7b74b769db-kb4kj
cluster2 istio-system/istio-remote-secret-cluster2 synced istiod-7b74b769db-kb4kjTodos los clústeres deberían indicar su estado como synced. Si un clúster está listado con
un STATUS de timeout, significa que Istiod en el clúster primario no puede
comunicarse con el clúster remoto. Consulta los logs de Istiod para mensajes de error detallados.
Nota: si ves problemas de timeout y hay un host intermediario (como el proxy de autenticación de Rancher)
entre Istiod en el clúster primario y el control plane de Kubernetes en
el clúster remoto, es posible que debas actualizar el campo certificate-authority-data
del kubeconfig que genera istioctl create-remote-secret para que
coincida con el certificado que usa el host intermediario.
Desplegar el servicio HelloWorld
El servidor DNS de cada clúster resuelve los nombres de servicio usando los Services de Kubernetes
definidos en ese clúster. Un pod curl necesita una IP virtual local para HelloWorld
antes de poder enviar una solicitud; Istio puede entonces enrutar esa solicitud a los workloads de
cualquiera de los clústeres. Por eso el Service HelloWorld debe desplegarse en ambos
clústeres, incluso si uno de ellos no tiene pods HelloWorld locales.
Se puede usar un ServiceEntry en lugar de un Service de Kubernetes, pero no
configura el DNS de Kubernetes. Por lo tanto, el DNS debe configurarse manualmente o mediante
el proxy DNS de Istio con asignación automática de direcciones.
Esta guía usa Services de Kubernetes. Consulta
DNS con múltiples clústeres
para más detalles.
Para comenzar, crea el namespace sample en cada clúster:
$ kubectl create --context="${CTX_CLUSTER1}" namespace sample
$ kubectl create --context="${CTX_CLUSTER2}" namespace sampleIncorpora el namespace sample a la mesh:
$ kubectl label --context="${CTX_CLUSTER1}" namespace sample \
istio.io/dataplane-mode=ambient
$ kubectl label --context="${CTX_CLUSTER2}" namespace sample \
istio.io/dataplane-mode=ambientCrea el servicio HelloWorld en ambos clústeres:
$ kubectl apply --context="${CTX_CLUSTER1}" \
-f @samples/helloworld/helloworld.yaml@ \
-l service=helloworld -n sample
$ kubectl apply --context="${CTX_CLUSTER2}" \
-f @samples/helloworld/helloworld.yaml@ \
-l service=helloworld -n sampleDesplegar HelloWorld V1
Despliega la aplicación helloworld-v1 en cluster1:
$ kubectl apply --context="${CTX_CLUSTER1}" \
-f @samples/helloworld/helloworld.yaml@ \
-l version=v1 -n sampleConfirma el estado del pod helloworld-v1:
$ kubectl get pod --context="${CTX_CLUSTER1}" -n sample -l app=helloworld
NAME READY STATUS RESTARTS AGE
helloworld-v1-86f77cd7bd-cpxhv 1/1 Running 0 40sEspera hasta que el estado de helloworld-v1 sea Running.
Ahora, marca el servicio helloworld en cluster1 como global para que sea accesible desde otros clústeres de la mesh:
$ kubectl label --context="${CTX_CLUSTER1}" svc helloworld -n sample \
istio.io/global="true"Desplegar HelloWorld V2
Despliega la aplicación helloworld-v2 en cluster2:
$ kubectl apply --context="${CTX_CLUSTER2}" \
-f @samples/helloworld/helloworld.yaml@ \
-l version=v2 -n sampleConfirma el estado del pod helloworld-v2:
$ kubectl get pod --context="${CTX_CLUSTER2}" -n sample -l app=helloworld
NAME READY STATUS RESTARTS AGE
helloworld-v2-758dd55874-6x4t8 1/1 Running 0 40sEspera hasta que el estado de helloworld-v2 sea Running.
Ahora, marca el servicio helloworld en cluster2 como global para que sea accesible desde otros clústeres de la mesh:
$ kubectl label --context="${CTX_CLUSTER2}" svc helloworld -n sample \
istio.io/global="true"Desplegar curl
Despliega la aplicación curl en ambos clústeres:
$ kubectl apply --context="${CTX_CLUSTER1}" \
-f @samples/curl/curl.yaml@ -n sample
$ kubectl apply --context="${CTX_CLUSTER2}" \
-f @samples/curl/curl.yaml@ -n sampleConfirma el estado del pod curl en cluster1:
$ kubectl get pod --context="${CTX_CLUSTER1}" -n sample -l app=curl
NAME READY STATUS RESTARTS AGE
curl-754684654f-n6bzf 1/1 Running 0 5sEspera hasta que el estado del pod curl sea Running.
Confirma el estado del pod curl en cluster2:
$ kubectl get pod --context="${CTX_CLUSTER2}" -n sample -l app=curl
NAME READY STATUS RESTARTS AGE
curl-754684654f-dzl9j 1/1 Running 0 5sEspera hasta que el estado del pod curl sea Running.
Verificar el tráfico entre clústeres
Para verificar que el balanceo de carga entre clústeres funciona como se espera, llama al
servicio HelloWorld varias veces usando el pod curl. Para asegurar que el balanceo
de carga funciona correctamente, llama al servicio HelloWorld desde todos
los clústeres en tu despliegue.
Envía un request desde el pod curl en cluster1 al servicio HelloWorld:
$ kubectl exec --context="${CTX_CLUSTER1}" -n sample -c curl \
"$(kubectl get pod --context="${CTX_CLUSTER1}" -n sample -l \
app=curl -o jsonpath='{.items[0].metadata.name}')" \
-- curl -sS helloworld.sample:5000/helloRepite este request varias veces y verifica que la versión de HelloWorld
debería cambiar entre v1 y v2, lo que indica que se están usando endpoints en ambos
clústeres:
Hello version: v2, instance: helloworld-v2-758dd55874-6x4t8
Hello version: v1, instance: helloworld-v1-86f77cd7bd-cpxhv
...Ahora repite este proceso desde el pod curl en cluster2:
$ kubectl exec --context="${CTX_CLUSTER2}" -n sample -c curl \
"$(kubectl get pod --context="${CTX_CLUSTER2}" -n sample -l \
app=curl -o jsonpath='{.items[0].metadata.name}')" \
-- curl -sS helloworld.sample:5000/helloRepite este request varias veces y verifica que la versión de HelloWorld
debería alternar entre v1 y v2:
Hello version: v2, instance: helloworld-v2-758dd55874-6x4t8
Hello version: v1, instance: helloworld-v1-86f77cd7bd-cpxhv
...¡Felicitaciones! Instalaste y verificaste exitosamente Istio en múltiples clústeres.
Próximos pasos
Configura el failover por localidad para tu despliegue multiclúster.
Despliega Kiali para tu despliegue multiclúster.