IBM Cloud Docs
了解 V 4.14 和更低版本中的 VPC 安全组

了解 V 4.14 和更低版本中的 VPC 安全组

虚拟私有云 4.14 和更低版本

VPC 集群使用各种安全组来保护集群组件。 这些安全组将自动创建并连接到集群工作程序,负载均衡器和与集群相关的 VPE 网关。 您可以修改或替换这些安全组以满足您的特定需求,但是,必须根据这些准则进行任何修改以避免网络连接中断。

缺省行为
虚拟私有云安全组在系统管理程序级别过滤流量。 未按特定顺序应用安全组规则。 但是,仅当请求与您指定的某个规则相匹配时,才允许向工作程序节点发出的请求。 当您通过创建入站或出站规则在一个方向上允许流量时,也允许在相反方向上进行响应。 安全组是可添加的,这意味着如果工作程序节点连接到多个安全组,那么安全组中包含的所有规则都将应用于工作程序节点。 较新的集群版本在 kube-clusterID 安全组中可能具有比较旧的集群版本更多的规则。 添加安全组规则以提高服务的安全性,并且不破坏功能。
限制
由于 VPC 集群的工作程序节点存在于服务帐户中,并且未在 VPC 基础结构仪表板中列出,因此无法创建安全组并将其应用于工作程序节点实例。 只能修改现有安全组。

如果修改缺省 VPC 安全组,那么必须至少包含必需的 入站出站 规则,以便集群正常工作。

虚拟专用端点 (VPE) 网关

在给定 VPC 中创建 Red Hat OpenShift on IBM Cloud 4.14+ 上的第一个 VPC 集群时,或者 VPC 中的一个集群将其主节点更新为 4.14+ 时,将为各种 IBM Cloud 服务创建多个共享 VPE 网关。 每个 VPC 仅创建其中一种类型的共享 VPE 网关。 VPC 中的所有集群共享这些服务的同一 VPE 网关。 将从集群工作程序所在的每个专区为这些共享 VPE 网关分配单个保留 IP。

创建 VPC 集群时,将自动创建以下 VPE 网关。

VPE 网关
该表显示了为 VPC 群集创建的 VPE 网关。 第一列包含网关的名称。 第二列包含简要描述。
VPE 网关 描述
IBM Cloud Container Registry 共享 将容器映像从 IBM Cloud Container Registry 拉取到集群中运行的应用程序。
IBM Cloud Object Storage s3 网关 共享 访问 COS API。
IBM Cloud Object Storage 配置网关 共享 将容器映像备份到 IBM Cloud Object Storage
Red Hat OpenShift on IBM Cloud 访问 Red Hat OpenShift on IBM Cloud API 以与集群交互并管理集群。†

† 所有受支持的 VPC 集群都有一个 VPE Gateway,用于在创建集群时在您的帐户中创建的集群主节点。 此 VPE 网关由集群工作程序使用,并且可供 VPC 中的其他内容用于连接到集群的主 API 服务器。 此 VPE 网关将从集群工作程序所在的每个专区中分配单个保留 IP,并且将在具有集群工作程序的专区中的其中一个 VPC 子网中创建此 IP。 例如,如果群集只有单个区域(us-east-1)和单个 VPC 子网中的工作人员,则在该子网中创建单个 IP 并分配给 VPE 网关。 如果集群在所有三个专区 (例如 us-east-1us-east-2us-east-3 ) 中都有工作程序,并且这些工作程序分布在每个专区中的 4 个 VPC 子网中,那么将总共创建 12 个 VPC 子网,在该专区中的四个 VPC 子网之一中创建三个 IP (每个专区中一个 IP)。 请注意,子网是随机选择的。

受管安全组

应用于集群工作程序的安全组

请勿修改 kube-<clusterID> 安全组中的规则,因为这样做可能会导致集群的工作程序与控制集群之间的网络连接中断。 但是,如果不需要 kube-<clusterID>,那么可以改为在 集群创建 期间添加自己的安全组。

VPC 安全组
下表显示了为 VPC 自动创建的三种类型的安全组。 第一列包含安全组的类型。 第二列包含安全组的命名格式。 第三列包含有关创建安全组的时间和位置以及它允许的流量类型的详细信息。
安全组类型 名称 详细信息
VPC 安全组 随机生成 -在创建 VPC 时自动创建。 自动连接到在 VPC 中创建的集群中的每个工作程序节点。
-缺省情况下允许所有出站流量。
VPC 集群安全组 kube-<clusterID> -在创建 VPC 集群时自动创建。 自动连接到在 VPC 中创建的集群中的每个工作程序节点。
-允许集群基础结构所需的流量正常运行。

应用于 VPE 网关和 VPC ALB 的安全组

请勿修改 kube-<vpcID> 安全组中的规则,因为这样做可能会导致集群的工作程序与控制集群之间的网络连接中断。 但是,您可以 从 VPC ALB 中除去缺省安全组,并 将其替换为您创建和管理的定制安全组

