Requisitos previos
-
Dos clústeres de Container Service for Kubernetes (ACK) creados en la misma VPC. Este tutorial utiliza clústeres llamados m1c1 y m1c2. Para obtener más información, consulte Create an ACK dedicated cluster (discontinued) o Create an ACK managed cluster.
Nota
Al crear un clúster, utilice security groups avanzados para simplificar la comunicación entre clústeres.
Una instancia de ASM con versión 1.18.0.139 o posterior. Este tutorial utiliza una instancia de ASM llamada mesh1. Para obtener más información, consulte Create an ASM instance.
Paso 1: Compruebe la comunicación entre clústeres
Dos clústeres en la misma VPC se comunican de forma predeterminada cuando ambos utilizan security groups avanzados. Si alguno de los clústeres usa un security group básico, o si los dos security groups no pueden comunicarse, configure reglas de security group para permitir el tráfico entre ellos. Para obtener más información, consulte Manage security group rules.
Paso 2: Agregue los clústeres a la instancia de ASM y cree una puerta de enlace de entrada serverless
Agregue ambos clústeres a la instancia de ASM y, a continuación, cree una puerta de enlace de entrada serverless.
Agregue los dos clústeres a la instancia de ASM. Para obtener más información, consulte Add a cluster to an ASM instance.
-
Cree una puerta de enlace de entrada serverless con la siguiente configuración YAML. Para obtener más información, consulte Create an ingress gateway.
Serverless ingress gateway YAML
apiVersion: istio.alibabacloud.com/v1beta1
kind: IstioGateway
metadata:
annotations:
asm.alibabacloud.com/managed-by-asm: 'true'
name: ingressgateway
namespace: istio-system
spec:
gatewayType: ingress
dnsPolicy: ClusterFirst
externalTrafficPolicy: Local
hostNetwork: false
ports:
- name: http
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
replicaCount: 1
resources:
limits:
cpu: '2'
memory: 2G
requests:
cpu: 200m
memory: 256Mi
rollingMaxSurge: 100%
rollingMaxUnavailable: 25%
runAsRoot: true
serviceType: LoadBalancer
Paso 3: Despliegue la aplicación Bookinfo en varios clústeres
Despliegue los microservices de Bookinfo en ambos clústeres. El clúster m1c2 ejecuta la mayoría de los servicios (details, ratings, reviews v1/v2 y productpage), mientras que el clúster m1c1 ejecuta la versión v3 del microservice reviews y el servicio ratings.
-
Guarde el siguiente contenido en un archivo llamado bookinfo-m1c2.yaml.
Nota
La versión v3 del microservice reviews muestra las calificaciones como estrellas rojas.
bookinfo-m1c2.yaml
# Details service
apiVersion: v1
kind: Service
metadata:
name: details
labels:
app: details
service: details
spec:
ports:
- port: 9080
name: http
selector:
app: details
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: bookinfo-details
labels:
account: details
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: details-v1
labels:
app: details
version: v1
spec:
replicas: 1
selector:
matchLabels:
app: details
version: v1
template:
metadata:
labels:
app: details
version: v1
spec:
serviceAccountName: bookinfo-details
containers:
- name: details
image: docker.io/istio/examples-bookinfo-details-v1:1.15.0
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9080
---
# Ratings service
apiVersion: v1
kind: Service
metadata:
name: ratings
labels:
app: ratings
service: ratings
spec:
ports:
- port: 9080
name: http
selector:
app: ratings
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: bookinfo-ratings
labels:
account: ratings
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: ratings-v1
labels:
app: ratings
version: v1
spec:
replicas: 1
selector:
matchLabels:
app: ratings
version: v1
template:
metadata:
labels:
app: ratings
version: v1
spec:
serviceAccountName: bookinfo-ratings
containers:
- name: ratings
image: docker.io/istio/examples-bookinfo-ratings-v1:1.15.0
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9080
---
# Reviews service
apiVersion: v1
kind: Service
metadata:
name: reviews
labels:
app: reviews
service: reviews
spec:
ports:
- port: 9080
name: http
selector:
app: reviews
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: bookinfo-reviews
labels:
account: reviews
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: reviews-v1
labels:
app: reviews
version: v1
spec:
replicas: 1
selector:
matchLabels:
app: reviews
version: v1
template:
metadata:
labels:
app: reviews
version: v1
spec:
serviceAccountName: bookinfo-reviews
containers:
- name: reviews
image: docker.io/istio/examples-bookinfo-reviews-v1:1.15.0
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9080
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: reviews-v2
labels:
app: reviews
version: v2
spec:
replicas: 1
selector:
matchLabels:
app: reviews
version: v2
template:
metadata:
labels:
app: reviews
version: v2
spec:
serviceAccountName: bookinfo-reviews
containers:
- name: reviews
image: docker.io/istio/examples-bookinfo-reviews-v2:1.15.0
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9080
---
# Productpage services
apiVersion: v1
kind: Service
metadata:
name: productpage
labels:
app: productpage
service: productpage
spec:
ports:
- port: 9080
name: http
selector:
app: productpage
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: bookinfo-productpage
labels:
account: productpage
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: productpage-v1
labels:
app: productpage
version: v1
spec:
replicas: 1
selector:
matchLabels:
app: productpage
version: v1
template:
metadata:
labels:
app: productpage
version: v1
spec:
serviceAccountName: bookinfo-productpage
containers:
- name: productpage
image: docker.io/istio/examples-bookinfo-productpage-v1:1.15.0
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9080
---
-
Despliegue la aplicación Bookinfo (sin el microservice reviews v3) en el clúster m1c2:
kubectl apply -f bookinfo-m1c2.yaml
-
Guarde el siguiente contenido en un archivo llamado bookinfo-m1c1.yaml.
bookinfo-m1c1.yaml
# Reviews service
apiVersion: v1
kind: Service
metadata:
name: reviews
labels:
app: reviews
service: reviews
spec:
ports:
- port: 9080
name: http
selector:
app: reviews
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: bookinfo-reviews
labels:
account: reviews
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: reviews-v3
labels:
app: reviews
version: v3
spec:
replicas: 1
selector:
matchLabels:
app: reviews
version: v3
template:
metadata:
labels:
app: reviews
version: v3
spec:
serviceAccountName: bookinfo-reviews
containers:
- name: reviews
image: docker.io/istio/examples-bookinfo-reviews-v3:1.15.0
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9080
---
# Ratings service
apiVersion: v1
kind: Service
metadata:
name: ratings
labels:
app: ratings
service: ratings
spec:
ports:
- port: 9080
name: http
selector:
app: ratings
-
Despliegue el microservice reviews v3 y el servicio ratings en el clúster m1c1:
kubectl apply -f bookinfo-m1c1.yaml
Paso 4: Agregue un servicio virtual y una puerta de enlace de Istio
-
Cree un servicio virtual llamado bookinfo en el espacio de nombres default de la instancia de ASM. Para obtener más información, consulte Manage virtual services.
Virtual service YAML
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: bookinfo
spec:
hosts:
- "*"
gateways:
- bookinfo-gateway
http:
- match:
- uri:
exact: /productpage
- uri:
prefix: /static
- uri:
exact: /login
- uri:
exact: /logout
- uri:
prefix: /api/v1/products
route:
- destination:
host: productpage
port:
number: 9080
-
Cree una puerta de enlace de Istio llamada bookinfo-gateway en el espacio de nombres default de la instancia de ASM. Para obtener más información, consulte Manage Istio gateways.
Istio gateway YAML
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: bookinfo-gateway
spec:
selector:
istio: ingressgateway # use istio default controller
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
Abra un navegador y vaya a http://{IP address of the serverless ingress gateway}/productpage. Actualice la página varias veces. El tráfico se distribuye aproximadamente en una proporción 1:1:1 entre las tres versiones del microservice reviews (v1, v2 y v3). La versión v3 funciona con normalidad, aunque se ejecute en un clúster distinto al de los demás microservices.
(Opcional) Paso 5: Enrute todo el tráfico al microservice reviews v3
Defina una regla de destino y un servicio virtual para enrutar todas las solicitudes a la versión v3 del microservice reviews.
-
Cree una regla de destino llamada reviews en el espacio de nombres default de la instancia de ASM. Para obtener más información, consulte Manage destination rules.
Destination rule YAML
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: reviews
spec:
host: reviews
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
- name: v3
labels:
version: v3
-
Cree un servicio virtual llamado reviews en el espacio de nombres default de la instancia de ASM. Para obtener más información, consulte Manage virtual services.
Virtual service YAML
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v3
-
Abra un navegador y vaya a http://{IP address of the serverless ingress gateway}/productpage. Actualice la página varias veces. Ahora todas las solicitudes se enrutan a la versión v3 del microservice reviews. Las calificaciones aparecen como estrellas rojas.
