本頁說明如何建立或更新叢集時,為 Google Kubernetes Engine (GKE) 叢集設定網路隔離。
與貴機構的網路架構師、網路管理員,或任何負責定義、實作及維護網路架構的網路工程師團隊,共同規劃及設計叢集網路隔離。
叢集網路隔離的運作方式
在 GKE 叢集中,網路隔離取決於誰可以存取叢集元件,以及存取方式。您可以控管:
- 控制層存取權:您可以自訂控制層的外部存取權、受限存取權或無限制存取權。
- 叢集網路:您可以選擇哪些人可以存取 Standard 叢集中的節點,或 Autopilot 叢集中的工作負載。
建立叢集前,請先考量下列事項:
- 誰可以存取控制層?控制層的公開方式為何?
- 節點或工作負載的公開方式為何?
如要回答這些問題,請參閱「關於網路隔離」一文中的計畫和設計規範。
規定與限制
根據預設,GKE 會將叢集建立為虛擬私有雲原生叢集。虛擬私有雲原生叢集不支援舊版網路。
節點集區層級的 Pod 次要範圍:建立 GKE 叢集時,如果您透過 UI 指定的 Pod 次要範圍小於每個節點集區的 /24
,可能會遇到下列錯誤:
Getting Pod secondary range 'pod' must have a CIDR block larger or equal to /24
GKE 不支援在節點集區層級指定小於 /24
的範圍。不過,系統支援在叢集層級指定較小的範圍。如要執行這項操作,請使用 Google Cloud CLI 和 --cluster-ipv4-cidr
引數。詳情請參閱「使用特定 CIDR 範圍建立叢集」。
展開下列各節,查看建立叢集時的 IP 位址範圍和流量相關規則。
事前準備
開始之前,請確認你已完成下列工作:
- 啟用 Google Kubernetes Engine API。 啟用 Google Kubernetes Engine API
- 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行
gcloud components update
,取得最新版本。
設定控制層存取權
使用 Google Cloud CLI 建立任何版本的 GKE 叢集,或使用控制台建立 1.29 以上版本的叢集時,可透過下列介面存取控制平面:
以 DNS 為基礎的端點
控制層的存取權取決於來源流量的 DNS 解析。 啟用以 DNS 為基礎的端點,即可享有下列好處:
- 根據 IAM 政策建立動態存取權政策。
- 從其他 VPC 網路或外部位置存取控制層,不必設定防禦主機或 Proxy 節點。
如要設定 DNS 型端點的存取權,請參閱「定義 DNS 型端點存取權」。
以 IP 為準的端點
控制層端點的存取權取決於來源 IP 位址,並由授權網路控管。您可以管理控制層的 IP 型端點存取權,包括:
- 啟用或停用以 IP 為基礎的端點。
- 啟用或停用外部端點,允許外部流量存取。啟用控制層的 IP 型端點時,系統一律會啟用內部端點。
- 新增授權網路至允許清單,或拒絕來自公開 IP 位址的存取要求。 如果您未設定授權網路,控制層可從任何外部 IP 位址存取。包括公用網際網路或 Google Cloud 外部 IP 位址 ,以及沒有限制的位址。
- 允許或拒絕叢集中任何或所有私人 IP 位址的存取要求。
- 允許或拒絕來自Google Cloud 外部 IP 位址的存取要求。這些外部 IP 位址會指派給 Google Cloud上任何客戶使用的 VM。
- 允許或拒絕其他 Google Cloud 區域的 IP 位址存取。
定義控制層存取權之前,請先查看使用以 IP 為基礎的端點的限制。
建立叢集並定義控制層存取權
如要建立或更新 Autopilot 或 Standard 叢集,請使用 Google Cloud CLI 或 Google Cloud 控制台。
控制台
如要建立叢集,請完成下列步驟:
前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。
按一下「add_box Create」(建立)。
根據專案需求設定叢集的屬性。
在導覽選單中,按一下「網路」。
在「控制層存取權」下方,設定控制層端點:
- 選取「Access using DNS」核取方塊,啟用控制層的 DNS 端點。
- 選取「透過 IPv4 位址存取」核取方塊,啟用控制層的 IP 位址端點。使用「定義可存取控制層的 IP 位址」中包含的設定,自訂 IP 型端點的存取權。
gcloud
如果是 Autopilot 叢集,請執行下列指令:
gcloud container clusters create-auto CLUSTER_NAME \
--enable-ip-access \
--enable-dns-access
如果是標準叢集,請執行下列指令:
gcloud container clusters create CLUSTER_NAME \
--enable-ip-access \
--enable-dns-access
更改下列內容:
CLUSTER_NAME
:叢集名稱。
這兩項指令都包含可啟用下列功能的標記:
enable-dns-access
:啟用控制層的 DNS 型端點,以存取控制層。enable-ip-access
:啟用透過 IPv4 位址存取控制層的功能。如要同時停用控制層的內部和外部端點,請改用no-enable-ip-access
旗標。
使用「定義可存取控制層的 IP 位址」中列出的標記,自訂 IP 型端點的存取權。
定義 DNS 型端點的存取權
您可以設定 IAM 權限 container.clusters.connect
,管理 DNS 型端點的驗證和授權。如要設定這項權限,請將下列其中一個 IAM 角色指派給Google Cloud 專案:
roles/container.developer
roles/container.viewer
您也可以視需要使用下列功能,管理 DNS 型端點的可連線性:
VPC Service Controls:以 DNS 為基礎的端點支援 VPC Service Controls,可為控制平面存取權新增一層安全防護。VPC Service Controls 可在 Google Cloud API 中穩定運作。
從無法存取公開網際網路的用戶端存取 DNS 型端點:DNS 型端點可透過公開網際網路上的 Google Cloud API 存取。如要從私人用戶端存取 DNS 型端點,可以使用 Private Google Access、Cloud NAT 閘道,或 Private Service Connect for APIs Google Cloud 。
使用 Private Service Connect 存取 API 時,GKE 會將對
gke.goog
位址的要求重新導向至 Private Service Connect for Google API 新增的內部 IP 位址,而非預設的 Google 公用 IP 位址。 Google Cloud 如要為 Google Cloud API 設定 Private Service Connect,請完成「透過端點存取 Google API」一文中的步驟。從內部部署用戶端存取 DNS 型端點:內部部署用戶端可透過私人 Google 存取權存取 DNS 型端點。如要設定私人 Google 存取權,請完成「設定內部部署主機的私人 Google 存取權」一文中的步驟。
定義可存取控制層的 IP 位址
如要定義可存取控制層的 IP 位址,請完成下列步驟:
控制台
- 在「控制層存取權」下方,選取「啟用授權網路」。
- 點選「新增授權網路」。
- 輸入網路的 [Name] (名稱)。
- 在「網路」中,輸入要授予叢集控制層存取權的 CIDR 範圍。
- 按一下 [完成]。
- 視需要新增其他授權網路。
定義控制層 IP 位址防火牆規則
如要定義控制層 IP 位址防火牆規則,請完成下列步驟:
- 展開「顯示 IP 位址防火牆規則」部分。
選取「透過控制層的外部 IP 位址存取」核取方塊,允許從公開 IP 位址存取控制層。
最佳做法: 定義控制層授權網路,限制控制層存取權。
選取「從任意區域透過控制層的內部 IP 位址存取」核取方塊。任何區域的內部 IP 位址都可以存取控制層內部端點。 Google Cloud
選取「在控制層的內部端點強制使用授權網路」。只有您在「新增授權網路」清單中定義的 IP 位址,才能存取控制層內部端點。內部端點預設為啟用。
選取「為授權網路新增外部 IP 位址」 Google Cloud 。 Google Cloud 中的所有公開 IP 位址都可以存取控制層。
gcloud
您可以使用下列標記,設定可存取控制層外部和內部端點的 IP 位址:
enable-private-endpoint
:指定停用外部端點的存取權。如要允許從外部 IP 位址存取控制層,請省略這個旗標。在這種情況下,我們強烈建議您使用enable-master-authorized-networks
旗標控管外部端點的存取權。enable-master-authorized-networks:
表示僅有您授權的 IP 位址範圍可以存取外部端點。master-authorized-networks
:列出授權網路的 CIDR 值。這份清單是以半形逗號分隔。 例如:8.8.8.8/32,8.8.8.0/24
。最佳做法: 使用
enable-master-authorized-networks
旗標,限制控制層存取權。enable-authorized-networks-on-private-endpoint
:指定只有您透過enable-master-authorized-networks
標記授權的 IP 位址範圍,才能存取內部端點。no-enable-google-cloud-access
:拒絕從外部 IP 位址存取控制層。Google Cloudenable-master-global-access
:允許從其他區域的 IP 位址存取。Google Cloud您可以繼續定義叢集層級的節點或 Pod 隔離,設定叢集網路。
您也可以建立叢集,並在叢集層級定義屬性,例如節點網路和子網路、IP 堆疊類型和 IP 位址分配。詳情請參閱「建立虛擬私有雲原生叢集」。
修改控制層存取權
如要變更叢集的控制層存取權,請使用 gcloud CLI 或 Google Cloud 控制台。
控制台
前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。
在叢集清單中,按一下叢集名稱。
在「叢集詳細資料」分頁的「控制層網路」下方,按一下 edit。
在「編輯控制層網路」對話方塊中,根據您的用途需求修改控制層存取權。
gcloud
執行下列指令,並附加符合您用途的旗標。您可以使用下列標記:
enable-dns-access
:啟用控制層的 DNS 型端點,以存取控制層。enable-ip-access
:啟用透過 IPv4 位址存取控制層的功能。如要同時停用控制層的內部和外部端點,請改用no-enable-ip-access
旗標。enable-private-endpoint
:指定停用外部端點的存取權。如要允許從外部 IP 位址存取控制層,請省略這個旗標。在這種情況下,我們強烈建議您使用enable-master-authorized-networks
旗標控管外部端點的存取權。enable-master-authorized-networks:
表示僅有您授權的 IP 位址範圍可以存取外部端點。master-authorized-networks
:列出授權網路的 CIDR 值。這份清單是以半形逗號分隔。 例如:8.8.8.8/32,8.8.8.0/24
。最佳做法: 使用
enable-master-authorized-networks
旗標,限制控制層存取權。enable-authorized-networks-on-private-endpoint
:指定只有您透過enable-master-authorized-networks
標記授權的 IP 位址範圍,才能存取內部端點。no-enable-google-cloud-access
:拒絕從外部 IP 位址存取控制層。Google Cloudenable-master-global-access
:允許從其他區域的 IP 位址存取。Google Cloudgcloud container clusters update CLUSTER_NAME
將
CLUSTER_NAME
替換為叢集名稱。
驗證控制層設定
您可以使用 gcloud CLI 或Google Cloud 控制台查看叢集端點。
控制台
前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。
在叢集清單中,按一下叢集名稱。
在「叢集詳細資料」分頁的「控制層」下方,您可以查看控制層端點的下列特徵:
- DNS 端點包含叢集 DNS 型端點的名稱 (如果已啟用這個端點)。
- 「透過 IPv4 位址存取控制層」包含以 IP 為基礎的端點狀態。啟用後,您就能查看公開和私人端點的資訊。
- 如果可從其他區域透過 Google IP 位址存取控制層,「從任意區域透過控制層的內部 IP 位址存取」會顯示「已啟用」狀態。
- 如果已啟用授權網路,「授權網路」會顯示可存取控制層的 CIDR 清單。
- 如果只有「授權網路」欄位中的 CIDR 可以存取內部端點,「在控制層的內部端點強制使用授權網路」就會顯示「已啟用」狀態。
- 如果來自 Google Cloud的外部 IP 位址可以存取控制層,「為授權網路新增外部 IP 位址」 Google Cloud 會顯示「已啟用」狀態。
如要修改任何屬性,請按一下「透過 IPv4 位址存取控制層」edit,然後根據您的用途進行調整。
gcloud
如要驗證控制平面設定,請執行下列指令:
gcloud container clusters describe CLUSTER_NAME
輸出內容包含說明網路定義的 controlPlaneEndpointsConfig
區塊。您會看到類似以下的輸出內容:
controlPlaneEndpointsConfig:
dnsEndpointConfig:
allowExternalTraffic: true
endpoint: gke-dc6d549babec45f49a431dc9ca926da159ca-518563762004.us-central1-c.autopush.gke.goog
ipEndpointsConfig:
authorizedNetworksConfig:
cidrBlocks:
- cidrBlock: 8.8.8.8/32
- cidrBlock: 8.8.8.0/24
enabled: true
gcpPublicCidrsAccessEnabled: false
privateEndpointEnforcementEnabled: true
enablePublicEndpoint: false
enabled: true
globalAccess: true
privateEndpoint: 10.128.0.13
在本例中,叢集的設定如下:
- 已啟用 DNS 和 IP 位址型端點。
- 已啟用授權網路並定義 CIDR 範圍。系統會對內部 IP 位址強制執行這些授權網路。
- 拒絕從 Google Cloud 外部 IP 位址存取控制層。
控制層存取權設定範例
本節將詳細說明下列網路隔離範例的設定。評估這些範例與您用途的相似程度:
- 範例 1:控制層可透過您定義的特定 IP 位址存取。 包括其他 Google Cloud 區域的 IP 位址或 Google 保留的 IP 位址。
- 示例 2:無法透過任何外部 IP 位址存取控制層。
範例 1:控制層可透過特定 IP 位址存取
在本節中,您將建立具有下列網路隔離設定的叢集:
- 控制層已啟用 DNS 型端點。
- 控制層除了預設啟用的內部端點外,也啟用了外部端點。
- 控制層已定義授權網路,因此只有下列授權網路可以連線至控制層:
- 您定義的外部 IP 位址範圍。
- 叢集中的所有內部 IP 位址。
- Google Cloud 外部 IP 位址。
如要建立這個叢集,請使用 Google Cloud CLI 或 Google Cloud 控制台。
控制台
前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。
按一下「add_box Create」(建立)。
視需求設定叢集。
在導覽選單中,按一下「網路」。
在「控制層存取權」下方,設定控制層端點:
- 選取「透過 DNS 存取」核取方塊。
- 選取「透過 IPv4 位址存取」核取方塊。
選取「啟用授權網路」。
點選「新增授權網路」。
輸入網路的 [Name] (名稱)。
在「網路」中,輸入要授予叢集控制層存取權的 CIDR 範圍。
按一下 [完成]。
視需要新增其他授權網路。
展開「顯示 IP 位址防火牆規則」部分。
選取「從任意區域透過控制層的內部 IP 位址存取」。任何 Google Cloud 區域的內部 IP 位址都可以透過內部 IP 位址存取控制層。
選取「為授權網路新增外部 IP 位址」 Google Cloud 。來自 Google Cloud 的所有外部 IP 位址都可以存取控制層。
您可以定義叢集層級的節點或 Pod 隔離,繼續設定叢集網路。
gcloud
執行下列指令:
gcloud container clusters create-auto CLUSTER_NAME \
--enable-dns-access \
--enable-ip-access \
--enable-master-authorized-networks \
--enable-master-global-access \
--master-authorized-networks CIDR1,CIDR2,...
更改下列內容:
CLUSTER_NAME
:GKE 叢集的名稱。CIDR1,CIDR2,...
:授權網路的 CIDR 值清單,以半形逗號分隔。例如:8.8.8.8/32,8.8.8.0/24
。
範例 2:可透過內部 IP 位址存取控制層
在本節中,您將建立具有下列網路隔離設定的叢集:
- 控制層已啟用 DNS 型端點。
- 控制層已停用外部端點。
- 控制層已啟用授權網路。
- 允許從任何Google Cloud 區域透過內部 IP 位址存取控制層。
- Google Cloud 外部 IP 位址無法存取叢集。
您可以使用 Google Cloud CLI 或 Google Cloud 控制台建立這類叢集。
控制台
前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。
按一下「add_box Create」(建立)。
視需求設定叢集。
在導覽選單中,按一下「網路」。
在「控制層存取權」下方,設定控制層端點:
- 選取「透過 DNS 存取」核取方塊。
- 選取「透過 IPv4 位址存取」核取方塊。
展開「顯示 IP 位址防火牆規則」部分。
取消選取「透過控制層的外部 IP 位址存取」。任何外部 IP 位址都無法存取控制層。
在「控制層存取權」下方,選取「啟用授權網路」。
選取「從任意區域透過控制層的內部 IP 位址存取」核取方塊。任何 Google Cloud 區域 的內部 IP 位址都可以透過內部 IP 位址存取控制層。
您可以繼續叢集網路設定,在叢集層級定義節點或 Pod 隔離。
gcloud
執行下列指令:
gcloud container clusters create-auto CLUSTER_NAME \
--enable-dns-access \
--enable-ip-access \
--enable-private-endpoint \
--enable-master-authorized-networks \
--master-authorized-networks CIDR1,CIDR2,... \
--no-enable-google-cloud-access \
--enable-master-global-access
更改下列內容:
CLUSTER_NAME
:叢集名稱。CIDR1,CIDR2,...
:授權網路的 CIDR 值清單,以半形逗號分隔。例如:8.8.8.8/32,8.8.8.0/24
。
設定叢集網路
在本節中,您將設定叢集,讓節點具備內部 (私人) 或外部 (公開) 存取權。GKE 可讓您根據使用的叢集類型,合併節點網路設定:
- 標準叢集:您可以建立或更新節點集區,在同一個叢集中佈建私有或公開節點。舉例來說,如果您建立含有私人節點的節點集區,GKE 佈建節點時只會使用內部 IP 位址。GKE 不會修改現有節點集區。您也可以在叢集層級定義預設網路設定。只有在新的節點集區未定義任何網路設定時,GKE 才會套用這項預設網路設定。
- Autopilot 叢集:您可以建立或更新叢集,為所有工作負載定義預設網路設定。GKE 會根據您的設定,在公有或私有節點上排定新工作負載和現有工作負載。您也可以明確定義個別工作負載的叢集網路設定。
設定叢集
在本節中,請在叢集層級設定叢集網路。如果節點集區或工作負載未定義這項設定,GKE 會採用這個設定。
如要定義叢集層級的設定,請使用 Google Cloud CLI 或Google Cloud 主控台。
控制台
建立叢集
前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。
按一下「建立」add_box,然後在「標準」或「Autopilot」部分中,按一下「設定」。
視需求設定叢集。
在導覽選單中,按一下「網路」。
在「叢集網路」部分,根據您的用途完成下列步驟:
- 選取「啟用私人節點」,即可佈建只有內部 IP 位址的節點 (私人節點),防止外部用戶端存取節點。你隨時可以變更這些設定。
- 取消選取「啟用私人節點」,即可佈建只有外部 IP 位址 (公開) 的節點,讓外部用戶端存取節點。
在「Advanced networking options」(進階網路選項) 區段中,設定其他虛擬私有雲原生屬性。詳情請參閱「建立虛擬私有雲原生叢集」。
點選「建立」。
更新現有叢集
前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。
在叢集清單中,按一下叢集名稱。
在「私人節點」的「預設新節點集區設定」分頁中,按一下 edit「編輯私人節點」。
在「Edit Private Nodes」(編輯私人節點) 對話方塊中,執行下列任一操作:
- 選取「啟用私人節點」,即可佈建只有內部 IP 位址的節點 (私人節點),防止外部用戶端存取節點。你隨時可以變更這些設定。
- 取消選取「啟用私人節點」,即可佈建只有外部 IP 位址 (公開) 的節點,讓外部用戶端存取節點。
按一下 [儲存變更]。
gcloud
使用下列任一標記定義叢集網路:
enable-private-nodes
:只透過內部 IP 位址佈建節點 (私人節點)。使用這個標記時,請注意下列條件:- 使用
enable-private-nodes
時,必須提供enable-ip-alias
旗標。 - 建立私人子網路時,
master-ipv4-cidr
標記為選用。如果您使用這個標記,GKE 會建立新的子網路,並使用您在master-ipv4-cidr
中定義的值,然後使用新的子網路為控制層佈建內部 IP 位址。
- 使用
no-enable-private-nodes
:僅使用外部 IP 位址 (公開節點) 佈建節點。
在 Autopilot 叢集中,建立或更新叢集時,請使用 enable-private-nodes
旗標。
如要建立叢集,請使用下列指令:
gcloud container clusters create-auto CLUSTER_NAME \ --enable-private-nodes \ --enable-ip-alias
如要更新叢集,請使用下列指令。
gcloud container clusters update CLUSTER_NAME \ --enable-private-nodes \ --enable-ip-alias
只有在所有節點集區重新排程後,叢集更新才會生效。這項程序可能需要數小時。
在標準叢集中,建立或更新叢集時,請使用 enable-private-nodes
旗標。
如要建立叢集,請使用下列指令:
gcloud container clusters create CLUSTER_NAME \ --enable-private-nodes \ --enable-ip-alias
如要更新叢集,請使用下列指令:
gcloud container clusters update CLUSTER_NAME \ --enable-private-nodes \ --enable-ip-alias
叢集更新只會影響新的節點集區。GKE 不會更新現有節點集區的這項設定。
叢集設定會遭到節點集區或工作負載層級的網路設定覆寫。
設定節點集區或工作負載
如要為 Autopilot 叢集的工作負載設定私有或公開節點,或是為 Standard 叢集設定節點集區,請使用 Google Cloud CLI 或Google Cloud 控制台。如果您未在工作負載或節點集區層級定義網路設定,GKE 會在叢集層級套用預設設定。
控制台
在標準叢集中,請完成下列步驟:
前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。
在「叢集詳細資料」頁面中,按一下要修改的叢集名稱。
按一下 add_box「Add Node Pool」(新增節點集區)。
根據用途設定「啟用私人節點」核取方塊:
- 選取「啟用私人節點」,即可只透過內部 IP 位址佈建節點 (私人節點)。
- 取消選取「啟用私人節點」,即可只佈建具有外部 IP 位址 (公開) 的節點,讓外部用戶端存取節點。您隨時可以變更這項設定。
設定新的節點集區。
點選「建立」。
如要進一步瞭解如何管理節點集區,請參閱「新增及管理節點集區」。
gcloud
在 Autopilot 叢集和使用節點自動佈建功能的 Standard 節點集區中,將下列
nodeSelector
新增至 Pod 規格:cloud.google.com/private-node=true
使用
private-node=true
在只有內部 IP 位址 (私人節點) 的節點上排定 Pod。GKE 會根據您的設定,在私人節點或公開節點上重新建立 Pod。為避免工作負載中斷,請個別遷移每個工作負載,並監控遷移作業。
在標準叢集中,如要透過現有節點集區中的私人 IP 位址佈建節點,請執行下列指令:
gcloud container node-pools update NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --enable-private-nodes \ --enable-ip-alias
更改下列內容:
NODE_POOL_NAME
:要編輯的節點集區名稱。CLUSTER_NAME
:現有叢集的名稱。
使用下列任一標記定義節點集區網路設定:
enable-private-nodes
:僅透過內部 IP 位址佈建節點 (私人節點)。no-enable-private-nodes
:僅使用外部 IP 位址 (公開節點) 佈建節點。
進階設定
下列各節說明設定叢集網路隔離時可能需要的進階設定。
使用 Cloud Shell 存取已停用外部端點的叢集
如果叢集控制層的外部端點已停用,您就無法透過 Cloud Shell 存取 GKE 控制層。如要使用 Cloud Shell 存取叢集,建議啟用以 DNS 為基礎的端點。
如要驗證叢集存取權,請完成下列步驟:
如果您已啟用 DNS 型端點,請執行下列指令,取得叢集的憑證:
gcloud container clusters get-credentials CLUSTER_NAME \ --dns-endpoint
如果您已啟用以 IP 為準的端點,請執行下列指令來取得叢集的憑證:
gcloud container clusters get-credentials CLUSTER_NAME \ --project=PROJECT_ID \ --internal-ip
將
PROJECT_ID
替換為您的專案 ID。在 Cloud Shell 中使用
kubectl
存取叢集:kubectl get nodes
輸出結果會與下列內容相似:
NAME STATUS ROLES AGE VERSION gke-cluster-1-default-pool-7d914212-18jv Ready <none> 104m v1.21.5-gke.1302 gke-cluster-1-default-pool-7d914212-3d9p Ready <none> 104m v1.21.5-gke.1302 gke-cluster-1-default-pool-7d914212-wgqf Ready <none> 104m v1.21.5-gke.1302
如果停用以 IP 為依據的端點存取權,get-credentials
指令會自動使用以 DNS 為依據的端點。
新增特定用途的防火牆規則
本節說明如何將防火牆規則新增至叢集。根據預設,防火牆規則會限制叢集控制平面,使其只能發起 TCP 連線到通訊埠 443
(HTTPS) 和 10250
(kubelet) 上的節點和 Pod。針對某些 Kubernetes 功能,您可能需要新增防火牆規則,以允許其他通訊埠進行存取。請勿建立優先順序高於自動建立防火牆規則的防火牆規則或階層式防火牆政策規則。
需要額外防火牆規則的 Kubernetes 功能包括:
- 准入 Webhook
- 匯總 API 伺服器
- Webhook 轉換
- 動態稽核設定
- 一般來說,凡是具有 ServiceReference 欄位的 API,都需要額外的防火牆規則。
新增防火牆規則,允許從叢集控制層到下列所有位置的流量:
- 每個節點的指定通訊埠 (hostPort)。
- 在這些節點上執行的每個 Pod 的指定通訊埠。
- 在這些節點上執行的每個 Service 的指定通訊埠。
如要瞭解防火牆規則,請參閱 Cloud Load Balancing 說明文件中的防火牆規則。
如要在叢集中新增防火牆規則,您需要記錄叢集控制平面的 CIDR 區塊和使用的目標。記錄完畢後,即可建立規則。
查看控制層的 CIDR 區塊
您需要叢集控制層的 CIDR 區塊才能新增防火牆規則。
控制台
前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。
在叢集清單中,按一下叢集名稱。
在「詳細資料」分頁的「網路」下方,記下「控制層位址範圍」欄位的值。
gcloud
執行下列指令:
gcloud container clusters describe CLUSTER_NAME
將 CLUSTER_NAME
替換為叢集名稱。
請記下指令列輸出中,「masterIpv4CidrBlock」欄位中的值。
查看現有的防火牆規則
您必須指定叢集的現有防火牆規則使用的目標 (這裡指的是目的地節點)。
控制台
前往 Google Cloud 控制台的「Firewall policies」(防火牆政策) 頁面。
在「VPC firewall rules」(虛擬私有雲防火牆規則) 的「Filter table」(篩選資料表) 中,輸入
gke-CLUSTER_NAME
。
請記下「Targets」(目標) 欄位中的值。
gcloud
請執行下列指令:
gcloud compute firewall-rules list \
--filter 'name~^gke-CLUSTER_NAME' \
--format 'table(
name,
network,
direction,
sourceRanges.list():label=SRC_RANGES,
allowed[].map().firewall_rule().list():label=ALLOW,
targetTags.list():label=TARGET_TAGS
)'
請記下指令輸出中,「Targets」(目標) 欄位中的值。
如要查看共用虛擬私有雲的防火牆規則,請在指令中加入 --project HOST_PROJECT_ID
旗標。
新增防火牆規則
控制台
前往 Google Cloud 控制台的「Firewall policies」(防火牆政策) 頁面。
按一下「建立防火牆規則」add_box。
在「Name」(名稱) 欄位中,輸入防火牆規則的名稱。
在「Network」(網路) 清單中,選取相關的網路。
在「Direction of traffic」(流量方向) 中,按一下「Ingress」(輸入)。
在「Action on match」(相符時執行的動作) 中,按一下「Allow」(允許)。
在「Targets」(目標) 清單中,選取「Specified target tags」(指定的目標標記)。
在「目標標記」中,輸入您先前記下的目標值。
在「來源篩選器」清單中,選取「IPv4 範圍」。
在「來源 IPv4 範圍」中,輸入叢集控制層的 CIDR 區塊。
在「Protocols and ports」(通訊協定和通訊埠) 中,按一下「Specified protocols and ports」(指定的通訊協定和通訊埠),選取相關通訊協定 (tcp 或 udp) 的核取方塊,然後在通訊協定欄位中輸入通訊埠號碼。
點選「建立」。
gcloud
執行下列指令:
gcloud compute firewall-rules create FIREWALL_RULE_NAME \
--action ALLOW \
--direction INGRESS \
--source-ranges CONTROL_PLANE_RANGE \
--rules PROTOCOL:PORT \
--target-tags TARGET
更改下列內容:
FIREWALL_RULE_NAME
:您選擇的防火牆規則名稱。CONTROL_PLANE_RANGE
:先前收集的叢集控制平面 IP 位址範圍 (masterIpv4CidrBlock
)。PROTOCOL:PORT
:通訊埠及其通訊協定 (tcp
或udp
)。TARGET
:先前收集的目標 (Targets
) 值。
如要為共用虛擬私有雲新增防火牆規則,請在指令中加入下列旗標:
--project HOST_PROJECT_ID
--network NETWORK_ID
將連出網際網路的權限授予私人節點
如要為私人節點提供連出網際網路的權限 (例如從外部登錄檔提取映像檔),請使用 Cloud NAT 建立及設定 Cloud Router。有了 Cloud NAT,私人節點就能透過網際網路建立傳出連線,傳送及接收封包。
Cloud Router 可讓區域中的所有節點,將 Cloud NAT 用於所有主要和別名 IP 範圍。還能自動為 NAT 閘道分配外部 IP 位址。
如需建立及設定 Cloud Router 的操作說明,請參閱 Cloud NAT 說明文件中的「使用 Cloud Router 建立 Cloud NAT 設定」。
部署 Windows Server 容器應用程式
如要瞭解如何將 Windows Server 容器應用程式部署至具有私人節點的叢集,請參閱 Windows 節點集區說明文件。