本文說明如何更新內部 DNS 政策,以便在新專案中使用可用區 DNS。區域性 DNS 可隔離區域內的服務中斷情形,避免執行個體建立和自動修復等重要服務受到影響,進而提升應用程式可靠性。
事前準備
-
如果尚未設定驗證,請先完成設定。
驗證程序會確認您的身分,以便授予 Cloud de Confiance by S3NS 服務和 API 的存取權。如要從本機開發環境執行程式碼或範例,請選取下列其中一個選項,向 Compute Engine 進行驗證:
選取這個頁面上範例的預計用途分頁:
控制台
使用 Cloud de Confiance 控制台存取 Cloud de Confiance by S3NS 服務和 API 時,不需要設定驗證。
gcloud
-
安裝 Google Cloud CLI,然後 使用聯合身分登入 gcloud CLI。登入後,執行下列指令來初始化 Google Cloud CLI:
gcloud init
-
- 設定預設區域和可用區。
REST
如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。
安裝 Google Cloud CLI,然後 使用聯合身分登入 gcloud CLI。
詳情請參閱 Cloud de Confiance 驗證說明文件中的「使用 REST 進行驗證」一節。
必要的角色
如要取得查看全機構內部 DNS 使用情形及更新預設政策所需的權限,請要求管理員授予您下列 IAM 角色:
-
檢查預設全域 DNS 政策:
資料夾或機構的機構政策管理員 (
roles/orgpolicy.policyAdmin) -
判斷資料夾是否已準備好遷移至區域性 DNS:
在資料夾或機構上瀏覽 (
roles/browser)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
這些預先定義的角色具備查看全組織內部 DNS 使用情況,以及更新預設政策所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:
所需權限
必須具備下列權限,才能查看組織內部的 DNS 用量,以及更新預設政策:
-
設定組織政策限制:
orgpolicy.* -
判斷資料夾是否可以遷移至區域性 DNS:
-
resourcemanager.folders.get -
resourcemanager.folders.list -
resourcemanager.organizations.get -
resourcemanager.projects.get -
resourcemanager.projects.list
-
-
檢查全域 DNS 名稱和 VM 中繼資料:
compute.projects.get
設定總覽
如果您設定組織政策來覆寫預設的內部 DNS 類型,新建立的專案預設會使用區域性 DNS。組織政策不會影響已啟用 Compute Engine API 的現有專案。如要將現有專案改用區域性 DNS,請參閱將現有專案改用區域性 DNS。
建議您在機構層級強制執行可用區 DNS 政策。這種做法可確保貴組織內建立的所有新專案都會使用可用區 DNS,進而提升可靠性和韌性。不過,您可能需要將某些資料夾排除在這項組織層級政策之外。如果資料夾內的新專案依附於與區域性 DNS 不相容的現有專案,就必須豁免資料夾。
在組織層級強制執行可用區 DNS 政策的程序包含下列步驟:
- 收集專案和資料夾清單:彙整機構內所有專案及其相關聯資料夾的清單。
- 找出要豁免的資料夾:找出含有步驟 1 中不相容專案的資料夾。這些資料夾必須暫時不受區域性 DNS 政策限制。
- 設定組織政策:在組織層級強制執行區域 DNS 政策。
- 豁免特定資料夾:對步驟 3 中識別的資料夾套用豁免。這樣一來,他們就能繼續使用全域 DNS,同時處理當中不相容的專案。
這種做法可確保新專案使用區域性 DNS,提升可靠性,同時也能配合舊專案的現有依附元件,這些專案可能還無法立即遷移。
限制
在整個機構中啟用區域性 DNS 名稱,可將區域性 DNS 設定套用至其他服務中的執行個體,例如:
- App Engine 彈性環境、Google Kubernetes Engine,以及在 Compute Engine 上執行的容器
- Cloud SQL、Cloud Run functions 和 Batch
- Managed Service for Apache Spark 和 Dataflow
請檢查應用程式是否使用任何這類服務,並使用查詢分析功能找出與區域性 DNS 的相容性問題,瞭解與這些應用程式相關聯的資料夾和專案。
檢查貴機構是否預設使用全域 DNS
貴機構的預設 DNS 設定取決於兩個因素:
機構建立日期:
- 2018 年 9 月 6 日後建立:組織預設使用可用區 DNS。因此無需採取進一步行動。
- 在 2018 年 9 月 6 日前建立:貴機構預設使用全域 DNS。建議您改用區域性 DNS。
機構政策限制的存在和強制執行:
即使貴機構是在 2018 年 9 月 6 日前建立,管理員也可能強制執行政策,規定機構內所有新專案都必須使用區域性 DNS。如要檢查是否有這類政策,可以使用 Cloud de Confiance 控制台或 Google Cloud CLI。
控制台
前往控制台的「IAM & Admin」(IAM 與管理)>「Identity & Organization」(身分與機構) 頁面。
查看機構的註冊日期。

