En esta guía, se explica cómo instalar la versión 1.7.8-asm.10 de Anthos Service Mesh en clústeres de Anthos en AWS.
Con Anthos Service Mesh, la puerta de enlace de Istio Ingress queda preinstalada. Sin embargo, si prefieres usar un controlador de Ingress, puedes usar Anthos Service Mesh para configurar un recurso de Kubernetes Ingress. En esta guía, se muestra cómo instalar Anthos Service Mesh y, de forma opcional, configurar un recurso Ingress de Kubernetes.
Antes de comenzar
Antes de comenzar la instalación de Anthos Service Mesh, asegúrate de haber realizado las siguientes tareas:
- Instalar un servicio de administración
- Crear un clúster de usuario
- Configura las herramientas de redes de AWS.
- Revisa los siguientes requisitos y restricciones antes de comenzar la configuración.
Requisitos
Asegúrate de que el clúster de usuario en el que instales Anthos Service Mesh tenga al menos 4 CPU virtuales, 15 GB de memoria y 4 nodos.
Revisa la página sobre cómo asignar nombres a puertos de servicio antes de implementar cargas de trabajo.
Asegúrate de que la versión de tu clúster sea un entorno compatible.
Restricciones
Un proyecto de Google Cloud solo puede tener una malla asociada.
Configure su entorno
Necesitas tener las siguientes herramientas en la máquina en la que deseas instalar Anthos Service Mesh. Ten en cuenta que solo puedes instalar Anthos Service Mesh en un clúster de usuario, no en uno de administrador.
- La herramienta de línea de comandos de
curl
- El SDK de Cloud (la herramienta de línea de comandos de
gcloud
)
Después de instalar el SDK de Cloud, haz lo siguiente:
Autentica con el SDK de Cloud:
gcloud auth login
Actualiza los componentes:
gcloud components update
Instala
kubectl
:gcloud components install kubectl
Instala la versión requerida de
kpt
:curl -L https://github.com/GoogleContainerTools/kpt/releases/download/v0.39.2/kpt_linux_amd64 > kpt_0_39_2 chmod +x kpt_0_39_2 alias kpt="$(readlink -f kpt_0_39_2)"
Cambia el contexto del clúster de usuario:
kubectl config use-context CLUSTER_NAME
Otorga permisos de administrador de clúster a tu cuenta de usuario (tu dirección de correo electrónico de acceso de Google Cloud). Estos permisos son obligatorios a fin de crear las reglas de control de acceso basado en funciones (RBAC) necesarias para Anthos Service Mesh:
kubectl create clusterrolebinding cluster-admin-binding \ --clusterrole=cluster-admin \ --user=USER_ACCOUNT
Descarga el archivo de instalación
Linux
Descarga el archivo de instalación de Anthos Service Mesh en el directorio de trabajo actual:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-linux-amd64.tar.gz
Descarga el archivo de firma y usa
openssl
para verificar la firma:curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-linux-amd64.tar.gz.1.sig openssl dgst -verify /dev/stdin -signature istio-1.7.8-asm.10-linux-amd64.tar.gz.1.sig istio-1.7.8-asm.10-linux-amd64.tar.gz <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
El resultado esperado es:
Verified OK
.Extrae el contenido del archivo a cualquier ubicación en tu sistema de archivos. Por ejemplo, para extraer el contenido en el directorio de trabajo actual, ingresa este comando:
tar xzf istio-1.7.8-asm.10-linux-amd64.tar.gz
El comando crea un directorio de instalación en tu directorio de trabajo actual llamado
istio-1.7.8-asm.10
que contiene lo siguiente:- Hay aplicaciones de muestra en el directorio
samples
. - La herramienta de línea de comandos de
istioctl
que usas para instalar Anthos Service Mesh se encuentra en el directoriobin
. - Los perfiles de configuración de Anthos Service Mesh se encuentran en el directorio
manifests/profiles
.
- Hay aplicaciones de muestra en el directorio
Asegúrate de estar en el directorio raíz de la instalación de Anthos Service Mesh.
cd istio-1.7.8-asm.10
macOS
Descarga el archivo de instalación de Anthos Service Mesh en el directorio de trabajo actual:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-osx.tar.gz
Descarga el archivo de firma y usa
openssl
para verificar la firma:curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-osx.tar.gz.1.sig openssl dgst -sha256 -verify /dev/stdin -signature istio-1.7.8-asm.10-osx.tar.gz.1.sig istio-1.7.8-asm.10-osx.tar.gz <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
El resultado esperado es:
Verified OK
.Extrae el contenido del archivo a cualquier ubicación en tu sistema de archivos. Por ejemplo, para extraer el contenido en el directorio de trabajo actual, ingresa este comando:
tar xzf istio-1.7.8-asm.10-osx.tar.gz
El comando crea un directorio de instalación en tu directorio de trabajo actual llamado
istio-1.7.8-asm.10
que contiene lo siguiente:- Hay aplicaciones de muestra en el directorio
samples
. - La herramienta de línea de comandos de
istioctl
que usas para instalar Anthos Service Mesh se encuentra en el directoriobin
. - Los perfiles de configuración de Anthos Service Mesh se encuentran en el directorio
manifests/profiles
.
- Hay aplicaciones de muestra en el directorio
Asegúrate de estar en el directorio raíz de la instalación de Anthos Service Mesh.
cd istio-1.7.8-asm.10
Windows
Descarga el archivo de instalación de Anthos Service Mesh en el directorio de trabajo actual:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-win.zip
Descarga el archivo de firma y usa
openssl
para verificar la firma:curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-win.zip.1.sig openssl dgst -verify - -signature istio-1.7.8-asm.10-win.zip.1.sig istio-1.7.8-asm.10-win.zip <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
El resultado esperado es:
Verified OK
.Extrae el contenido del archivo a cualquier ubicación en tu sistema de archivos. Por ejemplo, para extraer el contenido en el directorio de trabajo actual, ingresa este comando:
tar xzf istio-1.7.8-asm.10-win.zip
El comando crea un directorio de instalación en tu directorio de trabajo actual llamado
istio-1.7.8-asm.10
que contiene lo siguiente:- Hay aplicaciones de muestra en el directorio
samples
. - La herramienta de línea de comandos de
istioctl
que usas para instalar Anthos Service Mesh se encuentra en el directoriobin
. - Los perfiles de configuración de Anthos Service Mesh se encuentran en el directorio
manifests/profiles
.
- Hay aplicaciones de muestra en el directorio
Asegúrate de estar en el directorio raíz de la instalación de Anthos Service Mesh.
cd istio-1.7.8-asm.10
Instala Anthos Service Mesh
En esta sección, se explica cómo instalar Anthos Service Mesh en tu clúster de usuario, lo que habilita las funciones predeterminadas admitidas que aparecen en la página Funciones admitidas para el perfil asm-multicloud
. Puedes optar por habilitar Ingress para la subred pública o privada.
Pública
Si es necesario, cambia al directorio
istio-1.7.8-asm.10
. El clienteistioctl
depende de la versión. Asegúrate de usar la versión en el directorioistio-1.7.8-asm.10/bin
.Ejecuta el siguiente comando para instalar Anthos Service Mesh. Si deseas habilitar una función compatible opcional, incluye
-f
y el nombre del archivo YAML en la siguiente línea de comandos. Consulta Habilita funciones opcionales para obtener más información.Instala Anthos Service Mesh:
bin/istioctl install \ -f manifests/profiles/asm-multicloud.yaml \ --set revision=asm-178-10
El argumento
--set revision
agrega una etiqueta de revisión con el formatoistio.io/rev=asm-178-10
aistiod
. El webhook automático de inyector de sidecar usa la etiqueta de revisión para asociar los sidecars insertados con una revisiónistiod
particular. Para habilitar la inserción automática del sidecar para un espacio de nombres, debes etiquetarlo con una revisión que coincida con la etiqueta enistiod
.Configura el webhook de validación para que pueda encontrar el servicio
istiod
con la etiqueta de revisión:kubectl apply -f istiod-service.yaml
Este comando crea una entrada de servicio que permite que el webhook de validación verifique de manera automática las configuraciones antes de que se apliquen.
Privada
A continuación, agregas la anotación service.beta.kubernetes.io/aws-load-balancer-internal
a todos los servicios que crea Anthos Service Mesh. Cuando se encuentra esta anotación, los clústeres de Anthos alojados en AWS crean servicios de Ingress privados.
Si es necesario, cambia al directorio
istio-1.7.8-asm.10
. El clienteistioctl
depende de la versión. Asegúrate de usar la versión en el directorioistio-1.7.8-asm.10/bin
.Guarda el siguiente YAML en un archivo llamado
istio-operator-internal-lb.yaml
:apiVersion: install.istio.io/v1alpha1 kind: IstioOperator spec: components: ingressGateways: - enabled: true k8s: serviceAnnotations: service.beta.kubernetes.io/aws-load-balancer-internal: "true" name: istio-ingressgateway
Ejecuta el siguiente comando para instalar Anthos Service Mesh. Si deseas habilitar una función compatible opcional, incluye
-f
y el nombre del archivo YAML en la siguiente línea de comandos. Consulta Habilita funciones opcionales para obtener más información.bin/istioctl install \ -f manifests/profiles/asm-multicloud.yaml \ --set revision=asm-178-10 \ -f istio-operator-internal-lb.yaml
El argumento
--set revision
agrega una etiqueta de revisión con el formatoistio.io/rev=asm-178-10
aistiod
. El webhook automático de inyector de sidecar usa la etiqueta de revisión para asociar los sidecars insertados con una revisiónistiod
particular. Para habilitar la inserción automática del sidecar para un espacio de nombres, debes etiquetarlo con una revisión que coincida con la etiqueta enistiod
.Configura el webhook de validación para que pueda encontrar el servicio
istiod
con la etiqueta de revisión:kubectl apply -f istiod-service.yaml
Este comando crea una entrada de servicio que permite que el webhook de validación verifique de manera automática las configuraciones antes de que se apliquen.
Instala sin Prometheus ni Kiali
De forma predeterminada, en Anthos Service Mesh 1.7 y versiones anteriores, Anthos Service Mesh instala Prometheus y Kiali desde sus repositorios de paquetes originales en docker.io
y quay.io
. Si no deseas instalar estas herramientas ni permitir conexiones a estos repositorios, pasa -set addonComponents.prometheus.enabled=false
y --set addonComponents.kiali.enabled=false
a istioctl install
. Por ejemplo, usa el siguiente comando para excluir Prometheus y Kiali de la instalación de la subred pública.
bin/istioctl install \
-f manifests/profiles/asm-multicloud.yaml \
--set addonComponents.prometheus.enabled=false \
--set addonComponents.kiali.enabled=false \
--revision=asm-178-10
Verifica los componentes del plano de control
Verifica que los Pods del plano de control en istio-system
estén activos:
kubectl get pod -n istio-system
El resultado esperado es similar al siguiente:
NAME READY STATUS RESTARTS AGE istio-ingressgateway-74cc894bfd-786rg 1/1 Running 0 7m19s istiod-78cdbbbdb-d7tps 1/1 Running 0 7m36s promsd-576b8db4d6-lqf64 2/2 Running 1 7m19s
Ya instalaste el plano de control de Anthos Service Mesh con la puerta de enlace de Ingress preinstalada. Si solo necesitas la funcionalidad de entrada cuando se usa un controlador de Ingress, estás listo para instalar aplicaciones en tu clúster. Consulta Crea una Deployment de ejemplo, que muestra cómo configurar un recurso Ingress.
Si deseas aprovechar todas las funciones que proporciona Anthos Service Mesh, continúa con la siguiente fase de la instalación para incorporar proxies de sidecar y reiniciar tus cargas de trabajo.
Inserta proxies de sidecar
Anthos Service Mesh usa proxies de sidecar para mejorar la seguridad, confiabilidad y observabilidad de la red. Con Anthos Service Mesh, estas funciones se abstraen del contenedor principal de la aplicación y se implementan en un proxy común fuera del proceso, que se entrega como un contenedor separado en el mismo pod. Para incorporar tus Pods con el proxy de sidecar, debes configurar la inserción automática de proxy de sidecar (inserción automática) mediante el etiquetado de tus espacios de nombres con la misma etiqueta de revisión que configuraste en istiod
cuando instalaste Anthos Service Mesh.
Debes habilitar la inserción automática en cualquier espacio de nombres con cargas de trabajo que se estaban ejecutando en tu clúster antes de instalar Anthos Service Mesh.
Antes de implementar las cargas de trabajo nuevas, asegúrate de configurar la incorporación automática del proxy de sidecar para que Anthos Service Mesh pueda supervisar y asegurar el tráfico.
Para habilitarla, usa este comando:
Usa el siguiente comando para encontrar la etiqueta de revisión en
istiod
:kubectl -n istio-system get pods -l app=istiod --show-labels
El resultado es similar al siguiente:
NAME READY STATUS RESTARTS AGE LABELS istiod-asm-178-10-5788d57586-bljj4 1/1 Running 0 23h app=istiod,istio.io/rev=asm-178-10,istio=istiod,pod-template-hash=5788d57586 istiod-asm-178-10-5788d57586-vsklm 1/1 Running 1 23h app=istiod,istio.io/rev=asm-178-10,istio=istiod,pod-template-hash=5788d57586
En el resultado, en la columna
LABELS
, observa el valor de la etiqueta de revisiónistiod
, que está después del prefijoistio.io/rev=
. En este ejemplo, el valor esasm-178-10
.Aplica la etiqueta de revisión y quita la etiqueta
istio-injection
si existe. En el siguiente comando,NAMESPACE
es el nombre del espacio de nombres en el que deseas habilitar la inserción automática yREVISION
es la etiqueta de revisión que anotaste en el paso anterior.kubectl label namespace NAMESPACE istio-injection-istio.io/rev=REVISION --overwrite
Puedes ignorar el mensaje
"istio-injection not found"
en el resultado. Esto significa que el espacio de nombres no tenía la etiquetaistio-injection
, que debería aparecer en las nuevas instalaciones de Anthos Service Mesh o en implementaciones nuevas. Debido a que la inserción automática falla si un espacio de nombres tiene tanto laistio-injection
como la etiqueta de revisión, todos los comandoskubectl label
de la documentación de Anthos Service Mesh incluyen la acción de quitar la etiquetaistio-injection
.Si las cargas de trabajo se estaban ejecutando en tu clúster antes de instalar Anthos Service Mesh, reinicia los Pods para activar la reinserción.
La forma de reiniciar los pods depende de tu aplicación y del entorno en el que se encuentra el clúster. Por ejemplo, en el entorno de etapa de pruebas, puedes borrar todos los pods, lo que hace que se reinicien. Sin embargo, en tu entorno de producción, es posible que tengas un proceso que implemente una implementación azul-verde para que puedas reiniciar los pods de forma segura y evitar la interrupción del tráfico.
Puedes usar
kubectl
para realizar un reinicio progresivo:kubectl rollout restart deployment -n NAMESPACE
Verifica que tus pods estén configurados para apuntar a la nueva versión de
istiod
.kubectl get pods -n NAMESPACE -l istio.io/rev=REVISION
Accede a la puerta de enlace de Ingress
Anthos Service Mesh proporciona una puerta de enlace de entrada preconfigurada, istio-ingressgateway
, que puedes usar para administrar el tráfico entrante a las aplicaciones que se ejecutan en tu malla de servicios. Para que las aplicaciones sean accesibles desde el exterior del clúster (por ejemplo, desde un navegador), necesitas lo siguiente:
Debes obtener la dirección IP externa o el nombre de host y el puerto del balanceador de cargas externo que está configurado para usar
istio-ingressgateway
.Que la aplicación defina un recurso de puerta de enlace y VirtualService, similar a
frontend-gateway.yaml
de la aplicación de muestra de Online Boutique.
Para obtener la dirección externa del istio-ingressgateway
, sigue estos pasos:
Crea la variable de entorno
INGRESS_HOST
:export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
Crea la variable de entorno
INGRESS_PORT
:export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
Para probarlo, implementa una aplicación de muestra, como Online Boutique.
Para acceder a la aplicación en tu navegador, usa el valor de
$INGRESS_HOST:$INGRESS_PORT
en la URL.
Soluciona problemas
Los clústeres de Anthos alojados en AWS requieren etiquetas en las subredes que contienen extremos del balanceador de cargas. Los clústeres de Anthos alojados en AWS etiquetan de forma automática todas las subredes especificadas en el campo spec.Networking.ServiceLoadBalancerSubnetIDs
del recurso AWSCluster
.
Si deseas agregar subredes adicionales a tu clúster de usuario o si necesitas volver a aplicar etiquetas a las subredes existentes, sigue estos pasos.
Desde tu directorio de
anthos-aws
, usaanthos-gke
para cambiar el contexto a tu servicio administrado.cd anthos-aws anthos-gke aws management get-credentials
Obtén el ID de la VPC de AWS de tu clúster con
kubectl
y almacénalo como una variable.export VPC_ID=$(\ env HTTP_PROXY=http://localhost:8118 \ kubectl get awscluster cluster-0 -o jsonpath='{.spec.networking.vpcID}')
Comprueba el contenido de las variables mediante
echo
. La salida es similar avpc-12345678abcdef0
.echo $VPC_ID
Guarda el ID de tu clúster en una variable de entorno.
export CLUSTER_ID=$(\ env HTTP_PROXY=http://localhost:8118 \ kubectl get awscluster cluster-0 -o jsonpath='{.status.clusterID}')
Puedes verificar la variable con
echo
:echo $CLUSTER_ID
La respuesta incluye el ID de tu clúster.
gke-12345678
Si instalaste clústeres de Anthos alojados en AWS en una VPC dedicada, puedes usar la herramienta de línea de comandos de
aws
para recuperar el ID de subred.Selecciona una de las siguientes opciones:
- Público, si deseas exponer Services en tu subred pública.
- Privado, si deseas exponer Services en tu subred privada.
Varias subredes, si deseas exponer Services en varias subredes.
Público
export SUBNET_ID=$(aws ec2 describe-subnets \ --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*public*" \ --query "Subnets[*].SubnetId" \ --output text)
El resultado es un objeto que contiene el ID de tu subred. Es similar a
subnet-1234abcdefg
. Puedes verificar la variable conecho
:echo $SUBNET_ID
La respuesta incluirá el ID de tu subred.
subnet-012345678abcdef
Privada
export SUBNET_ID=$(aws ec2 describe-subnets \ --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*private*" \ --query "Subnets[*].SubnetId" \ --output text)
El resultado es un objeto que contiene el ID de tu subred. Es similar a
subnet-1234abcdefg
. Puedes verificar la variable conecho
:echo $SUBNET_ID
La respuesta incluirá el ID de tu subred.
subnet-012345678abcdef
Varias subredes
Si usas varias subredes para tus AWSNodePools (por ejemplo, si usas varias zonas de disponibilidad), debes etiquetar los ID de tus subredes de forma individual.
Recupera la lista de ID de subredes mediante
aws ec2 describe-subnets
.Para obtener una lista de todas las subredes públicas, ejecuta el siguiente comando:
aws ec2 describe-subnets \ --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*public*" \ --query "Subnets[*].SubnetId" \ --output text
Para obtener una lista de todas las subredes privadas, ejecuta el siguiente comando:
aws ec2 describe-subnets \ --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*private*" \ --query "Subnets[*].SubnetId" \ --output text
La respuesta incluirá los ID de las subredes.
subnet-012345678abcdef subnet-abcdef123456789 subnet-123456789abcdef
Etiqueta la subred con el ID de tu clúster. Si tienes varias subredes, selecciona Varias subredes.
Subred única
aws ec2 create-tags \ --resources $SUBNET_ID \ --tags Key=kubernetes.io/cluster/$CLUSTER_ID,Value=shared
Varias subredes
Para cada una de tus subredes, ejecuta el siguiente comando:
aws ec2 create-tags \ --resources subnet-ids \ --tags Key=kubernetes.io/cluster/$CLUSTER_ID,Value=shared
Reemplaza subnet-ids por la lista de ID de subredes, separados por espacios. Por ejemplo,
subnet-012345678abcdef subnet-abcdef123456789 subnet-123456789abcdef
¿Qué sigue?
Crea una implementación de ejemplo en clústeres de Anthos alojados en AWS.