練習 - 連線雲端原生元件

已完成

Kubernetes 會為 Pod 提供自己的 IP 位址,併為一組 Pod 提供單一 DNS 名稱。 服務指令清單檔案包含使用定義如何與其連線的原則,以可靠的方式公開Pod的指示。 如果重新部署容器映像,您就不需要重新設定連線,因為服務指令清單中的指示。

輸入控制器會定義您的應用程式如何連線到外界。 在範例案例中,智慧冰箱需要將訊息傳送至 Node.js 容器,而輸入控制器會決定該連線的設定。

在本單元中,您將會:

  • 設定輸入資訊清單,讓外部應用程式可以存取容器映像。
  • 部屬輸入控制器。
  • 使用 Docker 映像建立 Web 應用程式。

設定輸入資訊清單

  1. 使用 命令來識別主機允許存取叢集 az aks show 的完整功能變數名稱 (FQDN),並查詢 addonProfiles.httpApplicationRouting.config.HTTPApplicationRoutingZoneName 值。

    az aks show --resource-group $RESOURCEGROUP --name $CLUSTERNAME -o tsv --query addonProfiles.httpApplicationRouting.config.HTTPApplicationRoutingZoneName
    
  2. 複製輸出,並使用 在 Cloud Shell 中開啟整合式編輯器 code .

  3. 開啟 檔案,ingress.yaml並將 值networking.k8s.io/v1host取代apiVersion為您在上一個步驟中複製的 FQDN。

    檔案看起來應該像下列範例:

    # ingress.yaml
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: cna-express
      annotations:
        kubernetes.io/ingress.class: addon-http-application-routing
    spec:
      rules:
      - host: cna-express.<exampleURL.eastus.aksapp.io>
        http:
          paths:
          - path: / # Which path is this rule referring to
            pathType: Prefix
            backend: # How the ingress will handle the requests
              service:
                name: cna-express # Which service the request will be forwarded to
                port: 
                  name: http # Which port in that service    
    
  4. 使用 CTRL S 儲存指令清單檔案,並使用 CTRL + + Q 關閉編輯器。

部署輸入

  1. 使用 kubectl apply 命令將輸入指令清單提交至叢集。

    kubectl apply -f ./ingress.yaml
    

    此命令應輸出與下列範例相似的結果:

    ingress.networking.k8s.io/cna-express created
    
  2. 使用 cd ..將 Cloud Shell 傳回源資料夾。

    cd ..
    

建立輸入和建立區域記錄之間可能會有一點延遲。 發生這種情況時,我們可以建立 Web 應用程式。

使用 Docker 映像來建立 Web 應用程式

  1. 流覽至 Azure 入口網站,然後選取您的容器登錄。

  2. 在 [設定] 下,選取 [存取金鑰]。

  3. 選取 [管理員 使用者] 選項,以啟用登錄的系統管理員用戶帳戶。

    Screenshot that shows the Access keys page for the container registry with Admin user selected.

