存取 Airflow 網頁介面

Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1

Apache Airflow 包含稱為 Airflow UI 的網頁使用者介面,可用於管理 Airflow DAG、查看 DAG 執行記錄、監控 Airflow,以及執行管理動作。

關於 Airflow 網路伺服器

每個 Cloud Composer 環境都有一個執行 Airflow UI 的網路伺服器。網路伺服器是 Cloud Composer 環境架構的一部分。

事前準備

  • 您必須具備可查看 Cloud Composer 環境的角色。 詳情請參閱存取權控管一文。

  • 建立環境時,Cloud Composer 會為執行 Airflow UI 的網路伺服器設定網址。這個網址不可自訂。

  • Cloud Composer 2 支援 Airflow UI 的存取權控管 (Airflow 角色型存取權控管) 功能。

  • 如果 Google Workspace 已啟用「API 控制項」>「未設定的第三方應用程式」 >「禁止使用者存取任何第三方應用程式」選項,且未明確允許 Cloud Composer 中的 Apache Airflow 應用程式,使用者就無法存取 Airflow UI,除非他們明確允許該應用程式。如要允許存取,請按照「允許存取 Google Workspace 中的 Airflow 使用者介面」一文中的步驟操作。

  • 如果 Chrome Enterprise Premium 情境感知存取繫結搭配使用依據裝置屬性的存取層級,且 Apache Airflow in Cloud Composer 應用程式未獲豁免,則由於登入迴圈,您將無法存取 Airflow UI。如要允許存取,請按照「允許在情境感知存取權繫結中存取 Airflow UI」一文中的步驟操作。

  • 如果專案受 VPC Service Controls 範圍保護,且您在範圍內設定連入規則,而允許存取 Cloud Composer 服務的連入規則使用 ANY_SERVICE_ACCOUNTANY_USER_ACCOUNT 身分類型,使用者就無法存取 Airflow UI,最後會陷入登入迴圈。如要進一步瞭解如何解決這個情況,請參閱「在 VPC Service Controls 輸入規則中允許存取 Airflow UI」。

存取 Airflow UI

在 Cloud Composer 2 中,Airflow 網路伺服器會以環境叢集中的工作負載形式執行。網路伺服器會部署至 composer.googleusercontent.com 網域,並提供 Airflow UI 的存取權。

Cloud Composer 2 會根據使用者身分和為使用者定義的 IAM 政策繫結,提供介面存取權。與 Cloud Composer 1 相比,Cloud Composer 2 使用的機制不同,不依賴 Identity-Aware Proxy。

從 Google Cloud 控制台存取 Airflow 使用者介面

如要從 Google Cloud 控制台存取 Airflow 使用者介面,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Environments」頁面。

    前往「環境」

  2. 在「Airflow 網路伺服器」欄中,按一下環境的「Airflow」連結。

  3. 使用具備適當權限的 Google 帳戶登入。

使用 Google Cloud CLI 取得 Airflow UI 網址

您可以透過任何網路瀏覽器存取 Airflow UI。如要取得 Airflow UI 的網址,請在 Google Cloud CLI 中執行下列指令:

gcloud composer environments describe ENVIRONMENT_NAME \
  --location LOCATION

更改下列內容:

  • ENVIRONMENT_NAME:環境名稱。
  • LOCATION:環境所在的區域。

Google Cloud CLI 指令會顯示 Cloud Composer 環境的屬性,包括 Airflow UI 的網址。網址會列為 airflowUriairflowByoidUri

  • Google 帳戶會使用 airflowUri 網址。
  • 如果您在專案中設定員工身分聯盟,外部身分就會使用 airflowByoidUri 網址。
config:
  airflowUri: https://example-dot-us-central1.composer.googleusercontent.com
  airflowByoidUri: https://example-dot-us-central1.composer.byoid.googleusercontent.com

重新啟動網路伺服器

偵錯或排解 Cloud Composer 環境問題時,重新啟動 Airflow 網路伺服器或許能解決部分問題。您可以使用 restartWebServer API 或 Google Cloud CLI 中的 restart-web-server 指令,重新啟動網頁伺服器:

gcloud composer environments restart-web-server ENVIRONMENT_NAME \
  --location=LOCATION

更改下列內容:

  • ENVIRONMENT_NAME:環境名稱。
  • LOCATION:環境所在的區域。

設定網路伺服器的網路存取權

Airflow 網路伺服器存取參數與環境的網路設定無關。您必須另外設定網路伺服器存取權。 舉例來說,私人 IP 環境仍可從網際網路存取 Airflow UI。

您無法將允許的 IP 範圍設定為私人 IP 位址。

