管理 VPC 叢集中的出站流量保護

虛擬私有雲 4.15 後來

請參閱以下用於管理Red Hat OpenShift on IBM Cloud VPC 叢集中的出站流量保護的選項。 您可以允許所有出站存取或選擇性地允許到應用程式所需的元件的出站流量。

在以下許多場景中,您可以選擇將自訂規則新增至 kube-<clusterID> 安全性群組,以允許出站流量流向特定資源。 請注意,如果您稍後執行 ibmcloud oc security-group reset 您已新增至 kube-<clusterID> 安全性群組的規則將被刪除。 重設安全群組會恢復預設規則並刪除您新增的任何規則。

停用出站流量保護

虛擬私有雲 4.15 後來

查看以下選項以停用新叢集的出站流量保護。

您可以使用 outbound traffic protection enabledisable 命令來開啟和關閉出站流量保護。 當您不再允許所有出站流量時,您可能需要在兩種配置之間切換。

選項 1:建立叢集時停用出站流量保護

此選項允許所有出站網路連線。

  • 在控制台中,選擇允許出站流量選項。
  • 在 CLI 中,當您使用 cluster create vpc-gen2指令 建立叢集時,請指定 --disable-outbound-traffic-protection 選項。
  • 在 Terraform 中,指定 disable_outbound_traffic_protection = true 選項。
  • 在 API 中,指定 disableOutboundTrafficProtection=true 選項。

選項 2:允許出站流量通過自訂安全群組

在建立叢集之前,請在您的 VPC 中建立 自訂安全群組,以允許存取您的叢集所需存取的外部網站或服務。 然後,在叢集建立期間將此安全性群組附加到您的叢集。

  • 在控制台中,指定您的自訂安全群組。
  • 在 CLI 中,當您使用 cluster create vpc-gen2命令 建立叢集時,請指定 --cluster-security-group <security-group-ID> 選項並包含您的自訂安全群組 ID。
  • 在 Terraform 中,指定 security_groups選項並包含您的自訂群組。

停用現有叢集的出站流量保護

虛擬私有雲 4.15 後來

配置叢集後,請檢查停用出站流量保護的選項。

選項 1:從 CLI 停用出站流量保護

此選項允許所有外部網路連線。

ibmcloud oc vpc outbound-traffic-protection disable --cluster CLUSTER

選項 2:將安全性群組規則新增至預設叢集工作執行緒安全性群組

您可以向叢集工作線程安全群組 ( kube-<clusterID> ) 新增安全性群組規則,以允許存取特定的外部網站。 對叢集需要存取的每個網站或子網路重複此步驟。 有關詳細信息,請參閱選擇性允許出站流量的範例場景

ibmcloud is sg-rulec kube-CLUSTERID outbound icmp_tcp_udp --remote IP-ADDRESS-OR-SUBNET

為現有叢集啟用出站流量保護

虛擬私有雲 4.15 後來

若要為現有4.15叢集啟用出站保護,請執行以下命令。 請注意,啟用出站流量保護會阻止所有出站流量。

ibmcloud oc vpc outbound-traffic-protection enable --cluster CLUSTER

選擇性地允許出站流量的範例場景

