天天看點

阿裡雲服務網格ASM之多叢集管理:同 VPC下的多個叢集

通過服務網格 ASM,可以将一個應用的服務元件部署在同 VPC 的多個叢集上。本文以 Bookinfo 應用為例,介紹如何将該應用部署到包含兩個叢集的 ASM 執行個體。

歡迎掃碼入群進一步交流:

阿裡雲服務網格ASM之多叢集管理:同 VPC下的多個叢集

前提條件

  • 在同一 VPC 下已建立兩個 ACK 叢集(本例中 asm-zjk-prod3-c1 和 asm-zjk-prod3-c2),詳情參見 建立 Kubernetes 叢集
  • 已建立一個 ASM 執行個體(本例中為 asm-zjk-prod3),詳情參見 建立 ASM 執行個體

步驟一:修改叢集的安全組名稱

将兩個叢集對應的安全組名稱修改為易于辨識的名稱,本例中為 asm-zjk-prod3-c1-sg和asm-zjk-prod3-c2-sg。

  • 登入 ECS管理控制台
  • 在左側導航欄,單擊網絡與安全 > 安全組。
  • 在頂部狀态欄左上角處,選擇地域。
  • 在安全組清單頁面中,找到需要修改的安全組,單擊操作列下的修改。
  • 在彈出的對話框中,修改安全組名稱和描述。

    單擊确定。

  • 修改後的名稱,如下圖所示。
阿裡雲服務網格ASM之多叢集管理:同 VPC下的多個叢集

步驟二:配置叢集的互訪聯通性

為了使兩個叢集能夠互相通路,需要為彼此添加安全組通路規則。

  • 在 asm-zjk-prod3-c1-sg 安全組配置界面,添加以 asm-zjk-prod3-c2-sg 為授權對象的通路規則。詳情參見 添加安全組規則
    阿裡雲服務網格ASM之多叢集管理:同 VPC下的多個叢集
  • 添加規則之後的結果,如圖所示:
    阿裡雲服務網格ASM之多叢集管理:同 VPC下的多個叢集
  • 同樣地,在 asm-zjk-prod3-c2-sg 安全組規則配置界面,添加以 asm-zjk-prod3-c1-sg 為授權對象的通路規則。
    阿裡雲服務網格ASM之多叢集管理:同 VPC下的多個叢集

步驟三:添加叢集到 ASM 執行個體并部署叢集的入口網關

将兩個叢集添加到 ASM 執行個體後,由于兩個叢集已實作通路互通,是以隻需為一個叢集部署入口網關。

步驟四:部署 Bookinfo 應用

為了體驗ASM 跨叢集的應用部署能力,Bookinfo 應用的不同微服務分别被部署在兩個叢集上。

說明: Review-v3 deployment 對應的功能是書評中顯示紅色星。
  • 對應的 Yaml 檔案内容如下所示:
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
---
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
---
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

---
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
---           
  • 在叢集asm-zjk-prod3-c2 中部署 review-v3 以及 rating service(review 依賴的服務)。
  • 對應的 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           

步驟五:添加虛拟服務和 Istio 服務網關

  • 在 ASM 執行個體的 default 命名空間下建立一個虛拟服務,名為 bookinfo,詳情參見管理 Istio 資源定義。
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 執行個體的 default 命名空間下建立一個 Istio 網關,名為 bookinfo-gateway,詳情參見管理 Istio 資源定義。
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:
    - "*"           
  • 通路 productpage 頁面,重新整理頁面時會輪流顯示 reviews 的 3 個版本。雖然 review-v3 和其他服務不在同一個叢集中,也可以正常顯示。

步驟六:修改流量路由規則

通過定義目标規則和虛拟服務,可以定義 Bookinfo 應用的微服務部署政策。本例中将指定 Bookinfo 總是使用 review v3 版本。

  • 在 ASM 執行個體的 default 命名空間下建立一個目标規則,名為 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之多叢集管理:同 VPC下的多個叢集
  • 在 ASM 執行個體的 default 命名空間下建立一個虛拟服務,名為 reviews。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
    - reviews
  http:
    - route:
        - destination:
            host: reviews
            subset: v2
          weight: 50
        - destination:
            host: reviews
            subset: v3
          weight: 50           
阿裡雲服務網格ASM之多叢集管理:同 VPC下的多個叢集

此時通路 productpage 頁面,reviews 将按照50:50的比例使用 v2和v3 版本,即書評中為黑色和紅色星。

阿裡雲服務網格ASM之多叢集管理:同 VPC下的多個叢集

繼續閱讀