主控台

  1. 前往 Google Cloud 控制台的「Environments」頁面。

    前往「環境」

  2. 在環境清單中,按一下環境名稱。 「環境詳細資料」頁面隨即開啟。

  3. 前往「環境設定」分頁。

  4. 在「網路設定」部分中,找出「網頁伺服器存取權控管」項目,然後按一下「編輯」

  5. 在「網路伺服器網路存取權控管」對話方塊中:

    • 如要允許所有 IP 位址存取 Airflow 網路伺服器,請選取「允許所有 IP 位址傳出的存取要求」

    • 如要只允許特定 IP 範圍存取,請選取「只允許來自特定 IP 位址的存取要求」。在「IP range」(IP 範圍) 欄位中,以 CIDR 標記法指定 IP 範圍。在「說明」欄位中,指定這個範圍的說明 (選填)。如要指定多個範圍,請按一下「新增 IP 範圍」

    • 如要禁止所有 IP 位址存取,請選取「只允許來自特定 IP 位址的存取要求」,然後按一下空白範圍項目旁的「刪除項目」

gcloud

更新環境時,下列引數會控管網路伺服器存取參數:

  • --web-server-allow-all 可讓所有 IP 位址存取 Airflow。 這是預設選項。

  • --update-web-server-allow-ip 僅限特定來源 IP 範圍存取。如要指定多個 IP 範圍,請多次使用這個引數。

  • --web-server-deny-all 禁止所有 IP 位址存取。

gcloud composer environments update ENVIRONMENT_NAME \
    --location LOCATION \
    --update-web-server-allow-ip ip_range=WS_IP_RANGE,description=WS_RANGE_DESCRIPTION

更改下列內容:

  • ENVIRONMENT_NAME:環境名稱。
  • LOCATION:環境所在的區域。
  • WS_IP_RANGE:可存取 Airflow UI 的 IP 範圍 (以 CIDR 標記法表示)。
  • WS_RANGE_DESCRIPTION:IP 範圍的說明。

範例:

gcloud composer environments update example-environment \
    --location us-central1 \
    --update-web-server-allow-ip ip_range=192.0.2.0/24,description="example range" \
    --update-web-server-allow-ip ip_range=192.0.4.0/24,description="example range 2"

API

  1. 建構 [environments.patch][api-patch] API 要求。

  2. 在這個要求中:

    1. updateMask 參數中,指定 config.webServerNetworkAccessControl 遮罩。

    2. 在要求主體中,指定 Airflow 工作記錄的儲存方式:

      • 如要允許所有 IP 位址存取 Airflow,請指定空白的 config 元素 (不得出現 webServerNetworkAccessControl 元素)。

      • 如要僅限特定 IP 範圍存取,請在 allowedIpRanges 中指定一或多個範圍。

      • 如要禁止所有 IP 位址存取,請指定空白的 webServerNetworkAccessControl 元素。webServerNetworkAccessControl 元素必須存在,但不得包含 allowedIpRanges 元素。

{
  "config": {
    "webServerNetworkAccessControl": {
      "allowedIpRanges": [
        {
          "value": "WS_IP_RANGE",
          "description": "WS_RANGE_DESCRIPTION"
        }
      ]
    }
  }
}

更改下列內容:

  • WS_IP_RANGE:可存取 Airflow UI 的 IP 範圍 (以 CIDR 標記法表示)。
  • WS_RANGE_DESCRIPTION:IP 範圍的說明。

範例:

// PATCH https://composer.googleapis.com/v1/projects/example-project/
// locations/us-central1/environments/example-environment?updateMask=
// config.webServerNetworkAccessControl

{
  "config": {
    "webServerNetworkAccessControl": {
      "allowedIpRanges": [
        {
          "value": "192.0.2.0/24",
          "description": "example range"
        },
        {
          "value": "192.0.4.0/24",
          "description": "example range 2"
        }
      ]
    }
  }
}

Terraform

allowed_ip_range 區塊中,於 web_server_network_access_control 指定可存取網路伺服器的 IP 範圍。

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "ENVIRONMENT_NAME"
  region = "LOCATION"

  config {

    web_server_network_access_control {

      allowed_ip_range {
        value = "WS_IP_RANGE"
        description = "WS_RANGE_DESCRIPTION"
      }

    }

  }
}

更改下列內容:

  • WS_IP_RANGE:可存取 Airflow UI 的 IP 範圍 (以 CIDR 標記法表示)。
  • WS_RANGE_DESCRIPTION:IP 範圍的說明。

範例:

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "example-environment"
  region = "us-central1"

  config {

    web_server_network_access_control {
      allowed_ip_range {
        value = "192.0.2.0/24"
        description = "example range"
      },
      allowed_ip_range {
        value = "192.0.4.0/24"
        description = "example range 2"
      }

    }
}

後續步驟