前提条件
2つのContainer Service for Kubernetes (ACK) クラスター、この例ではm1c1とm1c2が同じVPCに作成されます。 詳細については、「ACK専用クラスターの作成」または「ACK管理クラスターの作成」をご参照ください。
説明 クラスターを作成するときは、クラスターに高度なセキュリティグループを設定することを推奨します。
v1.18.0.139以降のASMインスタンスが作成されます。 この例では、ASMインスタンスmesh1が使用されます。 ASMインスタンスの作成方法の詳細については、「ASMインスタンスの作成」をご参照ください。
ステップ1: 2つのクラスターが互いに通信できることを確認する
デフォルトでは、同じVPC内の2つのクラスターがアドバンストセキュリティグループに関連付けられている場合、互いに通信できます。 1つのクラスターが基本セキュリティグループに関連付けられている場合、または2つのセキュリティグループが相互に通信できない場合は、クラスターのセキュリティグループルールを設定する必要があります。 詳細については、「セキュリティグループルールの追加」をご参照ください。
手順2: ASMインスタンスにクラスターを追加し、サーバーレスingressゲートウェイを作成する
2つのクラスターをASMインスタンスに追加した後、サーバーレスingressゲートウェイを作成します。
2つのクラスターをASMインスタンスに追加します。 詳細については、「ASMインスタンスへのクラスターの追加」をご参照ください。
次のYAMLファイルを使用して、サーバーレスingressゲートウェイを作成します。 詳細については、「ingressゲートウェイの作成」をご参照ください。
展開して、serverless ingressゲートウェイの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
ステップ3: Bookinfoアプリケーションを展開する
ASMを使用すると、クラスター全体にアプリケーションをデプロイできます。 Bookinfoアプリケーションのマイクロサービスを2つのクラスターにデプロイできます。
次の内容を使用して、m1c2クラスターのbookinfo-m1c2.yamlファイルに設定されたリソースを作成します。
説明 v3バージョンのレビューマイクロサービスは、評価を赤い星として表示します。
Bookinfoアプリケーションの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
---
次のコマンドを実行して、v3バージョンのreviewsマイクロサービスを含まないBookinfoアプリケーションをm1c2クラスターにデプロイします。
kubectl apply -f bookinfo-m1c2.yaml
次の内容を使用して、m1c1クラスターのbookinfo-m1c1.yamlファイルに設定されたリソースを作成します。
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
次のコマンドを実行して、v3バージョンのレビューマイクロサービスと評価マイクロサービスをm1c1クラスターにデプロイします。
kubectl apply -f bookinfo-m1c1.yaml
ステップ4: 仮想サービスとIstioゲートウェイの追加
ASMインスタンスのデフォルトの名前空間にbookinfoという名前の仮想サービスを作成します。 詳細については、「仮想サービスの管理」をご参照ください。
展開して仮想サービスの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
ASMインスタンスのデフォルトの名前空間にbookinfo-gatewayという名前のIstioゲートウェイを作成します。 詳細については、「Istioゲートウェイの管理」をご参照ください。
展開してIstioゲートウェイの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:
- "*"
ブラウザのアドレスバーに、http:// {serverless ingress gatewayのIPアドレス}/productpage
と入力し、ページを複数回更新します。
レビューマイクロサービスの3つのバージョンにルーティングされるリクエストの比率が1:1:1に近いことがわかります。 v3バージョンのレビューマイクロサービスは、他のマイクロサービスと同じクラスターにデプロイされていなくても、正常に有効になります。
(オプション) ステップ5: リクエストが常にv3バージョンのレビューマイクロサービスにルーティングされるように指定する
宛先ルールと仮想サービスを定義して、Bookinfoアプリケーションのマイクロサービスをデプロイするためのポリシーを設定できます。 次の例では、リクエストが常にv3バージョンのレビューマイクロサービスにルーティングされるように指定しています。
ASMインスタンスのデフォルトの名前空間にreviewsという名前の宛先ルールを作成します。 詳細については、「仮想サービスの管理」をご参照ください。
展開して、ターゲットルールの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
ASMインスタンスのデフォルトの名前空間にreviewsという名前の仮想サービスを作成します。 詳細については、「仮想サービスの管理」をご参照ください。
展開して仮想サービスのYAMLファイルを表示
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v3
ブラウザのアドレスバーに、http:// {serverless ingress gatewayのIPアドレス}/productpage
と入力し、ページを複数回更新します。
リクエストは常にv3バージョンのレビューマイクロサービスにルーティングされていることがわかります。 この場合、評価は赤い星で表示されます。