了解默认情况下的安全集群 VPC 网络连接
虚拟私有云 1.30 和更高版本
从在 V 1.30上创建的新 VPC 集群开始,IBM Cloud Kubernetes Service 引入了称为“按缺省集群安全 VPC 联网”的新安全性功能。 通过“缺省安全”,您可以在创建 VPC 集群时自动创建新的 VPC 设置,例如受管安全组,安全组规则和虚拟专用端点网关 (VPE)。 在创建 V 1.30 和更高版本的集群时,请查看有关为您创建和管理的 VPC 组件的以下详细信息。
概述
通过“缺省联网安全”,当您在 V 1.30 或更高版本上供应新的 IBM Cloud Kubernetes Service VPC 集群时,仅允许集群运行所需的流量,并阻止所有其他访问。 为实现“按缺省联网安全”,IBM Cloud Kubernetes Service 使用各种安全组和安全组规则来保护集群组件。 这些安全组和规则将自动创建并连接到工作程序节点,负载均衡器和与集群相关的 VPE 网关。
虚拟私有云安全组在系统管理程序级别过滤流量。 未按特定顺序应用安全组规则。 但是,仅当请求与您指定的某个规则匹配时,才允许向工作程序节点发出的请求。 当您通过创建入站或出站规则在一个方向上允许流量时,也允许在相反方向上进行响应。 安全组是可添加的,这意味着如果工作程序节点连接到多个安全组,那么安全组中包含的所有规则都将应用于工作程序节点。 较新的集群版本在 kube-<clusterID>
安全组中可能具有比较旧的集群版本更多的规则。 添加安全组规则以提高服务的安全性,并且不破坏功能。
虚拟专用端点 (VPE) 网关
在给定 VPC 中创建 IBM Cloud Kubernetes Service 1.28+ 上的第一个 VPC 集群时,或者在该 VPC 中的集群将其主节点更新为 1.28+ 时,将为各种 IBM Cloud 服务创建多个共享 VPE 网关。 每个 VPC 仅创建其中一种类型的共享 VPE 网关。 VPC 中的所有集群共享这些服务的同一 VPE 网关。 将从集群工作程序所在的每个专区为这些共享 VPE 网关分配单个保留 IP。
创建 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 |
IBM Cloud Kubernetes Service | 访问 IBM Cloud Kubernetes Service API 以与集群交互并管理集群。† |
† 所有受支持的 VPC 集群都有一个 VPE Gateway,用于在创建集群时在您的帐户中创建的集群主节点。 此 VPE 网关由集群工作程序使用,并且可供 VPC 中的其他内容用于连接到集群的主 API 服务器。 将从集群工作程序所在的每个专区向此 VPE 网关分配单个保留 IP,并且将在具有集群工作程序的专区中的其中一个 VPC 子网中创建此 IP。 例如,如果群集只有单个区域(us-east-1
)和单个 VPC 子网中的工作人员,则在该子网中创建单个
IP 并分配给 VPE 网关。 如果集群在所有三个专区 (例如 us-east-1
,us-east-2
和 us-east-3
) 中都有工作程序,并且这些工作程序分布在每个专区中的 4 个 VPC 子网中,那么将总共创建 12 个 VPC 子网,在该专区中的四个 VPC 子网之一中创建三个 IP (每个专区中一个 IP)。 请注意,子网是随机选择的。
受管安全组
IBM Cloud Kubernetes Service 会自动为 VPC 集群创建并更新以下安全组和规则。
- 工人安全组 (
kube-<clusterID>
)。 - 主 VPE 网关安全组 (
kube-vpegw-<clusterID>
)。 - 共享 VPE 网关安全组 (
kube-vpegw-<vpcID>
)。 - 负载平衡器服务安全组 (
kube-lbaas-<clusterID>
)。
工作程序安全组
创建 IBM Cloud Kubernetes Service VPC 集群时,将为给定集群的所有工作程序或节点创建安全组。 安全组的名称为 kube-<clusterID>
,其中 <clusterID>
是集群的标识。 如果稍后将新节点添加到集群,那么会自动将这些节点添加到集群安全组。
请勿修改 kube-<clusterID>
安全组中的规则,因为这样做可能会导致集群的工作程序与控制集群之间的网络连接中断。
描述 | 方向 | 协议 | 端口或值 | 源或目标 |
---|---|---|---|---|
允许到 pod 子网的入站流量。 | 入站 | 全部 | 全部 | 172.17.0.0/18 (缺省子网范围) 或您在创建集群时指定的定制子网范围。 |
允许对自身进行入站访问,这允许工作程序与工作程序进行通信。 | 入站 | 全部 | 全部 | kube-<clusterID> |
允许入站 ICMP (ping) 访问。 | 入站 | ICMP | type=8 | 0.0.0.0/0 |
允许来自负载平衡器(ALB/NLB)打开的节点端口的入站流量。 添加或除去负载均衡器时,将动态添加或除去规则。 | 入站 | TCP | LoadBalancer 节点端口。 | kube-lbaas-<clusterID> |
允许到 pod 子网的出站流量。 | 出站 | 全部 | 全部 | 172.17.0.0/18 (缺省子网范围) 或您在创建集群时指定的定制子网范围。 |
允许出站流量到允许供应工作程序的主控制平面。 | 出站 | 全部 | 全部 | 161.26.0.0/16 |
允许对自身进行出站访问,这允许工作程序与工作程序进行通信。 | 出站 | 全部 | 全部 | kube-<clusterID> |
允许到主 VPE 网关安全组的出站流量。 | 出站 | 全部 | 全部 | kube-vpegw-<clusterID> |
允许到共享 VPE 网关安全组的出站流量。 | 出站 | 全部 | 全部 | kube-vpegw-<vpcID> |
允许通过 Ingress ALB 的 TCP 流量 | 出站 | TCP | Ports:Min=443,Max=443 | ALB 公共 IP 地址 n |
允许 TCP 和 UDP 流量通过区域 n 的定制 DNS 解析器。** |
出站 | TCP/UDP | Min=53,Max=53 | 区域 n 中的 DNS 解析器 IP 地址。 |
允许流量到整个 CSE 服务范围。 | 出站 | 全部 | 全部 | 166.8.0.0/14 |
允许所有专区的 IAM 专用端点的流量。 IP 可能因区域而异。 将为集群所在的每个专区添加一个规则。 | 出站 | 全部 | 全部 | 所有专区的 IAM 专用端点 IP 地址。 |
4.18 及更高版本 允许向实例元数据 API 发送出站流量。 | 出站 | 全部 | 全部 | 169.254.169.254 |
**
Hub 和 Spoke VPC 在 VPC 上使用定制 DNS 解析器。 流量必须流经每个 DNS 解析器的 IP 地址。 每个区域有两个通过端口 53 的规则 (TCP 和 UDP)。
主 VPE 网关安全组
创建 VPC 集群时,将在与集群相同的 VPC 中创建虚拟专用端点 (VPE) 网关。 安全名称为 kube-vpegw-<clusterID>
,其中 <clusterID>
是群集的 ID。 此 VPE 网关的目的是充当群集主控的网关,群集主控由 IBM Cloud 管理。 VPE 网关在集群具有工作程序的 VPC 中的每个专区中分配一个 IP 地址。
为了仅允许从集群的工作程序节点访问集群的主节点,将为每个集群主 VPE 网关创建一个安全组。 然后,将创建一个远程规则,以允许 Ingress 从集群工作程序安全组连接到集群主 VPE 网关上的必需端口。 对于连接到群集私有服务端点 VPE 网关的私有连接(包括通过 VPC VPN 传输的连接),允许从群集每个活动工作者池的子网 CIDR 传输 TCP 流量。
描述 | 方向 | 协议 | 端口或值 | 源或目标 |
---|---|---|---|---|
允许从集群工作程序安全组到服务器节点端口的入站流量。 | 入站 | TCP | 服务器 URL 节点端口 | kube-<clusterID> |
允许从集群工作程序安全组到 Konnectivity 端口的入站流量。 | 入站 | TCP | Konnectivity 端口 | kube-<clusterID> |
允许来自群集中每个活动工作池子网的入站流量。* |
入站 | TCP | 服务器 URL 节点端口 | 子网 CIDR |
*
为每个活动工作池的子网添加一条规则。 如果在三个区域内都有工人,则将添加三条规则(该区域内的每个子网一条)。
共享 VPE 网关安全组
共享 VPE 网关在 VPC 中的第一个群集provisioned.The共享 VPE 网关安全组在创建群集时创建(如果以前的群集不存在)。 安全组的名称是 kube-vpegw-<vpcID>
其中 <vpcID>
是 VPC 的 ID。 然后,将创建一个远程规则,以允许来自给定集群的集群工作程序安全组的 Ingress 连接。 共享 VPE 网关安全组包含该 VPC 中所有集群共享的 VPE 网关。
共享 VPE 网关可能会在以后的版本中添加,以允许连接到其他 IBM Cloud服务。
如果供应集群时此共享 VPE 网关安全组已存在,那么供应过程将识别该安全组,并且不会重新创建该安全组。 但是,仍会在现有共享 VPE 网关安全组与新的工作程序安全组之间添加远程规则。 这样做是为了允许从给定 VPC 中的所有集群进行连接。 将为 VPC 中的每个集群创建一个规则。
最多有 15 条规则可以将其他安全组作为其源或目标。 缺省情况下,IBM Cloud Kubernetes Service 应用 1 规则,该规则以 VPC 中每个集群的 kube-<clusterID>
安全组为目标。 由于存在此配额,因此只能在给定的 VPC 中创建 15 个集群。 有关更多信息,请参阅 VPC 配额。
描述 | 方向 | 协议 | 源或目标 |
---|---|---|---|
允许来自指定集群的入站流量。 | 入站 | TCP | kube-<clusterID> |
负载均衡器服务安全组
连接到所有负载均衡器 (ALB 和 NLB) 的缺省安全组。 安全组的名称是 kube-lbaas-<clusterID>
其中 <clusterID>
是群集的 ID。 每个集群都将获取其自己的唯一安全组,该安全组由集群中的所有负载均衡器共享。 以下示例显示了使用单个 ALB 的集群添加到负载均衡器安全组的规则。 在添加,除去或更新负载均衡器时,将动态添加或删除此安全组上的规则。 请注意,SDNLB
不支持连接安全组。
描述 | 方向 | 协议 | 端口或值 | 源或目标 |
---|---|---|---|---|
允许对负载均衡器打开的节点端口进行出站访问。 根据负载均衡器,您可能有多个规则。 | 出站 | TCP | 负载均衡器打开的 Node 端口。 | kube-<clusterID> |
负载均衡器侦听允许从该端口进行入站访问的端口 80。 | 入站 | TCP | 公共 LB 端口。 示例 80 |
0.0.0.0/0 |
负载均衡器侦听端口 443,以允许从该端口进行入站访问。 | 入站 | TCP | 公共 LB 端口。 示例 443 |
0.0.0.0/0 |
限制
- 工作程序节点安全组
- 由于 VPC 集群中的工作程序节点存在于服务帐户中,并且未在 VPC 基础结构仪表板中列出,因此无法创建安全组并将其应用于工作程序节点实例。 只能修改现有
kube-<clusterID>
安全组。 - 日志记录和监视
- 在 1.30 或更高版本的集群上设置日志记录和监视时,在集群中安装日志记录代理程序时必须使用专用服务端点。 如果使用公共端点,那么不会保存日志数据。
- 使用 RHCOS 工作程序节点监视集群
- 监视代理程序依赖于操作系统中的内核头,但是 RHCOS 没有内核头。 在此场景中,代理程序返回到
sysdig.com
以使用预编译的代理程序。 在没有公用网络访问权的集群中,此过程失败。 要允许在 RHCOS 集群上进行监视,必须允许出站流量或查看 Sysdig 文档以 在气郄环境上安装代理程序。 - VPC 集群配额
- 最多有 15 条规则可以将其他安全组作为其源或目标。 缺省情况下,IBM Cloud Kubernetes Service 应用 1 规则,该规则以 VPC 中每个集群的
kube-<clusterID>
安全组为目标。 由于存在此配额,因此只能在给定的 VPC 中创建 15 个集群。 有关更多信息,请参阅 VPC 配额。 - VPC 传输中加密 File Storage.
- 要将 EIT 与“默认安全”群集一起使用,必须在
kube-<clusterID>
安全组中添加以下出站规则。- 协议:任何
- 来源类型:任何类型
- 资料来源 0.0.0.0/0
- 目的地 169.254.169.254.
- 通过公用网络进行备份通信
- VPC 集群工作程序使用专用网络与集群主节点进行通信。 先前,对于启用了公共服务端点的 VPC 集群,如果专用网络被阻塞或不可用,那么集群工作程序可能会回退到使用公用网络与集群主节点进行通信。 在“按缺省安全”集群中,由于来自集群工作程序的公共出站流量被阻塞,因此无法回退到公用网络。 您可能希望禁用出站流量保护以允许此公用网络备份选项,但是有更好的替代方法。 相反,如果通过专用网络的工作程序到主节点的连接存在临时问题,那么您可以在此时向
kube-clusterID
安全组添加临时安全组规则,以允许到集群主节点apiserver
端口的出站流量。 稍后,当问题得到解决时,您可以除去临时规则。 - OpenShift Data Foundation 和 Portworx 加密
- 如果您计划在没有公用网络访问权的集群中使用 OpenShift Data Foundation 或 Portworx,并且要使用 Hyper Protect Crypto Services 或 Key Protect 进行加密,那么必须创建允许访问 KMS 实例的虚拟专用端点网关 (VPE)。 确保至少将 1 IP 地址从 VPC 中的每个子网绑定到 VPE。