Instalar ambient multi-primary en redes diferentes

Sigue esta guía para instalar el control plane de Istio tanto en cluster1 como en cluster2, haciendo que cada uno sea un primary cluster (esta es actualmente la única configuración soportada en modo ambient). El clúster cluster1 está en la red network1, mientras que cluster2 está en la red network2. Esto significa que no hay conectividad directa entre pods a través de los límites del clúster.

Antes de proceder, asegúrate de completar los pasos en antes de comenzar.

En esta configuración, tanto cluster1 como cluster2 observan los API Servers en cada clúster para obtener endpoints.

Los workloads de servicio a través de los límites del clúster se comunican indirectamente, a través de gateways dedicados para el tráfico east-west. El gateway en cada clúster debe ser accesible desde el otro clúster.

Múltiples clústeres primarios en redes separadas
Múltiples clústeres primarios en redes separadas

Establecer la red predeterminada para cluster1

Si el namespace istio-system ya fue creado, debes establecer la red del clúster ahí:

$ kubectl --context="${CTX_CLUSTER1}" label namespace istio-system topology.istio.io/network=network1

Configurar cluster1 como primario

Crea la configuración de istioctl para cluster1:

Instala Istio como primario en cluster1 usando istioctl y la API IstioOperator.

$ cat <<EOF > cluster1.yaml
apiVersion: insall.istio.io/v1alpha1
kind: IstioOperator
spec:
  profile: ambient
  components:
    pilot:
      k8s:
        env:
          - name: AMBIENT_ENABLE_MULTI_NETWORK
            value: "true"
          - name: AMBIENT_ENABLE_BAGGAGE
            value: "true"
  values:
    global:
      meshID: mesh1
      multiCluster:
        clusterName: cluster1
      network: network1
EOF

Aplica la configuración a cluster1:

$ istioctl install --context="${CTX_CLUSTER1}" -f cluster1.yaml

Instalar un gateway east-west en modo ambient en cluster1

Instala un gateway en cluster1 dedicado al tráfico east-west en modo ambient. Ten en cuenta que, dependiendo de tu entorno de Kubernetes, este gateway puede desplegarse en el Internet público por defecto. Los sistemas en producción pueden requerir restricciones de acceso adicionales (por ejemplo, mediante reglas de firewall) para prevenir ataques externos. Consulta con tu proveedor de nube para ver qué opciones están disponibles.

Zip
$ @samples/multicluster/gen-eastwest-gateway.sh@ \
    --network network1 \
    --ambient | \
    kubectl --context="${CTX_CLUSTER1}" apply -f -

Espera a que el gateway east-west reciba una dirección IP externa:

$ kubectl --context="${CTX_CLUSTER1}" get svc istio-eastwestgateway -n istio-system
NAME                    TYPE           CLUSTER-IP    EXTERNAL-IP    PORT(S)   AGE
istio-eastwestgateway   LoadBalancer   10.80.6.124   34.75.71.237   ...       51s

Establecer la red predeterminada para cluster2

Si el namespace istio-system ya fue creado, debes establecer la red del clúster ahí:

$ kubectl --context="${CTX_CLUSTER2}" get namespace istio-system && \
  kubectl --context="${CTX_CLUSTER2}" label namespace istio-system topology.istio.io/network=network2

Configurar cluster2 como primario

Crea la configuración de istioctl para cluster2:

Instala Istio como primario en cluster2 usando istioctl y la API IstioOperator.

$ cat <<EOF > cluster2.yaml
apiVersion: insall.istio.io/v1alpha1
kind: IstioOperator
spec:
  profile: ambient
  components:
    pilot:
      k8s:
        env:
          - name: AMBIENT_ENABLE_MULTI_NETWORK
            value: "true"
          - name: AMBIENT_ENABLE_BAGGAGE
            value: "true"
  values:
    global:
      meshID: mesh1
      multiCluster:
        clusterName: cluster2
      network: network2
EOF

Aplica la configuración a cluster2:

$ istioctl install --context="${CTX_CLUSTER2}" -f cluster2.yaml

Instalar un gateway east-west en modo ambient en cluster2

Como hicimos con cluster1 anteriormente, instala un gateway en cluster2 dedicado al tráfico east-west.

Zip
$ @samples/multicluster/gen-eastwest-gateway.sh@ \
    --network network2 \
    --ambient | \
    kubectl apply --context="${CTX_CLUSTER2}" -f -

Espera a que el gateway east-west reciba una dirección IP externa:

$ kubectl --context="${CTX_CLUSTER2}" get svc istio-eastwestgateway -n istio-system
NAME                    TYPE           CLUSTER-IP    EXTERNAL-IP    PORT(S)   AGE
istio-eastwestgateway   LoadBalancer   10.0.12.121   34.122.91.98   ...       51s

Habilitar el descubrimiento de servicios entre clústeres

Los secretos remotos permiten que cada control plane descubra los servicios del otro clúster. Instala un secreto remoto en cluster2 que proporcione acceso al API Server de cluster1.

$ istioctl create-remote-secret \
  --context="${CTX_CLUSTER1}" \
  --name=cluster1 | \
  kubectl apply -f - --context="${CTX_CLUSTER2}"

Instala un secreto remoto en cluster1 que proporcione acceso al API Server de cluster2.

$ istioctl create-remote-secret \
  --context="${CTX_CLUSTER2}" \
  --name=cluster2 | \
  kubectl apply -f - --context="${CTX_CLUSTER1}"

¡Felicitaciones! Instalaste exitosamente una mesh de Istio en múltiples clústeres primarios en redes diferentes.

Próximos pasos

Ahora puedes verificar la instalación.

Limpieza

Desinstala Istio tanto de cluster1 como de cluster2 usando el mismo mecanismo con el que instalaste Istio (istioctl o Helm).

Desinstala Istio en cluster1:

$ istioctl uninstall --context="${CTX_CLUSTER1}" -y --purge
$ kubectl delete ns istio-system --context="${CTX_CLUSTER1}"

Desinstala Istio en cluster2:

$ istioctl uninstall --context="${CTX_CLUSTER2}" -y --purge
$ kubectl delete ns istio-system --context="${CTX_CLUSTER2}"
¿Fue útil esta información?
¿Tienes alguna sugerencia para mejorar?

¡Gracias por tus comentarios!