6.10.22. 添加入口防火墙规则

集群需要多个防火墙规则。如果不使用共享 VPC,则由 ingress 控制器通过 GCP 云供应商创建这些规则。使用共享 VPC 时,现在可在集群请求访问时为所有服务创建集群范围的防火墙规则,或者根据事件创建每个规则。在集群请求访问时,通过创建每个规则,您需要知道具体的防火墙规则。通过创建集群范围的防火墙规则,您可以在多个集群中应用相同的规则。

如果您选择基于事件创建每个规则,必须在置备集群后创建防火墙规则,并在控制台通知您缺少规则时在集群生命周期中创建防火墙规则。此时会显示类似以下事件的事件,您必须添加所需防火墙规则:

$ oc get events -n openshift-ingress --field-selector="reason=LoadBalancerManualChange"

输出示例

Firewall change required by security admin: `gcloud compute firewall-rules create k8s-fw-a26e631036a3f46cba28f8df67266d55 --network example-network --description "{\"kubernetes.io/service-name\":\"openshift-ingress/router-default\", \"kubernetes.io/service-ip\":\"35.237.236.234\"}\" --allow tcp:443,tcp:80 --source-ranges 0.0.0.0/0 --target-tags exampl-fqzq7-master,exampl-fqzq7-worker --project example-project`

如果您在创建这些基于规则的事件时遇到问题,可以在集群运行时配置集群范围的防火墙规则。

6.10.22.1. 在 GCP 中为共享 VPC 创建集群范围的防火墙规则

您可以创建集群范围的防火墙规则,以允许 OpenShift Container Platform 集群所需的访问。

警告

如果您没有选择基于集群事件创建防火墙规则,您必须创建集群范围的防火墙规则。

先决条件

  • 您导出了部署集群的 Deployment Manager 模板所需的变量。
  • 您在集群所需的 GCP 中创建了网络和负载均衡组件。

流程

  1. 添加单个防火墙规则,允许 Google Cloud Engine 健康检查访问所有服务。此规则可让入口负载均衡器决定其实例的健康状况。

    $ gcloud compute firewall-rules create --allow='tcp:30000-32767,udp:30000-32767' --network="${CLUSTER_NETWORK}" --source-ranges='130.211.0.0/22,35.191.0.0/16,209.85.152.0/22,209.85.204.0/22' --target-tags="${INFRA_ID}-master,${INFRA_ID}-worker" ${INFRA_ID}-ingress-hc --account=${HOST_PROJECT_ACCOUNT} --project=${HOST_PROJECT}
  2. 添加一个防火墙规则来允许访问所有群集服务:

    • 对于外部集群:

      $ gcloud compute firewall-rules create --allow='tcp:80,tcp:443' --network="${CLUSTER_NETWORK}" --source-ranges="0.0.0.0/0" --target-tags="${INFRA_ID}-master,${INFRA_ID}-worker" ${INFRA_ID}-ingress --account=${HOST_PROJECT_ACCOUNT} --project=${HOST_PROJECT}
    • 对于私有集群:

      $ gcloud compute firewall-rules create --allow='tcp:80,tcp:443' --network="${CLUSTER_NETWORK}" --source-ranges=${NETWORK_CIDR} --target-tags="${INFRA_ID}-master,${INFRA_ID}-worker" ${INFRA_ID}-ingress --account=${HOST_PROJECT_ACCOUNT} --project=${HOST_PROJECT}

    因为这个规则只允许 TCP 端口 80443 的流量,请确定您添加了所有服务使用的端口。