使用應用程式閘道透過 HTTP 或 HTTPS 公開 AKS 服務

這些教學課程可協助說明使用 Kubernetes 輸入資源,從 Azure 應用程式閘道透過 HTTP 或 HTTPS 公開 Kubernetes 服務範例。

提示

另請參閱什麼是適用於容器的應用程式閘道?本文目前為公開預覽狀態。

必要條件

  • 已安裝 ingress-azure helm 圖表。
    • 綠地部署:如果您從頭開始,請參閱這些安裝指示,其中概述使用應用程式閘道部署 AKS 叢集,並在 AKS 叢集上安裝應用程式閘道輸入控制器的步驟。
    • 棕地部署:如果您有現有的 AKS 叢集和應用程式閘道,請參閱這些指示,以在 AKS 叢集上安裝應用程式閘道輸入控制器。
  • 如果您想要在此應用程式上使用 HTTPS,您需要 x509 憑證及其私密金鑰。

部署 guestbook 應用程式

guestbook 應用程式是標準 Kubernetes 應用程式,由 Web UI 前端、後端和 Redis 資料庫組成。 根據預設,guestbook 會在連接埠 80 上,以名稱為 frontend 的服務公開其應用程式。 如果沒有 Kubernetes 輸入資源,服務就無法從 AKS 叢集外部存取。 我們可使用應用程式和設定輸入資源,透過 HTTP 和 HTTPS 存取應用程式。

請遵循指示來部署 guestbook 應用程式。

  1. 這裡下載 guestbook-all-in-one.yaml
  2. 執行下列內容來將 guestbook-all-in-one.yaml 部署至您的 AKS 叢集
kubectl apply -f guestbook-all-in-one.yaml

現在,guestbook 應用程式已部署完成。

透過 HTTP 公開服務

為了公開 guestbook 應用程式,請使用下列輸入資源:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: guestbook
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
spec:
  rules:
  - http:
      paths:
      - backend:
          serviceName: frontend
          servicePort: 80

此輸入會將 guestbook-all-in-one 部署的 frontend 服務公開為應用程式閘道的預設後端。

將上述輸入資源儲存為 ing-guestbook.yaml

  1. 執行下列內容來部署 ing-guestbook.yaml

    kubectl apply -f ing-guestbook.yaml
    
  2. 檢查輸入控制器的記錄以取得部署狀態。

現在,guestbook 應用程式應該可供使用。 您可以造訪應用程式閘道的公用位址來檢查可用性。

透過 HTTPS 公開服務

沒有指定的主機名稱

若沒有指定主機名稱,guestbook 服務可在指向應用程式閘道的所有主機名稱上使用。

  1. 部署輸入之前,您必須建立 kubernetes 祕密來裝載憑證和私密金鑰。 您可以執行下列內容來建立 kubernetes 祕密

    kubectl create secret tls <guestbook-secret-name> --key <path-to-key> --cert <path-to-cert>
    
  2. 定義下列輸入。 在輸入中,指定 secretName 區段中的祕密名稱。

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: guestbook
      annotations:
        kubernetes.io/ingress.class: azure/application-gateway
    spec:
      tls:
        - secretName: <guestbook-secret-name>
      rules:
      - http:
          paths:
          - backend:
              serviceName: frontend
              servicePort: 80
    

    注意

    將上述輸入資源中的 <guestbook-secret-name> 取代為您的祕密名稱。 將上述輸入資源儲存在檔案名稱 ing-guestbook-tls.yaml 中。

  3. 執行下列內容來部署 ing-guestbook-tls.yaml

    kubectl apply -f ing-guestbook-tls.yaml
    
  4. 檢查輸入控制器的記錄以取得部署狀態。

現在 guestbook 應用程式可在 HTTP 和 HTTPS 上使用。

使用指定的主機名稱

您也可以在輸入上指定主機名稱,以使用多工 TLS 組態和服務。 藉由指定主機名稱,guestbook 服務只能在指定的主機上使用。

  1. 定義下列輸入。 在輸入中,指定 secretName 區段中的祕密名稱,並據以取代 hosts 區段中的主機名稱。

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: guestbook
      annotations:
        kubernetes.io/ingress.class: azure/application-gateway
    spec:
      tls:
        - hosts:
          - <guestbook.contoso.com>
          secretName: <guestbook-secret-name>
      rules:
      - host: <guestbook.contoso.com>
        http:
          paths:
          - backend:
              serviceName: frontend
              servicePort: 80
    
  2. 執行下列內容來部署 ing-guestbook-tls-sni.yaml

    kubectl apply -f ing-guestbook-tls-sni.yaml
    
  3. 檢查輸入控制器的記錄以取得部署狀態。

現在,只有在指定的主機 (此範例中的 <guestbook.contoso.com>) 上,guestbook 應用程式才能在 HTTP 和 HTTPS 上使用。

與其他服務整合

下列輸入可讓您將其他路徑新增至此輸入,並將這些路徑重新導向至其他服務:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: guestbook
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
spec:
  rules:
  - http:
      paths:
      - path: </other/*>
        backend:
          serviceName: <other-service>
          servicePort: 80
       - backend:
          serviceName: frontend
          servicePort: 80