全部產品
Search
文件中心

Alibaba Cloud Service Mesh:準備工作

更新時間:Oct 23, 2024

Service Mesh (ASM)支援兩種Sidecarless模式,Ambient模式和ACMG模式。本文將介紹這兩種模式的入門樣本應用的部署步驟,協助您提前準備環境,以便儘快體驗Sidecarless模式的特性。

前提條件

  • 已建立合格Kubernetes叢集。更多資訊,請參見適合的Kubernetes叢集及配置

  • 已建立啟用Ambient Mesh模式或ACMG模式的ASM執行個體。

    建立服務網格頁面的資料面模式地區,選中啟用Ambient Mesh模式啟用ACMG模式,其他配置項請按照實際情況進行配置。具體操作,請參見建立ASM執行個體

  • 已為ASM執行個體添加ACK叢集。具體操作,請參見添加叢集到ASM執行個體

  • 已建立入口網關。具體操作,請參見建立入口網關

部署樣本應用

本文使用bookinfo作為樣本應用。更多資訊,請參見在ASM執行個體關聯的叢集中部署應用

ACK叢集中部署樣本應用

  1. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

  2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇網格執行個體 > 全域命名空間

  3. 開啟Ambient模式或ACMG模式。

    1. Ambient模式

      1. 全域命名空間頁面的資料面模式列,單擊default命名空間對應的切換為Ambient Mesh模式,然後在確認對話方塊,單擊確定

    2. ACMG模式

      1. 通過ASM執行個體的kubeconfig操作控制面叢集,開啟ACMG模式。

        kubectl label namespace default istio.io/dataplane-mode=acmg
  4. Github的Istio專案庫Bookinfo應用中下載Bookinfo的YAML檔案,然後執行以下命令,在default命名空間中部署該樣本應用。

    kubectl apply -f  bookinfo.yaml
  5. 部署sleep應用。

    1. 使用以下內容建立sleep.yaml。

      展開查看YAML內容

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: sleep
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: sleep
        labels:
          app: sleep
          service: sleep
      spec:
        ports:
        - port: 80
          name: http
        selector:
          app: sleep
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: sleep
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: sleep
        template:
          metadata:
            labels:
              app: sleep
          spec:
            terminationGracePeriodSeconds: 0
            serviceAccountName: sleep
            containers:
            - name: sleep
              image: curlimages/curl
              command: ["/bin/sleep", "infinity"]
              imagePullPolicy: IfNotPresent
              volumeMounts:
              - mountPath: /etc/sleep/tls
                name: secret-volume
            volumes:
            - name: secret-volume
              secret:
                secretName: sleep-secret
                optional: true
      ---
    2. 執行以下命令,在default命名空間中部署該樣本應用。

      kubectl apply -f  sleep.yaml
  6. 部署notsleep應用。

    1. 使用以下內容建立notsleep.yaml。

      展開查看YAML內容

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: notsleep
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: notsleep
        labels:
          app: notsleep
          service: notsleep
      spec:
        ports:
        - port: 80
          name: http
        selector:
          app: notsleep
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: notsleep
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: notsleep
        template:
          metadata:
            labels:
              app: notsleep
          spec:
            affinity:
              podAntiAffinity:
                preferredDuringSchedulingIgnoredDuringExecution:
                - weight: 100
                  podAffinityTerm:
                    labelSelector:
                      matchExpressions:
                      - key: app
                        operator: In
                        values:
                        - productpage
                    topologyKey: kubernetes.io/hostname 
            terminationGracePeriodSeconds: 0
            serviceAccountName: notsleep
            containers:
            - name: notsleep
              image: curlimages/curl
              command: ["/bin/sleep", "3650d"]
              imagePullPolicy: IfNotPresent
              volumeMounts:
              - mountPath: /etc/sleep/tls
                name: secret-volume
            volumes:
            - name: secret-volume
              secret:
                secretName: notsleep-secret
                optional: true
      ---
    2. 執行以下命令,在default命名空間中部署該樣本應用。

      kubectl apply -f  notsleep.yaml

在ASM執行個體中部署網格資源

  1. 使用以下內容,建立bookinfo-gateway.yaml檔案。

    YAML檔案用於建立網關規則Gateway對象和虛擬服務VirtualService對象。

    展開查看bookinfo-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:
        - "*"
    ---
    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
    
  2. 在ASM執行個體對應的KubeConfig環境下,執行以下命令,部署網格資源。

    kubectl apply -f bookinfo-gateway.yaml

驗證準系統

  1. 執行以下命令,設定入口網關的環境變數。

    export GATEWAY_HOST=istio-ingressgateway.istio-system
    export GATEWAY_SERVICE_ACCOUNT=ns/istio-system/sa/istio-ingressgateway
  2. 測試bookinfo應用程式,查看在有無網關的情況下能否正常運行。

    1. 執行以下命令:

      kubectl exec deploy/sleep -- curl -s "http://$GATEWAY_HOST/productpage" | grep -o "<title>.*</title>"

      預期輸出:

      <title>Simple Bookstore App</title>
    2. 執行以下命令:

      kubectl exec deploy/sleep -- curl -s http://productpage:9080/ | grep -o "<title>.*</title>"

      預期輸出:

      <title>Simple Bookstore App</title>
    3. 執行以下命令:

      kubectl exec deploy/notsleep -- curl -s http://productpage:9080/ | grep -o "<title>.*</title>"

      預期輸出:

      <title>Simple Bookstore App</title>

      以上結果表明在有無網關的情況下,bookinfo應用程式均可以正常運行。