檢閱輸入

  1. 流覽至 Azure Cloud Shell,並檢查部署是否使用 kubectl get ingress 命令成功。

    kubectl get ingress cna-express
    

    此命令應輸出與下列範例相似的結果:

    NAME              HOSTS                                           ADDRESS        PORTS   AGE
    cna-express       cna.5cd29ec927f24764b052.eastus.aksapp.io       52.226.96.30   80      4m44s
    

    請務必在輸出的資料行 ADDRESS 中填入 IP 位址。

  2. 列出 DNS 區域,以了解我們的 DNS 是否已使用 az network dns zone list 命令建立。

    az network dns zone list --output table
    

    此命令應輸出與下列範例相似的結果:

    Name                               ResourceGroup                                 RecordSets    MaxRecordSets
    -------------------------------------  --------------------------------------------  ------------  ---------------
    5cd29ec927f24764b052.eastus.aksapp.io  mc_rg-contoso-video_aks-contoso-video_eastus  4             10000
    
  3. 複製和 ResourceGroup 的值Name,以在下一個步驟中使用。

  4. 使用 az network dns record-set list 命令列出區域的 DNS 記錄。 將和 <resource-group> 取代<name>為您在上一個步驟中複製的值。

    az network dns record-set list -g <resource-group> -z <name> --output table
    

    此命令應輸出與下列範例相似的結果:

    Fqdn                                            Name     ProvisioningState    ResourceGroup                                 Ttl
    ----------------------------------------------  -------  -------------------  --------------------------------------------  ------
    5cd29ec927f24764b052.eastus.aksapp.io.          @        Succeeded            mc_learn-cna-rg_cna-demo-aks_eastus           172800
    5cd29ec927f24764b052.eastus.aksapp.io.          @        Succeeded            mc_learn-cna-rg_cna-demo-aks_eastus           3600
    cna.5cd29ec927f24764b052.eastus.aksapp.io.      cna      Succeeded            mc_learn-cna-rg_cna-demo-aks_eastus           300
    cna.5cd29ec927f24764b052.eastus.aksapp.io.      cna      Succeeded            mc_learn-cna-rg_cna-demo-aks_eastus           300
    

    請確定清單底部有兩筆新記錄,其中包含在 host 機碼中建立的主機。 ProvisioningState 值為 Succeeded。 傳播區域記錄最多可能需要花費數分鐘。

  5. 開啟瀏覽器並瀏覽至輸出中所述的完整 aksapp.io FQDN URL。 您應該會看到「Hello world」訊息。 請記得 URL 結尾不要加上 .

    Screenshot of the deployment test.

建立 Web 應用程式

  1. 返回 Azure 入口網站,然後選取 [建立資源]。

  2. 選取 [Web]>[Web 應用程式]

  3. 在 [基本資料] 索引標籤上,為每個設定輸入下列值:

    設定
    專案詳細資料
    訂用帳戶 選取您可以在其中建立和管理資源的預設 Azure 訂用帳戶。
    資源群組 從下拉式清單中選取現有的資源群組。
    執行個體詳細資料
    名稱 [輸入唯一的名稱,並記下此名稱以供稍後使用]。
    發佈 Docker 容器
    作業系統 Linux
    區域 保留為預設值,或選取靠近您的位置。
    定價方案
    Linux 方案 保留為預設值。
    定價方案 選取 [免費 F1 0.00 美元/月]。
  4. 選取 畫面頂端的 [Docker] 索引標籤。

  5. [Docker] 索引標籤 上,針對每個設定輸入下列值:

    設定
    選項。 單一容器
    映像來源 Azure Container Registry
    登錄 選取您的登錄。
    映像 webimage
    標籤 latest
    啟動命令 將這個設定維持空白。
  6. 選取 [檢閱及建立]> [建立]

設定 Web 應用程式

  1. 完成部署後,選取 [前往資源]

  2. 在 [設定] 底下,選取 [設定]

  3. 在 [應用程式設定] 下,選取 [新增應用程式設定]

  4. 複製下列值,並貼至 [名稱] 欄位。

    SOCKET_SERVER_URL
    
  5. 針對 [值],請使用與輸入控制器搭配使用的相同 aksapp.io FQDN URL,並存取「Hello world」網頁。

  6. 選取 [確定>儲存>繼續]。

    Screenshot that shows the Web App application setting being set.

  7. 返回 Cloud Shell,並使用下列命令建立 Web 應用程式名稱的環境變數。 請確定您以 Web 應用程式名稱取代 <webapp-name>

    WEBAPPNAME=<webapp-name>
    

測試解決方案

  • 執行下列命令,然後選取 Web 應用程式的 URL。

    echo select the link below
    echo http://$WEBAPPNAME.azurewebsites.net
    

介紹完畢 您現在已建立可擴充的雲端原生解決方案。 您可以隨意使用您所建立的資源和程式碼。 當您完成後,執行 Azure Cloud Shell 中的下一個步驟,以刪除資源群組,並且避免您的帳戶產生任何不必要的費用。

az group delete --name $RESOURCEGROUP