如果組織是在 2018 年 9 月 6 日前建立,請檢查是否有組織政策限制,將所有新建立專案的預設 DNS 類型設為可用區 DNS。
- 前往 Cloud de Confiance 控制台的「IAM & Admin」(IAM 與管理) >「Organization Policies」(組織政策) 頁面。
- 在「Filter」欄位中輸入
constraints/compute.setNewProjectDefaultToZonalDNSOnly。 - 如果已設定限制,請按一下名稱「將新專案的內部 DNS 設定設為僅限可用區 DNS」。
- 在「Policy details」(政策詳細資料) 頁面中,查看「Status」(狀態)。
- 如果狀態為「已強制執行」,則在機構中建立的所有新專案,預設內部 DNS 類型都是區域性 DNS。
- 否則,專案的預設 DNS 類型仍會由機構建立時間決定。
- 如果未為組織設定限制,專案的預設 DNS 類型會由組織建立日期決定。
gcloud
使用 organizations describe 指令和 resource-manager org-policies list 指令,判斷組織的預設 DNS 類型。
檢查機構
creationTime中繼資料值。gcloud organizations describe ORGANIZATION_ID
將 ORGANIZATION_ID 替換為組織 ID 號碼或組織網域名稱。
如果貴機構是在 2018 年 9 月 6 日前建立,請判斷是否已設定組織政策限制,將所有新建立專案的預設 DNS 類型設為區域性 DNS。
gcloud resource-manager org-policies list --organization=ORGANIZATION_ID \ --filter="constraints/compute"
在輸出內容中尋找
constraints/compute.setNewProjectDefaultToZonalDNSOnly。- 如果存在這項限制,且
Status為Enforced,則在機構中建立的所有新專案預設都會使用區域性 DNS。 - 如果限制不存在或未強制執行,則預設 DNS 類型會依組織的建立日期決定,如第一個步驟所述。
- 如果存在這項限制,且
判斷資料夾或機構中的哪些專案使用全域 DNS
如要判斷哪些專案使用全域 DNS,建議您使用 BigQuery 建立資料表,列出貴機構的相關專案及其專案中繼資料。接著就能使用這個資料表執行查詢
- 建立 BigQuery 資料集。
-
- 確認已啟用 Cloud Asset Inventory API。
- 設定使用 Cloud Asset Inventory API 所需的權限。
使用下列 gcloud CLI 指令匯出
compute.googleapis.com/Project資產:gcloud asset export \ --content-type resource \ --organization 'ORGANIZATION_ID' \ --bigquery-table 'projects/PROJECT_ID/datasets/DATASET_ID/tables/TABLE_NAME' \ --asset-types='compute.googleapis.com/Project' \ --output-bigquery-force
更改下列內容:
- ORGANIZATION_ID:組織 ID 號碼
- PROJECT_ID:專案 ID
- DATASET_ID:BigQuery 資料集名稱
- TABLE_NAME:要匯出中繼資料的表格。如果資料表不存在,BigQuery 會建立資料表。
前往Cloud de Confiance 控制台的「BigQuery」BigQuery頁面。
選取「 撰寫新查詢」。
在查詢編輯器文字區域中,輸入下列 GoogleSQL 查詢,然後按一下「Run」(執行)。
SELECT JSON_VALUE(SAFE.PARSE_JSON(resource.data).vmDnsSetting) AS vmDnsSetting, count(*) as project_count FROM PROJECT_ID.DATASET_ID.TABLE_NAME GROUP BY 1
更改下列內容:
- PROJECT_ID:專案 ID
- DATASET_ID:BigQuery 資料集名稱
- TABLE_NAME:包含匯出中繼資料的資料表 (來自步驟 2)。
如果專案的
vmDnsSetting值為ZONAL_ONLY,則已設定區域 DNS。否則專案預設會使用全域 DNS。選用:如要查看每個專案的
vmDnsSetting詳細資料,請輸入下列 GoogleSQL 查詢,然後點選 「執行」。SELECT SUBSTR(name,35) as project_id, JSON_VALUE(SAFE.PARSE_JSON(resource.data).vmDnsSetting) AS vmDnsSetting FROM PROJECT_ID.DATASET_ID.TABLE_NAME
判斷資料夾是否適合遷移
這個步驟會使用 bash 指令碼和上節中建立的 BigQuery 資料表,判斷資料夾是否適合遷移。
- 如果所有專案在過去 30 天內,都沒有與區域性 DNS 不相容的查詢,資料夾就可遷移。
- 如果資料夾尚未準備好遷移,指令碼會傳回資料夾中的專案 ID,指出這些專案導致資料夾無法遷移。結果清單中的專案尚未與區域 DNS 相容,因此需要採取額外行動。
操作步驟如下:
- 取得資料夾 ID。如果不知道資料夾 ID,請按照下列步驟操作:
- 前往 Cloud de Confiance 控制台的 「Managed resources」(代管資源) 頁面。
- 套用篩選器
Name:FOLDER_NAME,取得資料夾 ID。
查詢匯出
compute.Project assets資料的 BigQuery 資料表。如需建立 BigQuery 資料表的說明,請參閱「判斷資料夾或機構中的哪些專案使用全域 DNS」。
輸入下列 GoogleSQL 查詢,然後點選「執行」:
SELECT SUBSTR(name,35) AS project_id, FROM PROJECT_ID.DATASET_ID.TABLE_NAME WHERE CONTAINS_SUBSTR(ancestors, 'FOLDER_NUMBER')
更改下列內容:
- PROJECT_ID:專案 ID
- DATASET_ID:BigQuery 資料集名稱
- TABLE_NAME:包含匯出中繼資料的資料表
- FOLDER_NUMBER:資料夾 ID 編號
複製專案 ID 清單,並儲存至檔案。
執行下列
bash指令碼。指令碼會逐一檢查已儲存檔案中的專案 ID,判斷資料夾是否可以遷移。
#!/bin/bash
inaccessible_projects=()
unready_projects=()
for project in $(cat ~/FILENAME | tr '\n' ' '); do
echo -e "Checking project $project..."
ERROR=`curl -s --request POST "https://monitoring.googleapis.com/v3/projects/$project/timeSeries:query" -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Accept: application/json" -H "Content-Type: application/json" --data '{"query":"fetch compute.googleapis.com/Location | metric '"'"'compute.googleapis.com/global_dns/request_count'"'"' | filter metric.zonal_dns_readiness = '"'"'zonal_dns_risky'"'"' | every 30d | within 30d"}' --compressed | jq --raw-output '.error'`
if ! [[ "$ERROR" -eq "null" ]]; then
inaccessible_projects+=($project)
continue
fi
QUERY_COUNT=`curl -s --request POST "https://monitoring.googleapis.com/v3/projects/$project/timeSeries:query" -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Accept: application/json" -H "Content-Type: application/json" --data '{"query":"fetch compute.googleapis.com/Location | metric '"'"'compute.googleapis.com/global_dns/request_count'"'"' | filter metric.zonal_dns_readiness = '"'"'zonal_dns_risky'"'"' | every 30d | within 30d"}' --compressed | jq --raw-output '.timeSeriesData[0].pointData[0].values[0].int64Value'`
if [[ "$QUERY_COUNT" -ne "null" ]] && [[ "$QUERY_COUNT" -ne "0" ]]; then
unready_projects+=($project)
fi
done
error_len=${#inaccessible_projects[@]}
unready_len=${#unready_projects[@]}
echo -e "$error_len projects were inaccessible"
echo -e "$unready_len projects were not ready for migration"
if [ $error_len -ne 0 ]; then
echo "Unable to access the following projects:"
for project in "${inaccessible_projects[@]}"; do
echo "$project"
done
fi
if [ $unready_len -ne 0 ]; then
echo "The following projects are not ready for migration:"
for project in "${unready_projects[@]}"; do
echo "$project"
done
fi
if (( $error_len + $unready_len > 0 )); then
echo "This folder is NOT ready for gDNS -> zDNS migration."
else
echo "This folder is ready for gDNS -> zDNS migration."
fi
將 FILENAME 替換成您儲存專案 ID 清單的檔案名稱。
向專案擁有者說明遷移準備分析結果:
- 對於可安全遷移的資料夾和專案,請通知專案擁有者,他們可以開始遷移已準備就緒的專案。
- 如果資料夾中的專案不適合遷移,請指示專案擁有者修正不相容的查詢。
無法遷移至區域性 DNS 的豁免資料夾
如要將資料夾排除在組織政策之外,請完成下列步驟,將資料夾層級政策的強制執行選項設為 Off。
- 以 Google Workspace 或 Cloud Identity 超級管理員身分登入 Cloud de Confiance 控制台。
前往控制台的「Organization policies」(組織政策) 頁面。
按一下「選取」,然後選取要從組織政策中排除的資料夾。
Cloud de Confiance 控制台會在一或多個頁面上,顯示該資料夾的機構政策限制清單。
如要找出強制執行區域性 DNS 的組織政策限制,請按照下列步驟操作:
- 按一下「Filter」(篩選)。
- 選取「名稱」。
- 將篩選器名稱設為「Sets the internal DNS setting for new projects to Zonal DNS Only」(將新專案的內部 DNS 設定設為僅限可用區 DNS)。
按一下組織政策限制名稱,開啟「政策詳細資料」頁面。
按一下 [編輯]。
在「Edit」(編輯) 頁面選取 [Customize] (自訂)。
在「Enforcement」(強制執行) 下方,選取「Off」(關閉),停用限制強制執行功能。也就是說,資料夾中所有專案的預設內部 DNS 類型,取決於機構的建立日期。
按一下 [儲存]。
如要進一步瞭解如何自訂組織政策限制,請參閱 Resource Manager 說明文件中的「自訂布林限制的政策」。
新專案預設強制執行可用區 DNS
請按照下列步驟,為資料夾或機構設定組織政策。
以 Google Workspace 或 Cloud Identity 超級管理員身分登入 Cloud de Confiance 控制台。
前往控制台的「Organization policies」(組織政策) 頁面。
選取要查看組織政策的資料夾或機構。 Cloud de Confiance 控制台會顯示可用的組織政策限制清單。清單可能橫跨多個頁面。
如要找出強制執行區域性 DNS 的政策,請按一下「篩選」並選取「名稱」,然後將篩選器名稱設為「將新專案的內部 DNS 設定設為僅限區域性 DNS」。
按一下政策名稱,即可查看詳細資料。
政策詳細資料頁面提供限制和限制套用方式的相關資訊。
根據預設,資料夾或機構的強制執行狀態為未定義。 不過,如果上層資料夾已定義強制執行,則會從最接近的已定義強制執行的上層資料夾繼承強制執行。詳情請參閱「瞭解階層評估」。
如要自訂組織政策,請按一下「編輯」。
在編輯頁面中,選取「自訂」。
在「Enforcement」(強制執行) 下方,選取「On」 (開啟)。
這會將組織中所有新專案的預設內部 DNS 類型設為區域性 DNS。
按一下 [儲存]。
如要驗證組織政策變更,請在資料夾或機構下建立新專案,然後建立並啟動 VM 執行個體,並檢查 VM 是否已啟用區域 DNS。
如果工作負載內建的 DNS 名稱查詢需要使用全域 DNS 才能解析,您可以停用強制執行功能,在機構或資料夾層級還原這項變更。
改回使用組織或資料夾的全域 DNS
如要讓機構或資料夾恢復使用全域 DNS,請停止強制執行可用區 DNS 的機構政策。操作步驟如下。
在機構或資料夾層級停用組織政策
constraints/compute.setNewProjectDefaultToZonalDNSOnly。如要瞭解如何修改這項政策,請參閱「根據預設,對新專案強制執行可用區 DNS」。將「Sets the internal DNS setting for new projects to Zonal DNS Only」(將新專案的內部 DNS 設定設為僅限可用區 DNS) 的強制執行狀態設為「Off」(關閉)。
如要改回為整個組織使用全域 DNS,請確認組織中沒有任何資料夾強制執行組織政策
constraints/compute.setNewProjectDefaultToZonalDNSOnly。如要確認專案和執行個體是否已設定全域 DNS,請參閱「判斷資料夾或機構中的哪些專案使用全域 DNS」。
後續步驟
- 如要遷移使用全域 DNS 的現有專案,必須另外進行。詳情請參閱「更新專案,改用區域性 DNS」。
- 使用 Cloud DNS 記錄監控 DNS 失敗率。