VPC 安全组
下表显示了为 VPC 自动创建的三种类型的安全组。 第一列包含安全组的类型。 第二列包含安全组的命名格式。 第三列包含有关创建安全组的时间和位置以及它允许的流量类型的详细信息。
安全组类型 名称 详细信息
Red Hat OpenShift on IBM Cloud 安全组 kube-<vpcID> -自动创建并连接到 VPC 中任何与集群相关的 VPE 网关。
-自动创建并连接到 VPC 中创建的每个 VPC ALB。
-允许集群基础结构运行所需的流量。

最小入站和出站需求

缺省 VPC 安全组涵盖以下入站和出站规则。 请注意,您可以修改随机指定的 VPC 安全组和集群级别的 kube-<clusterID> 安全组,但必须确保仍符合这些规则。

建议不要修改 kube-<vpcID> 安全组,因为这样做可能会导致集群与 Kubernetes 主节点之间的网络连接中断。 而是可以 从 VPC ALB 或 VPE 网关中除去缺省安全组,并 将其替换为您创建和管理的安全组

集群工作程序所需的入站和出站规则

缺省情况下,集群工作程序的交通规则由随机指定的 VPC 安全组和 kube-<clusterID> 集群安全组覆盖。 如果修改或替换其中任一安全组,请确保仍允许以下交通规则。

如果您的 VPC 群集运行在4.14或更高版本,则可能需要包含 额外的安全组规则

入站规则

集群工作程序安全组所需的入站规则
规则用途 协议 端口或值
允许此集群中的所有工作程序节点相互通信。 全部
VPC 安全组 randomly-generated-sg-name
允许对工作程序节点上运行的应用程序的入局流量请求。 TCP 30000 - 32767 任意
如果需要对此集群进行 VPC VPN 访问或经典基础架构访问,请允许对工作程序节点上运行的应用程序的入局流量请求。 UDP 30000 - 32767 任意

出站规则

集群工作程序安全组所需的出站规则
规则用途 协议 端口或值 目标
允许在集群中创建工作程序节点。 全部
CIDR 块 161.26.0.0/16
允许工作程序节点与支持私有云服务端点的其他 IBM Cloud 服务进行通信。 全部
CIDR 块 166.8.0.0/14
允许此集群中的所有工作程序节点相互通信。 全部
安全组 kube-<cluster_ID>
允许将出站流量发送到用于与 Kubernetes 主节点通信的虚拟专用端点网关。 全部
虚拟专用端点网关 IP 地址。 虚拟专用端点网关将从集群具有工作程序节点的每个专区中的 VPC 子网分配一个 IP 地址。 例如,如果集群跨 3 个专区,那么最多有 3 个 IP 地址分配给每个虚拟专用端点网关。 要查找虚拟专用端点网关 IP:
1。 转至 虚拟私有云仪表板
2。 单击 虚拟专用端点网关,然后选择集群所在的 区域
3。 找到集群,然后单击 IP 地址 列中的 IP 地址以进行复制。
允许工作程序节点连接到 OAuth 服务的公共服务端点 IP。 要查找应用此规则所需的 IP,请参阅 允许工作程序节点连接到 OAuth 服务的公共服务端点 IP TCP OAuth 端口 OAuth IP 地址
允许工作程序节点连接到 Ingress LoadBalancer。 要查找应用此规则所需的 IP,请参阅 允许工作程序节点连接到 Ingress LoadBalancer TCP 443 入口负载均衡器 IP

具有在 4.14 或更高版本上运行的集群的 VPC 的必需规则

在 1.27 及更早版本中,VPC 群集通过 IBM Cloud Container Registry的私有云服务端点从 Container Registry 中提取映像。 对于 4.14 及更高版本,该网络路径已更新,因此图像将通过 VPE 网关而不是专用服务端点提取。 此更改会影响 VPC 中的所有群集;当您将 VPC 中的单个群集创建或更新为 4.14 版本时,该 VPC 中的所有群集(无论其版本或类型如何)都会更新其网络路径。 有关更多信息,请参阅 VPC 集群的联网更改

如果在 VPC 中更新或创建在 V 4.14 或更高版本上运行的集群,那么必须确保实现以下安全组规则,以允许针对注册表的 VPE 网关的流量。 必须为 VPC 中的每个区域创建这些规则中的每个规则,并且必须将该区域的整个 VPC 地址前缀范围指定为目标 CIDR。 要查找 VPC 中每个专区的 VPC 地址前缀范围,请运行 ibmcloud is vpc-address-prefixes <vpc_name_or_id>

要为 V 4.14 集群工作程序安全组所需的出站规则
规则类型 协议 目标 IP 或 CIDR 目标端口
出站 TCP 整个 VPC 地址前缀范围 443
出站 TCP 整个 VPC 地址前缀范围 4443

