環境定義型限制實務範例
透過基於情境的限制,帳戶擁有者和管理員可以根據存取請求的情境,定義並強制執行 IBM Cloud® 資源的存取限制。 IBM Cloud Kubernetes Service 資源的存取可透過情境限制以及身分和存取管理政策來控制。 如需詳細資訊,請參閱 使用基於上下文的限制保護 IBM Cloud Kubernetes Service 資源。
在 IBM Cloud Kubernetes Service 叢集上執行的應用程式,例如由 Kubernetes LoadBalancer, 揭露的 Web 伺服器,不受 CBR 規則的限制。
瞭解實務範例
在此範例情境中,您使用環境定義型限制來限制叢集的資料流量,方法是只容許個別 IP 位址透過公用網路連接至 cluster API,同時仍容許所有專用資料流量。
在下列步驟中,您首先建立包含單一 IP 位址的網路區域或允許清單。 然後,您為叢集建立環境定義型限制規則,以容許所有專用網路存取,並將包含個別 IP 位址的網路區域列入允許清單。 當您建立規則時,您會將它與包含個別 IP 位址的網路區域相關聯。
必要條件
開始本教學之前,請確認您已建立或安裝下列資源和工具。
- IBM Cloud 帳戶。 如需相關資訊,請參閱 建立帳戶。
- CLI 工具包括 IBM Cloud CLI、Containers 服務 CLI 外掛程式及 CBR 外掛程式。 如需相關資訊,請參閱開始使用 IBM Cloud CLI。
- 建立叢集。
- 檢閱 何謂環境定義型限制 文件,以瞭解網路區域及規則。
- 檢閱 使用環境定義型限制保護叢集資源 文件,以瞭解如何針對 IBM Cloud Kubernetes Service 資源運用 CBR。
- 檢閱 搭配使用 CBR 與 IBM Cloud Kubernetes Service 的限制。
建立網路區域
登入您的帳戶。 適用的話,請將適當的資源群組設為目標。 設定叢集的環境定義。
-
執行下列範例指令,以建立僅包含您要使用的一個用戶端 IP 的網路。
ibmcloud cbr zone-create --addresses 129.XX.XX.XX --description "Allow only client IP" --name allow-client-ip -
驗證已建立網路區域。
ibmcloud cbr zones
建立 CBR 規則
-
建立網路區域 (允許清單) 之後,請建立 CBR 規則,並新增您在前一個步驟中建立的網路區域。 下列範例會建立使用
clusterAPI 類型的規則。 將NETWORK-ZONE-ID取代為您在步驟 1 中建立之allow-client-ip網路區域的 ID。ibmcloud cbr rule-create --api-types crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster --description "privateAccess=allowAll, publicAccess=oneIP" --service-name containers-kubernetes --service-instance CLUSTER-ID --context-attributes endpointType=private --context-attributes endpointType=public,networkZoneId=NETWORK-ZONE-ID瞭解指令選項。
--api-types crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster- 將
crn:v1:bluemix:public:containers-kubernetes::::api-type:clusterAPI 設定為僅容許您先前建立之網路區域中的資源存取clusterAPI,其中包括各種kubectl指令的 API。 --service-instance CLUSTER-ID- 將規則範圍設定為單一叢集,以便只有您先前建立的網路區域中的資源才能僅存取
CLUSTER-ID。 --context-attributes endpointType=private- 設定環境定義屬性
endpointType=private而不關聯網路區域可容許所有專用資料流量至叢集。 --context-attributes endpointType=public,networkZoneId=all-client-ip- 設定環境定義屬性
endpointType=public,並關聯您先前建立的networkZoneId=allow-client-ip,以僅容許allow-client-ip區域中的資源透過公用網路存取叢集。
-
驗證已建立規則。
ibmcloud cbr rules
測試環境定義型限制
若要測試環境定義型限制設定,您可以嘗試透過公用網路來呼叫叢集的叢集 API (例如,透過列出 Pod),其 IP 位址不是您在網路區域中列入允許清單的個別 IP 位址。 使用此設定,容許所有專用連線功能,而只有網路區域中的個別 IP 位址可以透過公用網路連接至叢集 API。
其他實務範例
既然您已建立簡式 CBR 網路區域和規則,請檢閱下列更進階的範例,以進一步控制對 IBM Cloud Kubernetes Service 資源的存取權。
容許不同的 IP 存取公用及專用服務端點
在此實務範例中,您透過為每個 IP 位址建立個別網路區域,容許不同的 IP 位址或 CIDR 存取 IBM Cloud Kubernetes Service 叢集的公用及專用服務端點。 然後,您可以建立規則,以容許每一個網路區域存取公用或專用服務端點。
-
為公用 IP 位址或 CIDR 建立網路區域,並為您要容許存取 IBM Cloud Kubernetes Service 叢集的專用 IP 位址或 CIDR 建立另一個網路區域。
建立個別網路區域 (稱為
public-IP-zone和private-IP-zone) 的指令範例。 在此範例中,每一個區域都包含您要容許存取叢集的多個 IP 位址或 CIDR (以逗點區隔)。ibmcloud cbr zone-create --addresses 1.2.3.4,12.12.12.0/24 --description "Allowed Public IP Addresses Zone" --name "public-ip-zone"ibmcloud cbr zone-create --addresses 10.20.20.20,10.10.10.0/24 --description "Allowed Private IP Addresses Zone" --name "private-ip-zone" -
取得您在前一個步驟中建立之
private-ip-zone和public-ip-zone區域的 ID。ibmcloud cbr zones -
建立規則,可讓
private-ip-zone連接至叢集的專用服務端點,也可讓public-ip-zone只連接至叢集的公用服務端點。 此規則適用於使用--service-instance選項指定的叢集。 如果您要將規則套用至帳戶中的所有叢集,請不要指定叢集。ibmcloud cbr rule-create --context-attributes "endpointType=public,networkZoneId=PUBLIC-IP-ZONE-ID" --context-attributes "endpointType=private,networkZoneId=PRIVATE-IP-ZONE-ID" --description "Separate private and public IPs for cluster and management rule" --service-name containers-kubernetes --service-instance CLUSTER-ID
容許不同的 IP 透過公用及專用服務端點存取不同的 API 類型
與前一個方案類似,在此方案中,您允許不同的 IP 位址存取 IBM Cloud Kubernetes Service 叢集的公用或私有服務端點。 不過,在此情況下,cluster 和 management API 的特定 API 類型會進一步限制存取權。 如需 API 類型的相關資訊,請參閱 保護特定 API。
-
建立四個網路區域,您要容許存取公用或專用
clusterAPI 或公用或專用managementAPI 的每個 IP 位址各一個。 請注意,您可以併入多個 IP 位址或 CIDR (以逗點區隔),以容許存取叢集。ibmcloud cbr zone-create --addresses 1.2.3.4,12.12.12.0/24 --description "Allowed Public IP Addresses for IKS and ROKS APIs" --name "public-mgmt-zone"ibmcloud cbr zone-create --addresses 10.20.20.20,10.10.10.0/24 --description "Allowed Private IP Addresses IKS and ROKS APIs" --name "private-mgmt-zone"ibmcloud cbr zone-create --addresses 11.11.11.0/24 --description "Allowed Public IP Addresses for cluster apiserver" --name "public-cluster-zone"ibmcloud cbr zone-create --addresses 10.30.30.30 --description "Allowed Private IP Addresses for cluster apiserver" --name "private-cluster-zone" -
取得您在前一個步驟中建立之區域的 ID。
ibmcloud cbr zones輸出範例
OK id name address_count c14c0839c13d8aa0afa8383e2be2e124 public-mgmt-zone 2 f9676ca6ef37685315fa254b89d73159 public-cluster-zone 1 c14c0839c13d8aa0afa8383e2be2e843 private-cluster-zone 1 b53353de929de39ac2381f9b4cde8507 private-mgmt-zone 2 -
使用您先前建立的區域來建立規則,以保護對公用及專用
cluster和managementAPI 的存取權。ibmcloud cbr rule-create --api-types crn:v1:bluemix:public:containers-kubernetes::::api-type:management --context-attributes "endpointType=public,networkZoneId=PUBLIC-MGMT-ZONE-ID" --context-attributes "endpointType=private,networkZoneId=PRIVATE-MGMT-ZONE-ID" --description "Separate private and public IPs for the management APIs" --service-name containers-kubernetesibmcloud cbr rule-create --api-types crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster --context-attributes "endpointType=public,networkZoneId=PUBLIC-CLUSTER-ZONE-ID" --context-attributes "endpointType=private,networkZoneId=PRIVATE-CLUSTER-ZONE-ID" --description "Separate private and public IPs for cluster APIs" --service-name containers-kubernetes