创建和管理 VPC 安全组
虚拟私有云
4.14 和更低版本: 如果修改缺省 VPC 安全组,那么必须至少包含 必需规则,以便集群正常工作。
在集群创建期间添加安全组
创建 VPC 集群时,将自动创建名为 kube-<clusterID>
的缺省工作程序安全组,并将其应用于集群中的所有工作程序。 您还可以在缺省工作程序安全组旁边附加其他安全组。 应用于集群中工作程序的安全组是在创建集群和创建工作程序池时应用的安全组的组合。 总共有五个安全组可以应用于工作程序,包括缺省安全组和应用于工作程序池的任何安全组。 请注意,用于向工作程序添加定制安全组的选项仅在 CLI 中可用。
一旦创建了集群,就无法更改应用于集群的安全组。 您可以更改应用于集群的安全组的规则,但不能在集群级别添加或除去安全组。 如果在集群创建时应用了不正确的安全组,那么必须删除该集群并创建新的安全组。
如果只需要缺省安全组
VPC 安全组 工作程序安全组
请注意,这是集群创建时的缺省行为。
创建集群时,请勿指定任何其他安全组。
用于仅使用缺省 VPC 和 kube-<clusterID>
集群安全组创建 VPC 集群的示例命令:
ibmcloud oc cluster create vpc-gen2 --name <cluster-name> --zone <zone> --vpc-id <vpc-id> --subnet-id <subnet-id>
将应用以下安全组:
- 缺省 VPC 安全组 (随机生成的名称)
kube-<clusterID>
工作程序安全组。
如果需要集群安全组和您自己的其他安全组
VPC 安全组 工作程序安全组 您自己的安全组
创建集群时,请指定 --cluster-security-group cluster
以及最多四个您拥有的其他安全组。 对于要添加的每个单独的安全组,必须包含单独的 --cluster-security-group
选项。 请注意,最多可以将五个安全组应用于工作程序,包括缺省情况下应用的安全组。
用于创建具有 kube-<clusterID>
集群安全组和您自己的其他安全组的 VPC 集群的示例命令:
ibmcloud oc cluster create vpc-gen2 --name <cluster-name> --zone <zone> --vpc-id <vpc-id> --subnet-id <subnet-id> --cluster-security-group cluster --cluster-security-group <group-id-1> --cluster-security-group <group-id-2> --cluster-security-group <group-id-3>
将应用以下安全组:
- 缺省 VPC 安全组 (随机生成的名称)。
kube-<clusterID>
工作程序安全组- 最多 4 个您自己的额外安全组,最多 5 个安全组。
如果您只需要自己的安全组
VPC 安全组 您自己的安全组
此选项仅在在版本 4.14 和更低版本中创建的集群中可用。 从 4.15开始,所有集群也会获取工作程序节点安全组。
创建集群时,请指定最多 5 个您拥有的安全组。 对于要添加的每个单独的安全组,必须包含单独的 --cluster-security-group
选项。
用于创建仅具有您自己的安全组的 VPC 集群的示例命令:
ibmcloud oc cluster create vpc-gen2 --name <cluster-name> --zone <zone> --vpc-id <vpc-id> --subnet-id <subnet-id> --cluster-security-group <group-id-1> --cluster-security-group <group-id-2> --cluster-security-group <group-id-3>
将应用以下安全组:
- 缺省 VPC 安全组 (随机生成的名称)
- 最多 4 个您自己的额外安全组,最多 5 个安全组。
在创建期间向工作程序池添加安全组
缺省情况下,应用于工作程序池的安全组与集群创建时指示的安全组相同。 但是,您可以指定要应用于工作程序池的其他安全组。 如果将其他安全组应用于工作程序池,那么应用于集群上的工作程序的安全组是 在集群创建时应用的安全组 与应用于工作程序池的安全组的组合。
最多可以将 5 个安全组应用于一个工作程序,包括缺省情况下应用的安全组。
一旦创建了工作程序池,就无法更改应用于该工作程序池的安全组。 您可以更改应用于工作程序池的安全组的规则,但不能在工作程序池级别添加或除去安全组。 如果在创建工作程序池时应用不正确的安全组,那么必须删除该工作程序池并创建新的安全组。
如果不想将其他安全组附加到工作程序池
创建工作程序池时,请勿指定任何其他安全组。
此方案仅适用于 V 4.14 和更低版本。
用于创建未应用安全组的工作程序池的示例命令:
ibmcloud oc worker-pool create vpc-gen2 --name <worker_pool_name> --cluster <cluster_name_or_ID> --flavor <flavor> --size-per-zone <number_of_workers_per_zone>
只有应用于集群的安全组才会应用于工作程序。
如果您想为工人池附加额外的安全组
创建工人池时,请在创建工人池时指定额外的安全组。 对于要添加的每个单独的安全组,必须包含单独的 --security-group
选项。
用于在应用了您自己的安全组的情况下创建工作程序池的示例命令:
ibmcloud oc worker-pool create vpc-gen2 --name <worker_pool_name> --cluster <cluster_name_or_ID> --flavor <flavor> --size-per-zone <number_of_workers_per_zone> --security-group <group-id-1> --security-group <group-id-2> --security-group <group-id-3>
应用于工作程序池中的工作程序的安全组是应用于工作程序池所连接到的集群的安全组与创建时应用于工作程序池的安全组的组合。
查看安全组
执行以下步骤以查看有关 VPC 安全组的详细信息。
-
列出集群并记下您正在其中工作的集群的 标识。
要检查集群中的 VPC,请运行
ibmcloud oc cluster get --cluster <cluster_name_or_id>
并检查输出中的 VPC 标识。ibmcloud oc cluster ls --provider vpc-gen2
-
列出连接到集群所在的 VPC 的安全组。 将为 VPC 安全组分配随机生成的名称,例如
trench-hexagon-matriarch-flower
。 集群安全组以kube-<cluster-ID>
格式命名。 VPC 安全组以kube-<vpc-ID>
格式命名。ibmcloud is sgs | grep <vpc_name>
示例输出
ID Name Rules Network interfaces VPC Resource group r006-111aa1aa-1a1a-1a11-1111-a111aaa1a11a trench-hexagon-matriarch-flower 4 0 my-vpc default r006-222aa2aa-2a2a-2a22-2222-a222aaa2a22a kube-a111a11a11aa1aa11a11 4 0 my-vpc default r006-333aa3aa-3a3a-3a33-3333-a333aaa3a33a kube-r006-111a11aa-aaa1-1a1a-aa11-1a1a111aa11 4 0 my-vpc default
-
获取安全组的详细信息。 在输出中找到 规则 部分,以查看附加到安全组的入站和出站规则。
ibmcloud is sg GROUP
示例输出
... Rules ID Direction IP version Protocol Remote r006-111bb1bb-1b1b-1b11-1111-b111bbb1b11b outbound ipv4 all 0.0.0.0/0 r006-222bb2bb-2b2b-2b22-2222-b222bbb2b22b inbound ipv4 all behind-unbuilt-guidable-anthill r006-333bb3bb-3b3b-3b33-3333-b333bbb3b33b inbound ipv4 icmp Type=8 0.0.0.0/0 r006-444bb4bb-4b4b-4b44-4444-b444bbb4b44b inbound ipv4 tcp Ports:Min=22,Max=22 0.0.0.0/0
在控制台中查看安全组
-
从 VPC 仪表板的安全组中,查找附加到集群所在的 VPC 的安全组。
-
点击安全组。
要按附加到的 VPC 对安全组进行排序,请单击表中的 虚拟私有云 列标题。
-
要查看附加到安全组的入站和出站规则,请单击 规则 选项卡。
在控制台中创建安全组规则
- 从 虚拟私有云仪表板中,单击集群所在 VPC 的 缺省安全组 的名称。
- 点击 “规则”选项卡。
- 要创建新的入站规则以控制到工作程序节点的入站流量,请在“入站规则”部分中单击 创建。
- 要创建新规则以控制到工作程序节点的出站流量,请在 出站规则 部分中删除允许所有出站流量的缺省规则。 然后,在“出站规则”部分中,单击 创建。
请记住,除了您创建的任何规则外,还必须创建所需的 入站和出站规则。
在命令行中创建安全组规则
使用 IBM Cloud CLI 将入站和出站规则添加到集群的缺省安全组。
- 安装
infrastructure-service
插件。 用于运行命令的前缀是ibmcloud is
。ibmcloud plugin install infrastructure-service
- 定位您的VPC所在的区域。
ibmcloud target -r REGION
- 获取集群的ID。
ibmcloud oc cluster get -c CLUSTER
- 列出安全组并记下 VPC 的缺省安全组的 标识。 请注意,缺省安全组使用随机生成的名称,不 使用格式
kube-<cluster_ID>
。
具有随机生成的名称ibmcloud is sgs
chamomile-dislodge-showier-unfilled
的 VPC 的缺省安全组的示例输出。ID Name Rules Network interfaces VPC Resource group 1a111a1a-a111-11a1-a111-111111111111 chamomile-dislodge-showier-unfilled 5 2 events-vpc default 2b222b2b-b222-22b2-b222-222222222222 kube-df253b6025d64744ab99ed63bb4567b6 5 3 gen2-vpn default
- 将安全组标识存储为环境变量。
sg=GROUP
- 查看安全组的缺省规则。 请记住,除了您创建的任何规则外,还必须创建所需的 入站和出站规则。
ibmcloud is sg $sg
-
要创建入站交通规则,请使用
ibmcloud is sg-rulec <sg> inbound
命令。ibmcloud is sg-rulec $sg inbound <protocol> [--remote <remote_address> | <CIDR_block> | <security_group_ID>] [--icmp-type <icmp_type> [--icmp-code <icmp_code>]] [--port-min <port_min>] [--port-max <port_max>]
-
要创建出站流量规则,请使用
ibmcloud is sg-rulec <sg> outbound
命令。ibmcloud is sg-rulec $sg outbound <protocol> [--remote <remote_address> | <CIDR_block> | <security_group_ID>] [--icmp-type <icmp_type> [--icmp-code <icmp_code>]] [--port-min <port_min>] [--port-max <port_max>]
-
创建定制出站规则后,获取允许所有出站流量的缺省规则的标识。
ibmcloud is sg $sg
示例输出
Rules ID Direction IP version Protocol Remote r010-e3a34cbb-d5e8-4713-a57e-3e35a7458272 inbound ipv4 all freeload-flavored-surging-repaying r010-036c3a13-1c16-4425-9667-a4ec34b1702b inbound ipv4 icmp Type=8 0.0.0.0/0 r010-15591636-6976-493f-a94f-70721702860a inbound ipv4 tcp Ports:Min=22,Max=22 0.0.0.0/0
-
删除允许所有出站流量的缺省规则。
ibmcloud is security-group-rule-delete $sg <rule_ID>
-
-
请记住,您可以创建自己的安全组以及对您创建的任何规则添加或除去规则,还必须创建所需的 入站和出站规则。
允许工作程序节点连接到 OAuth 服务的公共服务端点 IP 地址
对于具有公共服务端点的 VPC 集群是必需的。 此方案仅适用于 V 4.14 和更低版本。
登录您的账户。 如果适用,请将相应的资源组设定为目标。 设置集群的上下文。
-
获取 URL,用于连接
https://cXXX-e.<region>.containers.cloud.ibm.com:<PORT>
表单中的oauth服务。 记下地区和港口。oc get --raw /.well-known/oauth-authorization-server | grep issuer
示例输出
"issuer": "https://c104-e.us-east.containers.cloud.ibm.com:31062",
-
运行
dig +short
或nslookup
,获取与 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
-
为允许出站 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。
此方案仅适用于 V 4.14 和更低版本。
-
获取 LoadBalancer 服务的
EXTERNAL-IP
。oc get svc -o wide -n openshift-ingress router-default
-
在
EXTERNAL-IP
上运行dig
以获取与 LoadBalancer相关联的 IP 地址。dig <EXTERNAL-IP> +short
示例输出
150.XXX.XXX.XXX 169.XX.XXX.XXX
-
针对先前检索的每个 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 地址可能会更改以处理增加的或减少的负载。