請查看以下部分,以了解如何允許出站流量流向公共資源和元件,例如外部容器註冊表(如 quay.io、Red Hat Marketplace和OperatorHub。 請注意,當您透過建立自訂安全群組規則選擇性地允許出站流量時,如果您透過執行 ibmcloud oc security-group reset 命令將安全群組重設為預設設置,則您的變更將被刪除。

從外部容器註冊表(如DockerHub或 quay.io 存取映像

若要從DockerHub或 quay.ioregistry.redhat.com 等登錄機碼存取映像,請選擇下列選項之一。

  • 停用出站流量保護。
    ibmcloud oc vpc outbound-traffic-protection disable --cluster CLUSTER
    
  • 鏡像您的應用程式所需的圖像 icr.io。 拉取、標記這些影像並將其推送到IBM Cloud Container Registry。 有關更多信息,請參閱 將圖像推送到IBM Cloud Container Registry

允許出站流量流向Red Hat Marketplace和OperatorHub

以下步驟啟用所有出站流量。 若您不想啟用此功能,可 將應用程式所需的 Red Hat Marketplace 和 OperatorHub 映像檔鏡像 至您自己的 icr.io

  1. 停用出站流量保護。

    ibmcloud oc vpc outbound-traffic-protection disable --cluster CLUSTER
    
  2. 在叢集上修補OperatorHub以允許 Pod 啟動。

    oc patch OperatorHub cluster --type json -p '[{"op": "remove", "path": "/spec/disableAllDefaultSources"}]'
    

若要稍後恢復這些變更並停用OperatorHub,請完成以下步驟。

  1. 啟用出站流量保護。

    ibmcloud oc vpc outbound-traffic-protection enable --cluster CLUSTER
    
  2. 在叢集上修補OperatorHub以停用 Pod

    oc patch OperatorHub cluster --type json -p '[{"op": "add", "path": "/spec/disableAllDefaultSources", "value": true}]'
    

允許影像流的出站流量

若要從叢集存取影像流,請從下列選項中進行選擇。

  • 將您需要的鏡像鏡像到 icr.io 註冊表。 有關更多信息,請參閱 將圖像推送到IBM Cloud Container Registry

  • 停用出站流量保護。

    ibmcloud oc vpc outbound-traffic-protection disable --cluster CLUSTER
    
  • kube-<clusterID> 安全群組的安全群組規則新增至您要使用的映像流的 IP 位址。 請注意,影像流的 IP 位址可能會變更。

    ibmcloud is sg-rulec kube-vpegw-<clusterID> inbound tcp --port-min PORT  --port-max PORT --remote IP-OR-CIDR
    

允許出站流量透過遙測進行遠端健康監控

若要允許遠端運行狀況監控,您必須透過執行以下命令來停用出站流量保護。

ibmcloud oc vpc outbound-traffic-protection disable --cluster CLUSTER

透過 VPE 存取4.15叢集和 Web 控制台

您可以將Kubernetes設定為允許透過私人 vpe 網關存取叢集。 此選項適用於專用 VPC 叢集以及公用和私有 VPC 叢集。 由於存取是透過專用端點進行的,因此客戶必須設定從客戶端到其 VPC 的 VPN 才能存取叢集。

從4.15叢集開始,需要額外的安全群組規則才能使 VPE 存取正常運作。 僅私有叢集以及具有公用和私有端點的叢集都需要額外的安全群組規則。

  1. 列出您的 VPN 伺服器。

    ibmcloud is vpn-servers
    
  2. 取得您的 VPN 伺服器的詳細資訊。

    ibmcloud is vpn-server SERVER
    
  3. 取得 VPN 伺服器的用戶端 IP 池

    ibmcloud is vpn-server | grep "Client IP pool"
    
  4. 取得集群的詳細資訊並記下 VPE 連接埠。

    ibmcloud ks cluster get --cluster CLUSTERID
    
  5. 在用戶端上啟動您的 VPN。

  6. 透過 VPE 存取您的叢集。

    ibmcloud ks cluster config --admin --cluster CLUSTERID --endpoint vpe
    
  7. 列出 Pod。 請注意,此命令會失敗,因為用戶端無法透過 VPE 閘道透過 VPN 存取叢集。

    kubectl get pods -A
    
  8. 將安全群組規則新增至 VPN 的 kube-vpegw-<clusterID>。 本例中的遠端來自 VPN 的客戶端 IP CIDR。

    ibmcloud is sg-rulec kube-vpegw-<clusterID> inbound tcp --port-min PORT  --port-max PORT --remote IP-OR-CIDR
    

    命令範例。

    ibmcloud is sg-rulec kube-vpegw-<clusterID> inbound tcp --port-min 30829  --port-max 30829 --remote 192.168.192.0/22
    
  9. 列出 Pod。

    kubectl get pods -A
    

允許 Webhook 的出站流量

如果您使用 webhooks 與 URL 或群集外部服務聯繫,則必須新增安全群組規則,允許從群集工作人員到 URL 或外部服務的出站流量。 或者,您可以完全停用出站流量保護。

通常,使用叢集服務引用的准入 Webhook 不需要任何變更。

在下列範例中,連接到叢集服務的存取 Webhook 通常不需要任何更改,因為主伺服器透過預設允許的 Konnectivity 連線連接到服務。 一個例外是,如果實作該群集服務的 Pod 需要連線到 URL 或某些外部服務。 如果是,則允許這些 Pod 存取 URL 或外部服務,如本範例所示。

apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
  name: my-cluster-service.webhook.io
webhooks:
- admissionReviewVersions:
  - v1
  clientConfig:
    caBundle: ABCDEFG...
    service:
      name: my-admission-webhook
      namespace: default
      path: /validate
      port: 443
...

但是,如果您的存取 webhooks 使用 URL,則需要額外的安全群組規則。

連接至 URL 的 Webhook 範例。

apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
  name: my-url.webhook.io
webhooks:
- admissionReviewVersions:
  - v1
  clientConfig:
    caBundle: ABCDEFG...
    url: https://webhook.ibm.com:20001/validate
...

若要允許存取外部 URL 或 Webhook 的服務,您可以選擇下列其中一個選項

  • 透過執行以下命令停用出站流量保護。

    ibmcloud oc vpc outbound-traffic-protection disable --cluster CLUSTER
    
  • 將出站安全群組規則新增至 kube-<clusterID> 安全群組以允許叢集工作人員連線。 在前面的範例中,使用連接埠 20001 上的 webhook.ibm.com 服務。

    1. 使用 dig 查詢 URL 要存取的 IP。
        dig +short URL
        ```
        命令範例。
        ```sh {: pre}
        dig +short webhook.ibm.com
        ```
        輸出範例
        ```sh {: screen}
        1.2.3.4
        4.5.6.7
        ```
    1. 為每個傳回的 IP 位址建立規則。
    
    ```sh {: pre}
        ibmcloud is sg-rulec kube-<clusterID> outbound icmp_tcp_udp --remote <IP-address-or-subnet>
        ```
        命令範例。
        ```sh {: pre}
        ibmcloud is sg-rulec kube-CLUSTERID outbound tcp --port-min 20001 --port-max 20001 --remote 1.2.3.4
        ibmcloud is sg-rulec kube-CLUSTERID outbound tcp --port-min 20001 --port-max 20001 --remote 4.5.6.7
        ```
    
    

如需更多資訊,請參閱「動態准入控制

允許公共服務的出站流量

如果您的應用程式呼叫的外部服務有一小組用於託管該服務且不經常變更的 IP/CIDR,您可以選擇性地允許對 kube-clusterID 安全性群組上的這些 IP 或 CIDR 進行出站存取。

以下範例使用 api.github.com 處的github.com API。

  1. 透過 curl 以程式設計方式尋找 IP。

    curl -sS -H "Accept: application/vnd.github+json" https://api.github.com/meta | jq '.api'
    
  2. 將您在上一個步驟中找到的每個 CIDR 新增為 kube-clusterID 安全性群組上的出站安全性群組規則的目標。 或者,您可以建立自訂安全性群組,並在建立叢集時將其新增至叢集工作執行緒。

    ibmcloud is sg-rulec kube-<clusterID> outbound icmp_tcp_udp --remote <IP-address-or-subnet>
    

有關更多信息,請參閱 關於GitHub'sIP 位址

具有出站流量保護的中心輻射型 VPC 的注意事項

在中心輻射模型中,僅使用中心 VPC 叢集進行 DNS 解析。 分支集群透過中心存取 DNS。 中心和輻射集群通常位於不同的 VPC 中,這些 VPC 透過Transit Gateway連接。

在版本4.15及更高版本的集群中,如果不調整各自的安全群組,中心輻射模型將無法運作。 這些調整允許中心 VPC 和分支 VPC 之間的流量。

  1. 更新分支 VPC 中的集群,以便它們可以透過向每個分支集群的 kube-<clusterID> 安全群組新增規則來存取中心 VPC。 確保將出站規則新增至部署 hub 叢集工作執行緒的每個VPC 子網路 CIDR。 例如,如果分支連接到單一中心,且該中心在三個區域中有工作人員,則必須將三個規則新增至分支的 kube-<clusterID> 安全性群組,每個子網路各一個。

    ibmcloud is sg-rulec kube-<spoke-clusterID> outbound icmp_tcp_udp --remote <hub-subnet-CIDR>
    
  2. 透過在中心的共用 VPE 閘道安全性群組 ( kube-vpegw-vpcID ) 中新增規則,更新中心叢集以允許來自分支的流量。或者,如果您對共用 VPE 閘道使用自己的自訂安全性群組,請改為在這些自訂安全性群組中新增規則。

  3. 執行以下命令以尋找 VPE 網關,然後查看網關的詳細資訊以找到其關聯的安全群組。 記下安全性群組 ID,以便在下一個步驟中向其新增規則。

    ibmcloud is egs
    
  4. 新增來自部署分支工作人員的每個VPC 子網路的入站規則。 例如,如果分支部署到三個不同的區域,但部署到每個區域中的單一子網,則三個規則將新增至中心的共用 VPE 網關安全群組。

    ibmcloud is sg-rulec kube-vpegw-<hub-vpcID> inbound icmp_tcp_udp --remote <spoke-subnet-CIDR>
    

允許臨時流量透過公共網路傳輸至叢集 API 伺服器

VPC集群worker使用私有網路與集群master進行通訊。 先前,對於啟用了公共服務端點的 VPC 集群,如果專用網路被阻止或不可用,則集群工作人員可以回退到使用公共網路與集群主節點進行通訊。

在4.15及更高版本的叢集中,無法選擇回退到公共網絡,因為來自叢集工作執行緒的公共出站流量被阻止。 您可能希望停用出站流量保護以允許此公共網路備份選項,但是,還有更好的選擇。 相反,如果專用網路上的工作節點到主節點的連線出現臨時問題,那麼此時,您可以向 kube-clusterID 安全性群組新增臨時安全性群組規則,以允許到叢集主 apiserver 連接埠。 稍後,當問題解決後,您可以刪除臨時規則。

您可以選擇下列其中一個選項,以便在私人網路癱瘓時,允許透過公用網路進行流量。

  • 將安全群組規則新增至 kube-clusterID 安全群組以允許流向 API 伺服器的流量。

    1. 取得您的叢集詳細資訊以及 API 伺服器連接埠的註釋。
        ic ks cluster get --cluster <clusterID>
        ```
        API 伺服器連接埠為 `30685` 的範例輸出。
    
        ```sh {: screen}
        Name:                           prestg-sbd-vpc-4.15
        ID:                             coekl4a107ovqfndhh60
        ...
        Public Service Endpoint URL:    https://c100-e.containers.cloud.ibm.com:30685
        Private Service Endpoint URL:   https://c100.private.containers.cloud.ibm.com:30685
        ...
        ```
    1. 新增從 `kube-<clusterID>` 到 `0.0.0.0/0` 的出站安全群組規則,以允許所有公共網路存取。
    ```sh {: pre}
        ibmcloud is sg-rulec kube-<clusterID> outbound tcp --port-min <API port> --port-max <API port> --remote 0.0.0.0/0
        ```
        API 伺服器連接埠為 `30685` 的範例命令。
        ```sh {: pre}
        ibmcloud is sg-rulec kube-<clusterID> outbound tcp --port-min 30685 --port-max 30685 --remote 0.0.0.0/0
        ```
    
    
  • 停用出站流量保護。

    ibmcloud oc vpc outbound-traffic-protection disable --cluster CLUSTER
    

在私人專用的 RHCOS 集群上驗證 Sysdig 整合

如果 sysdig-agent pod 位於使用 RHCOS Worker 的私有集群上的 CrashLoopBackOff,您可以停用出站流量保護,或更新 Sysdig 代理程式以使用 eBPF 驅動程式。 如需詳細資訊,請參閱 為什麼 sysdig-agent Pods 在僅限私有的 RHCOS 叢集上 CrashLoopBackOff