VPC ALB 的必需入站和出站规则

缺省情况下,VPC ALB 的交通规则由 kube-<vpcID> 安全组覆盖。 请注意,您不应修改此安全组,因为这样做可能会导致集群与 Kubernetes 主节点之间的网络连接中断。 但是,您可以从 ALB 中 除去安全组,并将其 替换为您创建和管理的安全组。 如果执行此操作,那么必须确保仍涵盖以下交通规则。

入站规则

VPC ALB 安全组所需的入站规则
规则用途 协议 端口或值
如果将您自己的安全组用于 LBaaS for Ingress,并且通过 Ingress 公开集群中的任何应用程序,那么必须允许对端口 443 和/或 80 使用 TCP 协议。 您可以允许所有客户机进行访问,也可以仅允许某些源 IP 或子网访问这些应用程序。 请注意,如果要使用 OpenShift 控制台 (由集群的缺省 Ingress 实例和路由器公开),那么此需求也适用。 要允许 OpenShift 控制台访问,必须允许 TCP 协议从所有源端口 443,或者从特定源 IP 地址或子网端口 443。 TCP 80 or 443 所有源,或特定源 IP 地址或子网
如果您将自己的安全组用于用于公开其他应用程序的任何 LBaaS 实例,那么在该安全组中,必须允许任何预期源访问相应的端口和协议。 TCP 和/或 UDP LBaaS 端口 任何源,或特定源 IP 或子网

出站规则

VPE 和 VPC ALB 安全组所需的出站规则
规则用途 协议 端口或值 目标
允许 ALB 将流量发送到 TCP NodePort 范围内的集群工作程序 TCP 30000 - 32767 任意
允许 ALB 将流量发送到 UDP NodePort 范围内的集群工作程序 UDP 30000 - 32767 任意
如果将您自己的安全组用于 LBaaS for Ingress,那么必须允许从集群工作程序节点到端口 443 的 TCP 流量。 如果您尚未允许所有 TCP 流量端口达到 443 (例如,按源 IP 过滤流量),那么允许来自集群工作程序节点的流量是 Red Hat OpenShift 控制台操作员和 Ingress 运行状况检查成功的最低要求。 TCP 443 安全组 kube-<cluster_ID>

允许工作程序节点连接到 OAuth 服务的公共服务端点 IP

对于具有公共服务端点的 VPC 集群是必需的。

登录您的帐户。 如果适用,请将相应的资源组设定为目标。 设置集群的上下文。

  1. 获取用于以 https://cXXX-e.<region>.containers.cloud.ibm.com:<PORT> 格式连接到 OAuth 服务的 URL。 记下地区和港口。

    oc get --raw /.well-known/oauth-authorization-server | grep issuer
    

    示例输出

    "issuer": "https://c104-e.us-east.containers.cloud.ibm.com:31062",
    
  2. 运行 dig +shortnslookup 以获取与 URL 中的主机名关联的 IP。 对于单校区多区域,只有一个公共 IP 与主机名相关联。 对于多专区区域,存在 3。 通过将 e 替换为 1,2 和 3 来查找各个 IP。

    dig +short cXXX-1.<region>.containers.cloud.ibm.com
    dig +short cXXX-2.<region>.containers.cloud.ibm.com
    dig +short cXXX-3.<region>.containers.cloud.ibm.com
    

    示例输出

    169.63.111.82
    
  3. 为允许出站 TCP 连接到目标 IP 和 PORT 的每个 IP 添加安全组规则。

    ibmcloud is sg-rulec <sg> outbound tcp --port-min 31062 --port-max 31062 --remote 169.63.111.82
    

    示例输出

    Direction              outbound   
    IP version             ipv4   
    Protocol               tcp   
    Min destination port   31062   
    Max destination port   31062   
    Remote                 169.63.111.82
    

允许工作程序节点连接到 Ingress LoadBalancer

执行以下步骤以允许工作程序节点连接到 Ingress LoadBalancer。

  1. 获取 LoadBalancer 服务的 EXTERNAL-IP

    oc get svc -o wide -n openshift-ingress router-default
    
  2. EXTERNAL-IP 上运行 dig 以获取与 LoadBalancer相关联的 IP 地址。

    dig <EXTERNAL-IP> +short
    

    示例输出

    150.XXX.XXX.XXX
    169.XX.XXX.XXX
    
  3. 针对先前检索的每个 IP 地址和端口 443 创建出站安全规则。

    ibmcloud is sg-rulec <sg> outbound tcp --port-min 443 --port-max 443 --remote 150.XXX.XXX.XXX
    

如果 Ingress 或控制台操作程序未能通过其运行状况检查,那么您可以重复这些步骤以查看 LoadBalancer IP 地址是否已更改。 虽然很少见,但如果到 LoadBalancers 的流量差别很大,那么这些 IP 地址可能会更改以处理增加的或减少的负载。